Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/arm64/boot/dts/xilinx/versal-net.dtsi
26498 views
// SPDX-License-Identifier: GPL-2.0
/*
 * dts file for Xilinx Versal NET
 *
 * (C) Copyright 2022, Xilinx, Inc.
 * (C) Copyright 2022 - 2025, Advanced Micro Devices, Inc.
 *
 * Michal Simek <[email protected]>
 */

/dts-v1/;

/ {
	compatible = "xlnx,versal-net";
	model = "Xilinx Versal NET";
	#address-cells = <2>;
	#size-cells = <2>;
	interrupt-parent = <&gic>;

	options {
		u-boot {
			compatible = "u-boot,config";
			bootscr-address = /bits/ 64 <0x20000000>;
		};
	};

	cpus {
		#address-cells = <1>;
		#size-cells = <0>;
		cpu-map {
			cluster0 {
				core0 {
					cpu = <&cpu0>;
				};
				core1 {
					cpu = <&cpu100>;
				};
				core2 {
					cpu = <&cpu200>;
				};
				core3 {
					cpu = <&cpu300>;
				};
			};

			cluster1 {
				core0 {
					cpu = <&cpu10000>;
				};

				core1 {
					cpu = <&cpu10100>;
				};

				core2 {
					cpu = <&cpu10200>;
				};

				core3 {
					cpu = <&cpu10300>;
				};
			};
			cluster2 {
				core0 {
					cpu = <&cpu20000>;
				};

				core1 {
					cpu = <&cpu20100>;
				};

				core2 {
					cpu = <&cpu20200>;
				};

				core3 {
					cpu = <&cpu20300>;
				};
			};
			cluster3 {
				core0 {
					cpu = <&cpu30000>;
				};

				core1 {
					cpu = <&cpu30100>;
				};

				core2 {
					cpu = <&cpu30200>;
				};

				core3 {
					cpu = <&cpu30300>;
				};
			};

		};

		cpu0: cpu@0 {
			compatible = "arm,cortex-a78";
			device_type = "cpu";
			enable-method = "psci";
			reg = <0>;
			operating-points-v2 = <&cpu_opp_table>;
			cpu-idle-states = <&CPU_SLEEP_0>;
		};
		cpu100: cpu@100 {
			compatible = "arm,cortex-a78";
			device_type = "cpu";
			enable-method = "psci";
			reg = <0x100>;
			operating-points-v2 = <&cpu_opp_table>;
			cpu-idle-states = <&CPU_SLEEP_0>;
		};
		cpu200: cpu@200 {
			compatible = "arm,cortex-a78";
			device_type = "cpu";
			enable-method = "psci";
			reg = <0x200>;
			operating-points-v2 = <&cpu_opp_table>;
			cpu-idle-states = <&CPU_SLEEP_0>;
		};
		cpu300: cpu@300 {
			compatible = "arm,cortex-a78";
			device_type = "cpu";
			enable-method = "psci";
			reg = <0x300>;
			operating-points-v2 = <&cpu_opp_table>;
			cpu-idle-states = <&CPU_SLEEP_0>;
		};
		cpu10000: cpu@10000 {
			compatible = "arm,cortex-a78";
			device_type = "cpu";
			enable-method = "psci";
			reg = <0x10000>;
			operating-points-v2 = <&cpu_opp_table>;
			cpu-idle-states = <&CPU_SLEEP_0>;
		};
		cpu10100: cpu@10100 {
			compatible = "arm,cortex-a78";
			device_type = "cpu";
			enable-method = "psci";
			reg = <0x10100>;
			operating-points-v2 = <&cpu_opp_table>;
			cpu-idle-states = <&CPU_SLEEP_0>;
		};
		cpu10200: cpu@10200 {
			compatible = "arm,cortex-a78";
			device_type = "cpu";
			enable-method = "psci";
			reg = <0x10200>;
			operating-points-v2 = <&cpu_opp_table>;
			cpu-idle-states = <&CPU_SLEEP_0>;
		};
		cpu10300: cpu@10300 {
			compatible = "arm,cortex-a78";
			device_type = "cpu";
			enable-method = "psci";
			reg = <0x10300>;
			operating-points-v2 = <&cpu_opp_table>;
			cpu-idle-states = <&CPU_SLEEP_0>;
		};
		cpu20000: cpu@20000 {
			compatible = "arm,cortex-a78";
			device_type = "cpu";
			enable-method = "psci";
			reg = <0x20000>;
			operating-points-v2 = <&cpu_opp_table>;
			cpu-idle-states = <&CPU_SLEEP_0>;
		};
		cpu20100: cpu@20100 {
			compatible = "arm,cortex-a78";
			device_type = "cpu";
			enable-method = "psci";
			reg = <0x20100>;
			operating-points-v2 = <&cpu_opp_table>;
			cpu-idle-states = <&CPU_SLEEP_0>;
		};
		cpu20200: cpu@20200 {
			compatible = "arm,cortex-a78";
			device_type = "cpu";
			enable-method = "psci";
			reg = <0x20200>;
			operating-points-v2 = <&cpu_opp_table>;
			cpu-idle-states = <&CPU_SLEEP_0>;
		};
		cpu20300: cpu@20300 {
			compatible = "arm,cortex-a78";
			device_type = "cpu";
			enable-method = "psci";
			reg = <0x20300>;
			operating-points-v2 = <&cpu_opp_table>;
			cpu-idle-states = <&CPU_SLEEP_0>;
		};
		cpu30000: cpu@30000 {
			compatible = "arm,cortex-a78";
			device_type = "cpu";
			enable-method = "psci";
			reg = <0x30000>;
			operating-points-v2 = <&cpu_opp_table>;
			cpu-idle-states = <&CPU_SLEEP_0>;
		};
		cpu30100: cpu@30100 {
			compatible = "arm,cortex-a78";
			device_type = "cpu";
			enable-method = "psci";
			reg = <0x30100>;
			operating-points-v2 = <&cpu_opp_table>;
			cpu-idle-states = <&CPU_SLEEP_0>;
		};
		cpu30200: cpu@30200 {
			compatible = "arm,cortex-a78";
			device_type = "cpu";
			enable-method = "psci";
			reg = <0x30200>;
			operating-points-v2 = <&cpu_opp_table>;
			cpu-idle-states = <&CPU_SLEEP_0>;
		};
		cpu30300: cpu@30300 {
			compatible = "arm,cortex-a78";
			device_type = "cpu";
			enable-method = "psci";
			reg = <0x30300>;
			operating-points-v2 = <&cpu_opp_table>;
			cpu-idle-states = <&CPU_SLEEP_0>;
		};
		idle-states {
			entry-method = "psci";

			CPU_SLEEP_0: cpu-sleep-0 {
				compatible = "arm,idle-state";
				arm,psci-suspend-param = <0x40000000>;
				local-timer-stop;
				entry-latency-us = <300>;
				exit-latency-us = <600>;
				min-residency-us = <10000>;
			};
		};
	};

	cpu_opp_table: opp-table {
		compatible = "operating-points-v2";
		opp-1066000000 {
			opp-hz = /bits/ 64 <1066000000>;
			opp-microvolt = <1000000>;
			clock-latency-ns = <500000>;
		};
		opp-1866000000 {
			opp-hz = /bits/ 64 <1866000000>;
			opp-microvolt = <1000000>;
			clock-latency-ns = <500000>;
		};
		opp-1900000000 {
			opp-hz = /bits/ 64 <1900000000>;
			opp-microvolt = <1000000>;
			clock-latency-ns = <500000>;
		};
		opp-1999000000 {
			opp-hz = /bits/ 64 <1999000000>;
			opp-microvolt = <1000000>;
			clock-latency-ns = <500000>;
		};
		opp-2050000000 {
			opp-hz = /bits/ 64 <2050000000>;
			opp-microvolt = <1000000>;
			clock-latency-ns = <500000>;
		};
		opp-2100000000 {
			opp-hz = /bits/ 64 <2100000000>;
			opp-microvolt = <1000000>;
			clock-latency-ns = <500000>;
		};
		opp-2200000000 {
			opp-hz = /bits/ 64 <2200000000>;
			opp-microvolt = <1000000>;
			clock-latency-ns = <500000>;
		};
		opp-2400000000 {
			opp-hz = /bits/ 64 <2400000000>;
			opp-microvolt = <1000000>;
			clock-latency-ns = <500000>;
		};
	};

	aliases {
		serial0 = &serial0;
		serial1 = &serial1;
		serial2 = &dcc;
		mmc0 = &sdhci0;
		mmc1 = &sdhci1;
		i2c0 = &i2c0;
		i2c1 = &i2c1;
		rtc = &rtc;
		usb0 = &usb0;
		usb1 = &usb1;
		spi0 = &ospi;
		spi1 = &qspi;
	};

	dcc: dcc {
		compatible = "arm,dcc";
		status = "disabled";
		bootph-all;
	};

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

	fpga: fpga-region {
		compatible = "fpga-region";
		fpga-mgr = <&versal_fpga>;
		#address-cells = <2>;
		#size-cells = <2>;
	};

	timer: timer {
		compatible = "arm,armv8-timer";
		interrupts = <1 13 4>, <1 14 4>, <1 11 4>, <1 10 4>;
	};

	versal_fpga: versal-fpga {
		compatible = "xlnx,versal-fpga";
	};

	amba: axi {
		compatible = "simple-bus";
		bootph-all;
		#address-cells = <2>;
		#size-cells = <2>;
		ranges;

		adma0: dma-controller@ebd00000 {
			compatible = "xlnx,zynqmp-dma-1.0";
			status = "disabled";
			reg = <0 0xebd00000 0 0x1000>;
			interrupts = <0 72 4>;
			clock-names = "clk_main", "clk_apb";
			#dma-cells = <1>;
			xlnx,bus-width = <64>;
		};

		adma1: dma-controller@ebd10000 {
			compatible = "xlnx,zynqmp-dma-1.0";
			status = "disabled";
			reg = <0 0xebd10000 0 0x1000>;
			interrupts = <0 73 4>;
			clock-names = "clk_main", "clk_apb";
			#dma-cells = <1>;
			xlnx,bus-width = <64>;
		};

		adma2: dma-controller@ebd20000 {
			compatible = "xlnx,zynqmp-dma-1.0";
			status = "disabled";
			reg = <0 0xebd20000 0 0x1000>;
			interrupts = <0 74 4>;
			clock-names = "clk_main", "clk_apb";
			#dma-cells = <1>;
			xlnx,bus-width = <64>;
		};

		adma3: dma-controller@ebd30000 {
			compatible = "xlnx,zynqmp-dma-1.0";
			status = "disabled";
			reg = <0 0xebd30000 0 0x1000>;
			interrupts = <0 75 4>;
			clock-names = "clk_main", "clk_apb";
			#dma-cells = <1>;
			xlnx,bus-width = <64>;
		};

		adma4: dma-controller@ebd40000 {
			compatible = "xlnx,zynqmp-dma-1.0";
			status = "disabled";
			reg = <0 0xebd40000 0 0x1000>;
			interrupts = <0 76 4>;
			clock-names = "clk_main", "clk_apb";
			#dma-cells = <1>;
			xlnx,bus-width = <64>;
		};

		adma5: dma-controller@ebd50000 {
			compatible = "xlnx,zynqmp-dma-1.0";
			status = "disabled";
			reg = <0 0xebd50000 0 0x1000>;
			interrupts = <0 77 4>;
			clock-names = "clk_main", "clk_apb";
			#dma-cells = <1>;
			xlnx,bus-width = <64>;
		};

		adma6: dma-controller@ebd60000 {
			compatible = "xlnx,zynqmp-dma-1.0";
			status = "disabled";
			reg = <0 0xebd60000 0 0x1000>;
			interrupts = <0 78 4>;
			clock-names = "clk_main", "clk_apb";
			#dma-cells = <1>;
			xlnx,bus-width = <64>;
		};

		adma7: dma-controller@ebd70000 {
			compatible = "xlnx,zynqmp-dma-1.0";
			status = "disabled";
			reg = <0 0xebd70000 0 0x1000>;
			interrupts = <0 79 4>;
			clock-names = "clk_main", "clk_apb";
			#dma-cells = <1>;
			xlnx,bus-width = <64>;
		};

		can0: can@f1980000 {
			compatible = "xlnx,canfd-2.0";
			status = "disabled";
			reg = <0 0xf1980000 0 0x6000>;
			interrupts = <0 27 4>;
			clock-names = "can_clk", "s_axi_aclk";
			rx-fifo-depth = <64>;
			tx-mailbox-count = <32>;
		};

		can1: can@f1990000 {
			compatible = "xlnx,canfd-2.0";
			status = "disabled";
			reg = <0 0xf1990000 0 0x6000>;
			interrupts = <0 28 4>;
			clock-names = "can_clk", "s_axi_aclk";
			rx-fifo-depth = <64>;
			tx-mailbox-count = <32>;
		};

		gem0: ethernet@f19e0000 {
			compatible = "xlnx,versal-gem", "cdns,gem";
			status = "disabled";
			reg = <0 0xf19e0000 0 0x1000>;
			interrupts = <0 39 4>, <0 39 4>;
			clock-names = "pclk", "hclk", "tx_clk", "rx_clk",
				      "tsu_clk";
		};

		gem1: ethernet@f19f0000 {
			compatible = "xlnx,versal-gem", "cdns,gem";
			status = "disabled";
			reg = <0 0xf19f0000 0 0x1000>;
			interrupts = <0 41 4>, <0 41 4>;
			clock-names = "pclk", "hclk", "tx_clk", "rx_clk",
				      "tsu_clk";
		};

		gic: interrupt-controller@e2000000 {
			compatible = "arm,gic-v3";
			#interrupt-cells = <3>;
			reg = <0 0xe2000000 0 0x10000>,
			      <0 0xe2060000 0 0x200000>;
			interrupt-controller;
			interrupts = <1 9 4>;
			#address-cells = <2>;
			#size-cells = <2>;
			ranges;
			its: msi-controller@e2040000 {
				compatible = "arm,gic-v3-its";
				msi-controller;
				#msi-cells = <1>;
				reg = <0 0xe2040000 0 0x20000>;
			};
		};

		gpio0: gpio@f19d0000 {
			compatible = "xlnx,versal-gpio-1.0";
			status = "disabled";
			reg = <0 0xf19d0000 0 0x1000>;
			interrupts = <0 20 4>;
			#gpio-cells = <2>;
			gpio-controller;
			#interrupt-cells = <2>;
			interrupt-controller;
		};

		gpio1: gpio@f1020000 {
			compatible = "xlnx,pmc-gpio-1.0";
			status = "disabled";
			reg = <0 0xf1020000 0 0x1000>;
			interrupts = <0 180 4>;
			#gpio-cells = <2>;
			gpio-controller;
			#interrupt-cells = <2>;
			interrupt-controller;
		};

		i2c0: i2c@f1940000 {
			compatible = "cdns,i2c-r1p14";
			status = "disabled";
			reg = <0 0xf1940000 0 0x1000>;
			interrupts = <0 21 4>;
			clock-frequency = <400000>;
			#address-cells = <1>;
			#size-cells = <0>;
		};

		i2c1: i2c@f1950000 {
			compatible = "cdns,i2c-r1p14";
			status = "disabled";
			reg = <0 0xf1950000 0 0x1000>;
			interrupts = <0 22 4>;
			clock-frequency = <400000>;
			#address-cells = <1>;
			#size-cells = <0>;
		};

		i3c0: i3c@f1948000 {
			compatible = "snps,dw-i3c-master-1.00a";
			status = "disabled";
			reg = <0 0xf1948000 0 0x1000>;
			#address-cells = <3>;
			#size-cells = <0>;
			interrupts = <0 21 4>;
		};

		i3c1: i3c@f1958000 {
			compatible = "snps,dw-i3c-master-1.00a";
			status = "disabled";
			reg = <0 0xf1958000 0 0x1000>;
			#address-cells = <3>;
			#size-cells = <0>;
			interrupts = <0 22 4>;
		};

		ospi: spi@f1010000 {
			compatible = "xlnx,versal-ospi-1.0", "cdns,qspi-nor";
			status = "disabled";
			reg = <0 0xf1010000 0 0x10000>,
			      <0 0xc0000000 0 0x20000000>;
			interrupts = <0 182 4>;
			cdns,fifo-depth = <256>;
			cdns,fifo-width = <4>;
			cdns,is-dma = <1>; /* u-boot specific */
			cdns,trigger-address = <0xc0000000>;
		};

		qspi: spi@f1030000 {
			compatible = "xlnx,versal-qspi-1.0";
			status = "disabled";
			reg = <0 0xf1030000 0 0x1000>;
			interrupts = <0 183 4>;
			clock-names = "ref_clk", "pclk";
		};

		rtc: rtc@f12a0000 {
			compatible = "xlnx,zynqmp-rtc";
			status = "disabled";
			reg = <0 0xf12a0000 0 0x100>;
			interrupts = <0 200 4>, <0 201 4>;
			interrupt-names = "alarm", "sec";
			calibration = <0x8000>;
		};

		sdhci0: mmc@f1040000 {
			compatible = "xlnx,versal-8.9a", "arasan,sdhci-8.9a";
			status = "disabled";
			reg = <0 0xf1040000 0 0x10000>;
			interrupts = <0 184 4>;
			clock-names = "clk_xin", "clk_ahb", "gate";
			#clock-cells = <1>;
			clock-output-names = "clk_out_sd0", "clk_in_sd0";
		};

		sdhci1: mmc@f1050000 {
			compatible = "xlnx,versal-net-emmc";
			status = "disabled";
			reg = <0 0xf1050000 0 0x10000>;
			interrupts = <0 186 4>;
			clock-names = "clk_xin", "clk_ahb", "gate";
			#clock-cells = <1>;
			clock-output-names = "clk_out_sd1", "clk_in_sd1";
		};

		serial0: serial@f1920000 {
			bootph-all;
			compatible = "arm,pl011", "arm,primecell";
			status = "disabled";
			reg = <0 0xf1920000 0 0x1000>;
			interrupts = <0 25 4>;
			reg-io-width = <4>;
			clock-names = "uartclk", "apb_pclk";
		};

		serial1: serial@f1930000 {
			bootph-all;
			compatible = "arm,pl011", "arm,primecell";
			status = "disabled";
			reg = <0 0xf1930000 0 0x1000>;
			interrupts = <0 26 4>;
			reg-io-width = <4>;
			clock-names = "uartclk", "apb_pclk";
		};

		smmu: iommu@ec000000 {
			compatible = "arm,smmu-v3";
			status = "disabled";
			reg = <0 0xec000000 0 0x40000>;
			#iommu-cells = <1>;
			interrupt-names = "combined";
			interrupts = <0 169 4>;
			dma-coherent;
		};

		spi0: spi@f1960000 {
			compatible = "cdns,spi-r1p6";
			status = "disabled";
			interrupts = <0 23 4>;
			reg = <0 0xf1960000 0 0x1000>;
			clock-names = "ref_clk", "pclk";
		};

		spi1: spi@f1970000 {
			compatible = "cdns,spi-r1p6";
			status = "disabled";
			interrupts = <0 24 4>;
			reg = <0 0xf1970000 0 0x1000>;
			clock-names = "ref_clk", "pclk";
		};

		ttc0: timer@f1dc0000 {
			compatible = "cdns,ttc";
			status = "disabled";
			interrupts = <0 43 4>, <0 44 4>, <0 45 4>;
			timer-width = <32>;
			reg = <0x0 0xf1dc0000 0x0 0x1000>;
		};

		ttc1: timer@f1dd0000 {
			compatible = "cdns,ttc";
			status = "disabled";
			interrupts = <0 46 4>, <0 47 4>, <0 48 4>;
			timer-width = <32>;
			reg = <0x0 0xf1dd0000 0x0 0x1000>;
		};

		ttc2: timer@f1de0000 {
			compatible = "cdns,ttc";
			status = "disabled";
			interrupts = <0 49 4>, <0 50 4>, <0 51 4>;
			timer-width = <32>;
			reg = <0x0 0xf1de0000 0x0 0x1000>;
		};

		ttc3: timer@f1df0000 {
			compatible = "cdns,ttc";
			status = "disabled";
			interrupts = <0 52 4>, <0 53 4>, <0 54 4>;
			timer-width = <32>;
			reg = <0x0 0xf1df0000 0x0 0x1000>;
		};

		usb0: usb@f1e00000 {
			compatible = "xlnx,versal-dwc3";
			status = "disabled";
			reg = <0 0xf1e00000 0 0x100>;
			clock-names = "bus_clk", "ref_clk";
			ranges;
			#address-cells = <2>;
			#size-cells = <2>;

			dwc3_0: usb@f1b00000  {
				compatible = "snps,dwc3";
				status = "disabled";
				reg = <0 0xf1b00000 0 0x10000>;
				interrupt-names = "host", "peripheral", "otg", "wakeup";
				interrupts = <0 29 4>, <0 29 4>, <0 33 4>, <0 98 4>;
				snps,dis_u2_susphy_quirk;
				snps,dis_u3_susphy_quirk;
				snps,quirk-frame-length-adjustment = <0x20>;
				dr_mode = "peripheral";
				maximum-speed = "high-speed";
				snps,usb3_lpm_capable;
				clock-names = "ref";
			};
		};

		usb1: usb@f1e10000 {
			compatible = "xlnx,versal-dwc3";
			status = "disabled";
			reg = <0x0 0xf1e10000 0x0 0x100>;
			clock-names = "bus_clk", "ref_clk";
			ranges;
			#address-cells = <2>;
			#size-cells = <2>;

			dwc3_1: usb@f1c00000  {
				compatible = "snps,dwc3";
				status = "disabled";
				reg = <0x0 0xf1c00000 0x0 0x10000>;
				interrupt-names = "host", "peripheral", "otg", "wakeup";
				interrupts = <0 34 4>, <0 34 4>, <0 38 4>, <0 99 4>;
				snps,dis_u2_susphy_quirk;
				snps,dis_u3_susphy_quirk;
				snps,quirk-frame-length-adjustment = <0x20>;
				dr_mode = "host";
				maximum-speed = "high-speed";
				snps,usb3_lpm_capable;
				clock-names = "ref";
			};
		};

		wwdt0: watchdog@ecc10000 {
			compatible = "xlnx,versal-wwdt";
			status = "disabled";
			reg = <0 0xecc10000 0 0x10000>;
			timeout-sec = <30>;
		};

		wwdt1: watchdog@ecd10000 {
			compatible = "xlnx,versal-wwdt";
			status = "disabled";
			reg = <0 0xecd10000 0 0x10000>;
			timeout-sec = <30>;
		};

		wwdt2: watchdog@ece10000 {
			compatible = "xlnx,versal-wwdt";
			status = "disabled";
			reg = <0 0xece10000 0 0x10000>;
			timeout-sec = <30>;
		};

		wwdt3: watchdog@ecf10000 {
			compatible = "xlnx,versal-wwdt";
			status = "disabled";
			reg = <0 0xecf10000 0 0x10000>;
			timeout-sec = <30>;
		};

		lpd_wwdt0: watchdog@ea420000 {
			compatible = "xlnx,versal-wwdt";
			status = "disabled";
			reg = <0 0xea420000 0 0x10000>;
			timeout-sec = <30>;
		};

		lpd_wwdt1: watchdog@ea430000 {
			compatible = "xlnx,versal-wwdt";
			status = "disabled";
			reg = <0 0xea430000 0 0x10000>;
			timeout-sec = <30>;
		};
	};
};