/* SPDX-License-Identifier: GPL-2.0-only */

/dts-v1/;

/ {
	model = "Cavium ThunderX CN81XX board";
	compatible = "cavium,thunder-81xx";
	interrupt-parent = <0x1>;
	#address-cells = <0x2>;
	#size-cells = <0x2>;

	psci {
		compatible = "arm,psci-0.2";
		method = "smc";
	};

	cpus {
		#address-cells = <0x2>;
		#size-cells = <0x0>;

		cpu-map {

			cluster0 {

				core0 {
					cpu = <0x2>;
				};

				core1 {
					cpu = <0x3>;
				};

				core2 {
					cpu = <0x4>;
				};

				core3 {
					cpu = <0x5>;
				};
			};
		};

		cpu@0 {
			device_type = "cpu";
			compatible = "cavium,thunder", "arm,armv8";
			reg = <0x0 0x0>;
			enable-method = "psci";
			numa-node-id = <0x0>;
			next-level-cache = <0x6>;
			linux,phandle = <0x2>;
			phandle = <0x2>;
		};

		cpu@1 {
			device_type = "cpu";
			compatible = "cavium,thunder", "arm,armv8";
			reg = <0x0 0x1>;
			enable-method = "psci";
			numa-node-id = <0x0>;
			next-level-cache = <0x6>;
			linux,phandle = <0x3>;
			phandle = <0x3>;
		};

		cpu@2 {
			device_type = "cpu";
			compatible = "cavium,thunder", "arm,armv8";
			reg = <0x0 0x2>;
			enable-method = "psci";
			numa-node-id = <0x0>;
			next-level-cache = <0x6>;
			linux,phandle = <0x4>;
			phandle = <0x4>;
		};

		cpu@3 {
			device_type = "cpu";
			compatible = "cavium,thunder", "arm,armv8";
			reg = <0x0 0x3>;
			enable-method = "psci";
			numa-node-id = <0x0>;
			next-level-cache = <0x6>;
			linux,phandle = <0x5>;
			phandle = <0x5>;
		};
	};

	l2-cache0 {
		compatible = "cache";
		numa-node-id = <0x0>;
		linux,phandle = <0x6>;
		phandle = <0x6>;
	};

	timer {
		compatible = "arm,armv8-timer";
		interrupts = <0x1 0xd 0x4 0x1 0xe 0x4 0x1 0xb 0x4 0x1 0xa 0x4>;
	};

	pmu {
		compatible = "cavium,thunder-pmu", "arm,armv8-pmuv3";
		interrupts = <0x1 0x7 0x4>;
	};

	mmc_supply_3v3 {
		compatible = "regulator-fixed";
		regulator-name = "mmc_supply_3v3";
		regulator-min-microvolt = <0x325aa0>;
		regulator-max-microvolt = <0x325aa0>;
		gpio = <0x7 0x8 0x0>;
		enable-active-high;
		linux,phandle = <0xf>;
		phandle = <0xf>;
	};

	interrupt-controller@801000000000 {
		compatible = "arm,gic-v3";
		#interrupt-cells = <0x3>;
		#address-cells = <0x2>;
		#size-cells = <0x2>;
		#redistributor-regions = <0x1>;
		ranges;
		interrupt-controller;
		reg = <0x8010 0x0 0x0 0x10000 0x8010 0x80000000 0x0 0x600000>;
		interrupts = <0x1 0x9 0x4>;
		linux,phandle = <0x1>;
		phandle = <0x1>;

		gic-its@801000020000 {
			compatible = "arm,gic-v3-its";
			reg = <0x8010 0x20000 0x0 0x200000>;
			msi-controller;
			numa-node-id = <0x0>;
			linux,phandle = <0xd>;
			phandle = <0xd>;
		};
	};

	soc@0 {
		compatible = "simple-bus";
		#address-cells = <0x2>;
		#size-cells = <0x2>;
		ranges;
		numa-node-id = <0x0>;

		refclkuaa {
			compatible = "fixed-clock";
			#clock-cells = <0x0>;
			clock-frequency = <0x6f3c900>;
			clock-output-names = "refclkuaa";
			linux,phandle = <0x8>;
			phandle = <0x8>;
		};

		sclk {
			compatible = "fixed-clock";
			#clock-cells = <0x0>;
			clock-frequency = <0x2faf0800>;
			clock-output-names = "sclk";
			linux,phandle = <0xe>;
			phandle = <0xe>;
		};

		serial@87e028000000 {
			compatible = "arm,pl011", "arm,primecell";
			reg = <0x87e0 0x28000000 0x0 0x1000>;
			interrupts = <0x0 0x5 0x4>;
			clocks = <0x8>;
			clock-names = "apb_pclk";
			skip-init;
		};

		serial@87e029000000 {
			compatible = "arm,pl011", "arm,primecell";
			reg = <0x87e0 0x29000000 0x0 0x1000>;
			interrupts = <0x0 0x6 0x4>;
			clocks = <0x8>;
			clock-names = "apb_pclk";
			skip-init;
		};

		serial@87e02a000000 {
			compatible = "arm,pl011", "arm,primecell";
			reg = <0x87e0 0x2a000000 0x0 0x1000>;
			interrupts = <0x0 0x7 0x4>;
			clocks = <0x8>;
			clock-names = "apb_pclk";
			skip-init;
		};

		serial@87e02b000000 {
			compatible = "arm,pl011", "arm,primecell";
			reg = <0x87e0 0x2b000000 0x0 0x1000>;
			interrupts = <0x0 0x8 0x4>;
			clocks = <0x8>;
			clock-names = "apb_pclk";
			skip-init;
		};

		watch-dog@8440000a0000 {
			compatible = "arm,sbsa-gwdt";
			reg = <0x8440 0xa0000 0x0 0x1000 0x8440 0xb0000 0x0 0x1000>;
			interrupts = <0x0 0x9 0x4>;
		};

		smmu0@830000000000 {
			compatible = "cavium,smmu-v2";
			reg = <0x8300 0x0 0x0 0x2000000>;
			#global-interrupts = <0x1>;
			interrupts = <0x0 0x44 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4 0x0 0x45 0x4>;
			mmu-masters = <0x9 0x100 0xa 0x200 0xb 0x300 0xc 0x400>;
		};

		pci@848000000000 {
			compatible = "pci-host-ecam-generic";
			device_type = "pci";
			msi-parent = <0xd>;
			msi-map = <0x0 0xd 0x0 0x10000>;
			bus-range = <0x0 0x1f>;
			#size-cells = <0x2>;
			#address-cells = <0x3>;
			#stream-id-cells = <0x1>;
			dma-coherent;
			reg = <0x8480 0x0 0x0 0x2000000>;
			ranges = <0x3000000 0x8010 0x0 0x8010 0x0 0x80 0x0 0x3000000 0x8100 0x0 0x8100 0x0 0x80 0x0 0x3000000 0x8680 0x0 0x8680 0x0 0x160 0x28000000 0x3000000 0x87e0 0x2c000000 0x87e0 0x2c000000 0x0 0x94000000 0x3000000 0x8400 0x0 0x8400 0x0 0x10 0x0 0x3000000 0x8430 0x0 0x8430 0x0 0x2 0x0 0x3000000 0x87e0 0xc6000000 0x87e0 0xc6000000 0x1f 0x3a000000>;
			linux,phandle = <0x9>;
			phandle = <0x9>;

			mrml-bridge0@1,0 {
				compatible = "pci-bridge", "cavium,thunder-8890-mrml-bridge";
				#size-cells = <0x2>;
				#address-cells = <0x3>;
				ranges = <0x3000000 0x87e0 0x0 0x3000000 0x87e0 0x0 0x10 0x0>;
				reg = <0x800 0x0 0x0 0x0 0x0>;
				device_type = "pci";

				mdio-nexus@1,3 {
					compatible = "cavium,thunder-8890-mdio-nexus";
					#address-cells = <0x2>;
					#size-cells = <0x2>;
					reg = <0xb00 0x0 0x0 0x0 0x0>;
					assigned-addresses = <0x3000000 0x87e0 0x5000000 0x0 0x800000>;
					ranges = <0x87e0 0x5000000 0x3000000 0x87e0 0x5000000 0x0 0x800000>;

					mdio0@87e005003800 {
						compatible = "cavium,thunder-8890-mdio";
						#address-cells = <0x1>;
						#size-cells = <0x0>;
						reg = <0x87e0 0x5003800 0x0 0x30>;
					};

					mdio1@87e005003880 {
						compatible = "cavium,thunder-8890-mdio";
						#address-cells = <0x1>;
						#size-cells = <0x0>;
						reg = <0x87e0 0x5003880 0x0 0x30>;
					};
				};

				mmc@1,4 {
					compatible = "cavium,thunder-8890-mmc";
					reg = <0xc00 0x0 0x0 0x0 0x0>;
					#address-cells = <0x1>;
					#size-cells = <0x0>;
					clocks = <0xe>;

					mmc-slot@0 {
						compatible = "mmc-slot";
						reg = <0x0>;
						vmmc-supply = <0xf>;
						max-frequency = <0x18cba80>;
						no-1-8-v;
						bus-width = <0x4>;
						disable-wp;
						broken-cd;
						sd-uhs-sdr25;
						sd-uhs-ddr50;
						sd-uhs-sdr50;
						cap-sd-highspeed;
						no-sdio;
						no-mmc;
					};
				};

				i2c@9,0 {
					#address-cells = <0x1>;
					#size-cells = <0x0>;
					compatible = "cavium,thunder-8890-twsi";
					reg = <0x4800 0x0 0x0 0x0 0x0>;
					clock-frequency = <0x186a0>;
					clocks = <0xe>;

					idt-ptp@0x52 {
						compatible = "idt,82p33914-1";
						reg = <0x52>;
					};
				};

				i2c@9,1 {
					#address-cells = <0x1>;
					#size-cells = <0x0>;
					compatible = "cavium,thunder-8890-twsi";
					reg = <0x4900 0x0 0x0 0x0 0x0>;
					clock-frequency = <0x186a0>;
					clocks = <0xe>;

					rom@54 {
						compatible = "atmel,24c256";
						reg = <0x54>;
						pagesize = <0x40>;
					};

					rtc@68 {
						compatible = "isil,isl12057";
						reg = <0x68>;
					};

					tpm@20 {
						compatible = "infineon,slb9645tt";
						reg = <0x20>;
					};
				};

				rgx0 {
					#address-cells = <0x1>;
					#size-cells = <0x0>;
					compatible = "cavium,thunder-8890-bgx";
					reg = <0x9000 0x0 0x0 0x0 0x0>;

					rgmii00 {
						reg = <0x0>;
						local-mac-address = [00 00 00 00 00 00];
					};
				};

				bgx0 {
					#address-cells = <0x1>;
					#size-cells = <0x0>;
					compatible = "cavium,thunder-8890-bgx";
					reg = <0x8000 0x0 0x0 0x0 0x0>;

					sgmii00 {
						reg = <0x0>;
						qlm-mode = "0x000,sgmii";
						local-mac-address = [00 00 00 00 00 00];
						cavium,disable-autonegotiation;
					};
				};

				bgx1 {
					#address-cells = <0x1>;
					#size-cells = <0x0>;
					compatible = "cavium,thunder-8890-bgx";
					reg = <0x8100 0x0 0x0 0x0 0x0>;
				};
			};

			spi@7,0 {
				compatible = "cavium,thunder-8190-spi";
				reg = <0x3800 0x0 0x0 0x0 0x0>;
				#address-cells = <0x1>;
				#size-cells = <0x0>;
				clocks = <0xe>;

				flash@0 {
					compatible = "winbond,w25q128", "jedec,spi-nor";
					reg = <0x0>;
					spi-max-frequency = <104000000>;
					#address-cells = <0x1>;
					#size-cells = <0x1>;
				};
			};

			gpio0@6,0 {
				#gpio-cells = <0x2>;
				compatible = "cavium,thunder-8890-gpio";
				gpio-controller;
				reg = <0x3000 0x0 0x0 0x0 0x0>;
				linux,phandle = <0x7>;
				phandle = <0x7>;
			};

			nand@b,0 {
				#address-cells = <0x1>;
				#size-cells = <0x0>;
				compatible = "cavium,cn8130-nand";
				reg = <0x5800 0x0 0x0 0x0 0x0>;
				clocks = <0xe>;
			};
		};

		pci@87e0c0000000 {
			compatible = "cavium,pci-host-thunder-pem";
			device_type = "pci";
			msi-parent = <0xd>;
			msi-map = <0x0 0xd 0x0 0x10000>;
			bus-range = <0x1f 0x57>;
			#size-cells = <0x2>;
			#address-cells = <0x3>;
			#stream-id-cells = <0x1>;
			dma-coherent;
			reg = <0x8800 0x1f000000 0x0 0x39000000 0x87e0 0xc0000000 0x0 0x1000000>;
			ranges = <0x1000000 0x0 0x0 0x8830 0x0 0x0 0x10000 0x3000000 0x0 0x10000000 0x8810 0x10000000 0xf 0xf0000000 0x43000000 0x10 0x0 0x8820 0x0 0x10 0x0 0x3000000 0x87e0 0xc0000000 0x87e0 0xc0000000 0x0 0x1000000>;
			#interrupt-cells = <0x1>;
			interrupt-map-mask = <0x0 0x0 0x0 0x7>;
			interrupt-map = <0x0 0x0 0x0 0x1 0x1 0x0 0x0 0x0 0x10 0x4 0x0 0x0 0x0 0x2 0x1 0x0 0x0 0x0 0x11 0x4 0x0 0x0 0x0 0x3 0x1 0x0 0x0 0x0 0x12 0x4 0x0 0x0 0x0 0x4 0x1 0x0 0x0 0x0 0x13 0x4>;
			linux,phandle = <0xa>;
			phandle = <0xa>;
		};

		pci@87e0c1000000 {
			compatible = "cavium,pci-host-thunder-pem";
			device_type = "pci";
			msi-parent = <0xd>;
			msi-map = <0x0 0xd 0x0 0x10000>;
			bus-range = <0x57 0x8f>;
			#size-cells = <0x2>;
			#address-cells = <0x3>;
			#stream-id-cells = <0x1>;
			dma-coherent;
			reg = <0x8840 0x57000000 0x0 0x39000000 0x87e0 0xc1000000 0x0 0x1000000>;
			ranges = <0x1000000 0x0 0x10000 0x8870 0x10000 0x0 0x10000 0x3000000 0x0 0x10000000 0x8850 0x10000000 0xf 0xf0000000 0x43000000 0x10 0x0 0x8860 0x0 0x10 0x0 0x3000000 0x87e0 0xc1000000 0x87e0 0xc1000000 0x0 0x1000000>;
			#interrupt-cells = <0x1>;
			interrupt-map-mask = <0x0 0x0 0x0 0x7>;
			interrupt-map = <0x0 0x0 0x0 0x1 0x1 0x0 0x0 0x0 0x14 0x4 0x0 0x0 0x0 0x2 0x1 0x0 0x0 0x0 0x15 0x4 0x0 0x0 0x0 0x3 0x1 0x0 0x0 0x0 0x16 0x4 0x0 0x0 0x0 0x4 0x1 0x0 0x0 0x0 0x17 0x4>;
			linux,phandle = <0xb>;
			phandle = <0xb>;
		};

		pci@87e0c2000000 {
			compatible = "cavium,pci-host-thunder-pem";
			device_type = "pci";
			msi-parent = <0xd>;
			msi-map = <0x0 0xd 0x0 0x10000>;
			bus-range = <0x8f 0xc7>;
			#size-cells = <0x2>;
			#address-cells = <0x3>;
			#stream-id-cells = <0x1>;
			dma-coherent;
			reg = <0x8880 0x8f000000 0x0 0x39000000 0x87e0 0xc2000000 0x0 0x1000000>;
			ranges = <0x1000000 0x0 0x20000 0x88b0 0x20000 0x0 0x10000 0x3000000 0x0 0x10000000 0x8890 0x10000000 0xf 0xf0000000 0x43000000 0x10 0x0 0x88a0 0x0 0x10 0x0 0x3000000 0x87e0 0xc2000000 0x87e0 0xc2000000 0x0 0x1000000>;
			#interrupt-cells = <0x1>;
			interrupt-map-mask = <0x0 0x0 0x0 0x7>;
			interrupt-map = <0x0 0x0 0x0 0x1 0x1 0x0 0x0 0x0 0x18 0x4 0x0 0x0 0x0 0x2 0x1 0x0 0x0 0x0 0x19 0x4 0x0 0x0 0x0 0x3 0x1 0x0 0x0 0x0 0x1a 0x4 0x0 0x0 0x0 0x4 0x1 0x0 0x0 0x0 0x1b 0x4>;
			linux,phandle = <0xc>;
			phandle = <0xc>;
		};

		tdm@d,0 {
			#address-cells = <0x1>;
			#size-cells = <0x0>;
			compatible = "cavium,thunder-8190-tdm";
			reg = <0x6800 0x0 0x0 0x0>;
			clocks = <0xe>;
		};
	};

	aliases {
		serial0 = "/soc@0/serial@87e028000000";
		serial1 = "/soc@0/serial@87e029000000";
		serial2 = "/soc@0/serial@87e02a000000";
		serial3 = "/soc@0/serial@87e02b000000";
		i2c0 = "/soc@0/pci@848000000000/mrml-bridge0@1,0/i2c@9,0";
		i2c1 = "/soc@0/pci@848000000000/mrml-bridge0@1,0/i2c@9,1";
		spi0 = "/soc@0/pci@848000000000/spi@7,0";
	};

	chosen {
		stdout-path = "serial0:115200n8";
	};

	memory@0 {
		device_type = "memory";
		reg = <0x0 0x1400000 0x0 0x7ec00000>;
		numa-node-id = <0x0>;
	};
};