// SPDX-License-Identifier: GPL-2.0
/*
 * dts file for Xilinx Versal
 *
 * (C) Copyright 2017-2022 Xilinx, Inc.
 * (C) Copyright 2022-2024 Advanced Micro Devices, Inc. All Rights Reserved.
 *
 * Michal Simek <michal.simek@xilinx.com>
 */

/ {
	compatible = "xlnx,versal";
	#address-cells = <2>;
	#size-cells = <2>;
	model = "Xilinx Versal";

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

	cpus_a72: cpus-a72@0 {
		#address-cells = <1>;
		#size-cells = <0>;

		psv_cortexa72_0: cpu@0 {
			compatible = "arm,cortex-a72", "arm,armv8";
			device_type = "cpu";
			enable-method = "psci";
			operating-points-v2 = <&cpu_opp_table>;
			reg = <0>;
			cpu-idle-states = <&CPU_SLEEP_0>;
			power-domains = <&versal_firmware 0x18110003>;
		};

		psv_cortexa72_1: cpu@1 {
			compatible = "arm,cortex-a72", "arm,armv8";
			device_type = "cpu";
			enable-method = "psci";
			operating-points-v2 = <&cpu_opp_table>;
			reg = <1>;
			cpu-idle-states = <&CPU_SLEEP_0>;
			power-domains = <&versal_firmware 0x18110004>;
		};

		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>;
			};
		};
	};

	cpus_microblaze_0: cpus_microblaze@0 {
		#address-cells = <1>;
		#size-cells = <0>;
		psv_pmc_0: cpu@0 {
			compatible = "pmc-microblaze";
			device_type = "cpu";
			reg = <0x0>;
			operating-points-v2 = <&cpu_opp_table>;
		};
	};

	cpus_microblaze_1: cpus_microblaze@1 {
		#address-cells = <1>;
		#size-cells = <0>;
		psv_psm_0: cpu@0 {
			compatible = "psm-microblaze";
			device_type = "cpu";
			reg = <0x1>;
			operating-points-v2 = <&cpu_opp_table>;
		};

	};

	cpus_r5_0: cpus-r5@0 {
		#address-cells = <1>;
		#size-cells = <0>;
		psv_cortexr5_0: cpu@0 {
			compatible = "arm,cortex-r5";
			device_type = "cpu";
			reg = <0x0>;
			operating-points-v2 = <&cpu_opp_table>;
			power-domains = <&versal_firmware 0x18110005>;
		};
	};

	cpus_r5_1: cpus-r5@1 {
		#address-cells = <1>;
		#size-cells = <0>;
		psv_cortexr5_1: cpu@1 {
			compatible = "arm,cortex-r5";
			device_type = "cpu";
			reg = <0x1>;
			operating-points-v2 = <&cpu_opp_table>;
			power-domains = <&versal_firmware 0x18110006>;
		};
	};

	cpu_opp_table: opp-table-cpu {
		compatible = "operating-points-v2";
		opp-shared;
		opp00 {
			opp-hz = /bits/ 64 <1199999988>;
			opp-microvolt = <1000000>;
			clock-latency-ns = <500000>;
		};
		opp01 {
			opp-hz = /bits/ 64 <599999994>;
			opp-microvolt = <1000000>;
			clock-latency-ns = <500000>;
		};
		opp02 {
			opp-hz = /bits/ 64 <399999996>;
			opp-microvolt = <1000000>;
			clock-latency-ns = <500000>;
		};
		opp03 {
			opp-hz = /bits/ 64 <299999997>;
			opp-microvolt = <1000000>;
			clock-latency-ns = <500000>;
		};
	};

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

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

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

	pmu {
		compatible = "arm,armv8-pmuv3";
		interrupt-parent = <&imux>;
		interrupts = <1 7 0x304>;
	};

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

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

	sensor0: versal-thermal-sensor {
		compatible = "xlnx,versal-thermal";
		#thermal-sensor-cells = <0>;
		io-channels = <&sysmon0>;
		io-channel-names = "sysmon-temp-channel";
	};

	thermal-zones {
		versal_thermal: versal-thermal {
			polling-delay-passive = <250>; /* milliseconds */
			polling-delay = <1000>; /* milliseconds */
			thermal-sensors = <&sensor0>;

			trips {
				temp_alert: temp-alert {
					temperature = <70000>; /* millicelsius */
					hysteresis = <0>; /* millicelsius */
					type = "passive";
				};

				ot_crit: ot-crit {
					temperature = <125000>; /* millicelsius */
					hysteresis = <0>; /* millicelsius */
					type = "critical";
				};
			};

		};
	};

	amba_apu: apu-bus {
		compatible = "simple-bus";
		#address-cells = <2>;
		#size-cells = <2>;
		ranges;
		interrupt-parent = <&gic_a72>;
		bootph-all;

		gic_a72: interrupt-controller@f9000000 {
			compatible = "arm,gic-v3";
			#interrupt-cells = <3>;
			#address-cells = <2>;
			#size-cells = <2>;
			ranges;
			reg = <0 0xf9000000 0 0x80000>, /* GICD */
			      <0 0xf9080000 0 0x80000>; /* GICR */
			interrupt-controller;
			interrupt-parent = <&gic_a72>;
			interrupts = <1 9 4>;
			status = "disabled";

			gic_its: msi-controller@f9020000 {
				compatible = "arm,gic-v3-its";
				status = "disabled";
				msi-controller;
				#msi-cells = <1>;
				reg = <0 0xf9020000 0 0x20000>;
			};
		};
	};

	amba_rpu: rpu-bus {
		compatible = "indirect-bus";
		#address-cells = <0x2>;
		#size-cells = <0x2>;
		ranges;
		interrupt-parent = <&gic_r5>;
		bootph-all;

		gic_r5: interrupt-controller@f9000000 {
			compatible = "arm,pl390";
			#interrupt-cells = <3>;
			interrupt-controller;
			status = "disabled";
			reg = <0x0 0xf9000000 0x0 0x1000 0x0 0xf9001000 0x0 0x1000>;
		};
	};

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

		/* Proxy Interrupt Controller */
		imux: interrupt-multiplex {
			compatible = "interrupt-multiplex";
			#address-cells = <0x0>;
			#interrupt-cells = <3>;
			interrupt-controller;
			interrupt-parent = <&gic_a72>, <&gic_r5>;
			/* mask for address cells, mask for interrupt cells of the children */
			interrupt-map-mask = <0x0 0xffff 0x0>;
			/* 1:1 mapping of all interrupts to gic_a72 and gic_r5 */
			/* child address cells, child interrupt cells, parent, parent interrupt cells */
			interrupt-map = <0x0 0x14 0x0 &gic_a72 0x0 0x14 0x1>,
				<0x0 0x15 0x0 &gic_a72 0x0 0x15 0x1>,
				<0x0 0x6a 0x0 &gic_a72 0x0 0x6a 0x4>,
				<0x0 0x3c 0x0 &gic_a72 0x0 0x3c 0x4>,
				<0x0 0x3d 0x0 &gic_a72 0x0 0x3d 0x4>,
				<0x0 0x3e 0x0 &gic_a72 0x0 0x3e 0x4>,
				<0x0 0x3f 0x0 &gic_a72 0x0 0x3f 0x4>,
				<0x0 0x40 0x0 &gic_a72 0x0 0x40 0x4>,
				<0x0 0x41 0x0 &gic_a72 0x0 0x41 0x4>,
				<0x0 0x42 0x0 &gic_a72 0x0 0x42 0x4>,
				<0x0 0x43 0x0 &gic_a72 0x0 0x43 0x4>,
				<0x0 0x38 0x0 &gic_a72 0x0 0x38 0x4>,
				<0x0 0x3a 0x0 &gic_a72 0x0 0x3a 0x4>,
				<0x0 0xd  0x0 &gic_a72 0x0 0xd 0x4>,
				<0x0 0x7a 0x0 &gic_a72 0x0 0x7a 0x4>,
				<0x0 0xe  0x0 &gic_a72 0x0 0xe 0x4>,
				<0x0 0xf  0x0 &gic_a72 0x0 0xf 0x4>,
				<0x0 0x8e 0x0 &gic_a72 0x0 0x8e 0x4>,
				<0x0 0x8f 0x0 &gic_a72 0x0 0x8f 0x4>,
				<0x0 0x7e 0x0 &gic_a72 0x0 0x7e 0x4>,
				<0x0 0x80 0x0 &gic_a72 0x0 0x80 0x4>,
				<0x0 0x12 0x0 &gic_a72 0x0 0x12 0x4>,
				<0x0 0x13 0x0 &gic_a72 0x0 0x13 0x4>,
				<0x0 0x6b 0x0 &gic_a72 0x0 0x6b 0x4>,
				<0x0 0x7c 0x0 &gic_a72 0x0 0x7c 0x4>,
				<0x0 0x7d 0x0 &gic_a72 0x0 0x7d 0x4>,
				<0x0 0x10 0x0 &gic_a72 0x0 0x10 0x4>,
				<0x0 0x11 0x0 &gic_a72 0x0 0x11 0x4>,
				<0x0 0x16 0x0 &gic_a72 0x0 0x16 0x4>,
				<0x0 0x1a 0x0 &gic_a72 0x0 0x1a 0x4>,
				<0x0 0x4a 0x0 &gic_a72 0x0 0x4a 0x4>,
				<0x0 0x48 0x0 &gic_a72 0x0 0x48 0x4>,
				<0x0 0x1e 0x0 &gic_a72 0x0 0x1e 0x4>,
				<0x0 0x1f 0x0 &gic_a72 0x0 0x1f 0x4>,
				<0x0 0x83 0x0 &gic_a72 0x0 0x83 0x4>,
				<0x0 0x84 0x0 &gic_a72 0x0 0x84 0x4>,
				<0x0 0x14 0x0 &gic_r5 0x0 0x14 0x1>,
				<0x0 0x15 0x0 &gic_r5 0x0 0x15 0x1>,
				<0x0 0x6a 0x0 &gic_r5 0x0 0x6a 0x4>,
				<0x0 0x3c 0x0 &gic_r5 0x0 0x3c 0x4>,
				<0x0 0x3d 0x0 &gic_r5 0x0 0x3d 0x4>,
				<0x0 0x3e 0x0 &gic_r5 0x0 0x3e 0x4>,
				<0x0 0x3f 0x0 &gic_r5 0x0 0x3f 0x4>,
				<0x0 0x40 0x0 &gic_r5 0x0 0x40 0x4>,
				<0x0 0x41 0x0 &gic_r5 0x0 0x41 0x4>,
				<0x0 0x42 0x0 &gic_r5 0x0 0x42 0x4>,
				<0x0 0x43 0x0 &gic_r5 0x0 0x43 0x4>,
				<0x0 0x38 0x0 &gic_r5 0x0 0x38 0x4>,
				<0x0 0x3a 0x0 &gic_r5 0x0 0x3a 0x4>,
				<0x0 0xd  0x0 &gic_r5 0x0 0xd 0x4>,
				<0x0 0x7a 0x0 &gic_r5 0x0 0x7a 0x4>,
				<0x0 0xe  0x0 &gic_r5 0x0 0xe 0x4>,
				<0x0 0xf  0x0 &gic_r5 0x0 0xf 0x4>,
				<0x0 0x8e 0x0 &gic_r5 0x0 0x8e 0x4>,
				<0x0 0x8f 0x0 &gic_r5 0x0 0x8f 0x4>,
				<0x0 0x7e 0x0 &gic_r5 0x0 0x7e 0x4>,
				<0x0 0x80 0x0 &gic_r5 0x0 0x80 0x4>,
				<0x0 0x12 0x0 &gic_r5 0x0 0x12 0x4>,
				<0x0 0x13 0x0 &gic_r5 0x0 0x13 0x4>,
				<0x0 0x6b 0x0 &gic_r5 0x0 0x6b 0x4>,
				<0x0 0x7c 0x0 &gic_r5 0x0 0x7c 0x4>,
				<0x0 0x7d 0x0 &gic_r5 0x0 0x7d 0x4>,
				<0x0 0x10 0x0 &gic_r5 0x0 0x10 0x4>,
				<0x0 0x11 0x0 &gic_r5 0x0 0x11 0x4>,
				<0x0 0x16 0x0 &gic_r5 0x0 0x16 0x4>,
				<0x0 0x1a 0x0 &gic_r5 0x0 0x1a 0x4>,
				<0x0 0x4a 0x0 &gic_r5 0x0 0x4a 0x4>,
				<0x0 0x48 0x0 &gic_r5 0x0 0x48 0x4>,
				<0x0 0x1e 0x0 &gic_r5 0x0 0x1e 0x4>,
				<0x0 0x1f 0x0 &gic_r5 0x0 0x1f 0x4>,
				<0x0 0x83 0x0 &gic_r5 0x0 0x83 0x4>,
				<0x0 0x84 0x0 &gic_r5 0x0 0x84 0x4>;
		};

		can0: can@ff060000 {
			compatible = "xlnx,canfd-2.0";
			status = "disabled";
			reg = <0 0xff060000 0 0x6000>;
			interrupts = <0 20 4>;
			interrupt-parent = <&imux>;
			clock-names = "can_clk", "s_axi_aclk";
			rx-fifo-depth = <0x40>;
			tx-mailbox-count = <0x20>;
		};

		can1: can@ff070000 {
			compatible = "xlnx,canfd-2.0";
			status = "disabled";
			reg = <0 0xff070000 0 0x6000>;
			interrupts = <0 21 4>;
			interrupt-parent = <&imux>;
			clock-names = "can_clk", "s_axi_aclk";
			rx-fifo-depth = <0x40>;
			tx-mailbox-count = <0x20>;
		};

		cci: cci@fd000000 {
			compatible = "arm,cci-500";
			status = "disabled";
			reg = <0 0xfd000000 0 0x10000>;
			ranges = <0 0 0xfd000000 0xa0000>;
			#address-cells = <1>;
			#size-cells = <1>;
			cci_pmu: pmu@10000 {
				compatible = "arm,cci-500-pmu,r0";
				reg = <0x10000 0x90000>;
				interrupt-parent = <&imux>;
				interrupts = <0 106 4>,
				             <0 106 4>,
				             <0 106 4>,
				             <0 106 4>,
				             <0 106 4>,
				             <0 106 4>,
				             <0 106 4>,
				             <0 106 4>;
			};
		};

		lpd_dma_chan0: dma-controller@ffa80000 {
			compatible = "xlnx,zynqmp-dma-1.0";
			status = "disabled";
			reg = <0 0xffa80000 0 0x1000>;
			interrupts = <0 60 4>;
			interrupt-parent = <&imux>;
			clock-names = "clk_main", "clk_apb";
			/* dma-type is needed for csudma */
			xlnx,dma-type = <1>;
			/* iommus = <&smmu 0x210>; */
			#dma-cells = <1>;
			xlnx,bus-width = <64>;
			/* dma-coherent; */
		};

		lpd_dma_chan1: dma-controller@ffa90000 {
			compatible = "xlnx,zynqmp-dma-1.0";
			status = "disabled";
			reg = <0 0xffa90000 0 0x1000>;
			interrupts = <0 61 4>;
			interrupt-parent = <&imux>;
			clock-names = "clk_main", "clk_apb";
			/* dma-type is needed for csudma */
			xlnx,dma-type = <1>;
			/* iommus = <&smmu 0x212>; */
			#dma-cells = <1>;
			xlnx,bus-width = <64>;
			/* dma-coherent; */
		};

		lpd_dma_chan2: dma-controller@ffaa0000 {
			compatible = "xlnx,zynqmp-dma-1.0";
			status = "disabled";
			reg = <0 0xffaa0000 0 0x1000>;
			interrupts = <0 62 4>;
			interrupt-parent = <&imux>;
			clock-names = "clk_main", "clk_apb";
			/* dma-type is needed for csudma */
			xlnx,dma-type = <1>;
			/* iommus = <&smmu 0x214>; */
			#dma-cells = <1>;
			xlnx,bus-width = <64>;
			/* dma-coherent; */
		};


		lpd_dma_chan3: dma-controller@ffab0000 {
			compatible = "xlnx,zynqmp-dma-1.0";
			status = "disabled";
			reg = <0 0xffab0000 0 0x1000>;
			interrupts = <0 63 4>;
			interrupt-parent = <&imux>;
			clock-names = "clk_main", "clk_apb";
			/* dma-type is needed for csudma */
			xlnx,dma-type = <1>;
			/* iommus = <&smmu 0x216>; */
			#dma-cells = <1>;
			xlnx,bus-width = <64>;
			/* dma-coherent; */
		};

		lpd_dma_chan4: dma-controller@ffac0000 {
			compatible = "xlnx,zynqmp-dma-1.0";
			status = "disabled";
			reg = <0 0xffac0000 0 0x1000>;
			interrupts = <0 64 4>;
			interrupt-parent = <&imux>;
			clock-names = "clk_main", "clk_apb";
			/* dma-type is needed for csudma */
			xlnx,dma-type = <1>;
			/* iommus = <&smmu 0x218>; */
			#dma-cells = <1>;
			xlnx,bus-width = <64>;
			/* dma-coherent; */
		};

		lpd_dma_chan5: dma-controller@ffad0000 {
			compatible = "xlnx,zynqmp-dma-1.0";
			status = "disabled";
			reg = <0 0xffad0000 0 0x1000>;
			interrupts = <0 65 4>;
			interrupt-parent = <&imux>;
			clock-names = "clk_main", "clk_apb";
			/* dma-type is needed for csudma */
			xlnx,dma-type = <1>;
			/* iommus = <&smmu 0x21a>; */
			#dma-cells = <1>;
			xlnx,bus-width = <64>;
			/* dma-coherent; */
		};

		lpd_dma_chan6: dma-controller@ffae0000 {
			compatible = "xlnx,zynqmp-dma-1.0";
			status = "disabled";
			reg = <0 0xffae0000 0 0x1000>;
			interrupts = <0 66 4>;
			interrupt-parent = <&imux>;
			clock-names = "clk_main", "clk_apb";
			/* dma-type is needed for csudma */
			xlnx,dma-type = <1>;
			/* iommus = <&smmu 0x21c>; */
			#dma-cells = <1>;
			xlnx,bus-width = <64>;
			/* dma-coherent; */
		};

		lpd_dma_chan7: dma-controller@ffaf0000 {
			compatible = "xlnx,zynqmp-dma-1.0";
			status = "disabled";
			reg = <0 0xffaf0000 0 0x1000>;
			interrupts = <0 67 4>;
			interrupt-parent = <&imux>;
			clock-names = "clk_main", "clk_apb";
			/* dma-type is needed for csudma */
			xlnx,dma-type = <1>;
			/* iommus = <&smmu 0x21e>; */
			#dma-cells = <1>;
			xlnx,bus-width = <64>;
			/* dma-coherent; */
		};

		gem0: ethernet@ff0c0000 {
			compatible = "xlnx,versal-gem", "cdns,gem";
			status = "disabled";
			reg = <0 0xff0c0000 0 0x1000>;
			interrupts = <0 56 4>, <0 56 4>;
			interrupt-parent = <&imux>;
			clock-names = "pclk", "hclk", "tx_clk", "rx_clk", "tsu_clk";
			/* iommus = <&smmu 0x234>; */
			/* dma-coherent; */
			#address-cells = <1>;
			#size-cells = <0>;
		};

		gem1: ethernet@ff0d0000 {
			compatible = "xlnx,versal-gem", "cdns,gem";
			status = "disabled";
			reg = <0 0xff0d0000 0 0x1000>;
			interrupts = <0 58 4>, <0 58 4>;
			interrupt-parent = <&imux>;
			clock-names = "pclk", "hclk", "tx_clk", "rx_clk", "tsu_clk";
			/* iommus = <&smmu 0x235>; */
			/* dma-coherent; */
			#address-cells = <1>;
			#size-cells = <0>;
		};


		gpio0: gpio@ff0b0000 {
			compatible = "xlnx,versal-gpio-1.0";
			status = "disabled";
			reg = <0 0xff0b0000 0 0x1000>;
			interrupts = <0 13 4>;
			interrupt-parent = <&imux>;
			#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 122 4>;
			interrupt-parent = <&imux>;
			#gpio-cells = <2>;
			gpio-controller;
			#interrupt-cells = <2>;
			interrupt-controller;
		};

		i2c0: i2c@ff020000 {
			compatible = "cdns,i2c-r1p14";
			status = "disabled";
			reg = <0 0xff020000 0 0x1000>;
			interrupts = <0 14 4>;
			interrupt-parent = <&imux>;
			clock-frequency = <100000>;
			#address-cells = <1>;
			#size-cells = <0>;
		};

		i2c1: i2c@ff030000 {
			compatible = "cdns,i2c-r1p14";
			status = "disabled";
			reg = <0 0xff030000 0 0x1000>;
			interrupts = <0 15 4>;
			interrupt-parent = <&imux>;
			clock-frequency = <100000>;
			#address-cells = <1>;
			#size-cells = <0>;
		};

		i2c2: i2c@f1000000 {
			compatible = "cdns,i2c-r1p14";
			status = "disabled";
			reg = <0 0xf1000000 0 0x1000>;
			interrupts = <0 123 4>;
			interrupt-parent = <&imux>;
			clock-frequency = <100000>;
			#address-cells = <1>;
			#size-cells = <0>;
		};

		mc0: memory-controller@f6150000	{
			compatible = "xlnx,versal-ddrmc";
			status = "disabled";
			reg = <0x0 0xf6150000 0x0 0x2000>, <0x0 0xf6070000 0x0 0x20000>;
			reg-names = "base", "noc";
			interrupts = <0 147 4>;
			interrupt-parent = <&imux>;
		};

		mc1: memory-controller@f62c0000 {
			compatible = "xlnx,versal-ddrmc";
			status = "disabled";
			reg = <0x0 0xf62c0000 0x0 0x2000>, <0x0 0xf6210000 0x0 0x20000>;
			reg-names = "base", "noc";
			interrupts = <0 147 4>;
			interrupt-parent = <&imux>;
		};

		mc2: memory-controller@f6430000 {
			compatible = "xlnx,versal-ddrmc";
			status = "disabled";
			reg = <0x0 0xf6430000 0x0 0x2000>, <0x0 0xf6380000 0x0 0x20000>;
			reg-names = "base", "noc";
			interrupts = <0 147 4>;
			interrupt-parent = <&imux>;
		};

		mc3: memory-controller@f65a0000 {
			compatible = "xlnx,versal-ddrmc";
			status = "disabled";
			reg = <0x0 0xf65a0000 0x0 0x2000>, <0x0 0xf64f0000 0x0 0x20000>;
			reg-names = "base", "noc";
			interrupts = <0 147 4>;
			interrupt-parent = <&imux>;
		};

		ocm: memory-controller@ff960000 {
			compatible = "xlnx,zynqmp-ocmc-1.0";
			reg = <0x0 0xff960000 0x0 0x1000>;
			interrupts = <0 10 4>;
			interrupt-parent = <&imux>;
		};

		rtc: rtc@f12a0000 {
			compatible = "xlnx,zynqmp-rtc";
			status = "disabled";
			reg = <0 0xf12a0000 0 0x100>;
			interrupt-names = "alarm", "sec";
			interrupts = <0 142 4>, <0 143 4>;
			interrupt-parent = <&imux>;
			calibration = <0x7FFF>;
		};

		sdhci0: mmc@f1040000 {
			compatible = "xlnx,versal-8.9a", "arasan,sdhci-8.9a";
			status = "disabled";
			reg = <0 0xf1040000 0 0x10000>;
			interrupts = <0 126 4>;
			interrupt-parent = <&imux>;
			clock-names = "clk_xin", "clk_ahb", "gate";
			#clock-cells = <1>;
			clock-output-names = "clk_out_sd0", "clk_in_sd0";
			/* iommus = <&smmu 0x242>; */
			/* dma-coherent; */
		};

		sdhci1: mmc@f1050000 {
			compatible = "xlnx,versal-8.9a", "arasan,sdhci-8.9a";
			status = "disabled";
			reg = <0 0xf1050000 0 0x10000>;
			interrupts = <0 128 4>;
			interrupt-parent = <&imux>;
			clock-names = "clk_xin", "clk_ahb", "gate";
			#clock-cells = <1>;
			clock-output-names = "clk_out_sd1", "clk_in_sd1";
			/* iommus = <&smmu 0x243>; */
			/* dma-coherent; */
		};

		serial0: serial@ff000000 {
			compatible = "arm,pl011", "arm,primecell";
			status = "disabled";
			reg = <0 0xff000000 0 0x1000>;
			interrupts = <0 18 4>;
			interrupt-parent = <&imux>;
			reg-io-width = <4>;
			clock-names = "uartclk", "apb_pclk";
			bootph-all;
		};

		serial1: serial@ff010000 {
			compatible = "arm,pl011", "arm,primecell";
			status = "disabled";
			reg = <0 0xff010000 0 0x1000>;
			interrupts = <0 19 4>;
			interrupt-parent = <&imux>;
			reg-io-width = <4>;
			clock-names = "uartclk", "apb_pclk";
			bootph-all;
		};

		smmu: iommu@fd800000 {
			compatible = "arm,mmu-500";
			status = "disabled";
			reg = <0 0xfd800000 0 0x40000>;
			stream-match-mask = <0x7c00>;
			#iommu-cells = <1>;
			#global-interrupts = <1>;
			interrupts = <0 107 4>,
				<0 107 4>, <0 107 4>, <0 107 4>, <0 107 4>,
				<0 107 4>, <0 107 4>, <0 107 4>, <0 107 4>,
				<0 107 4>, <0 107 4>, <0 107 4>, <0 107 4>,
				<0 107 4>, <0 107 4>, <0 107 4>, <0 107 4>,
				<0 107 4>, <0 107 4>, <0 107 4>, <0 107 4>,
				<0 107 4>, <0 107 4>, <0 107 4>, <0 107 4>,
				<0 107 4>, <0 107 4>, <0 107 4>, <0 107 4>,
				<0 107 4>, <0 107 4>, <0 107 4>, <0 107 4>;
			interrupt-parent = <&imux>;
		};

		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 124 4>;
			interrupt-parent = <&imux>;
			cdns,fifo-depth = <256>;
			cdns,fifo-width = <4>;
			cdns,is-dma = <1>;
			cdns,trigger-address = <0xC0000000>;
			#address-cells = <1>;
			#size-cells = <0>;
		};

		qspi: spi@f1030000 {
			compatible = "xlnx,versal-qspi-1.0";
			status = "disabled";
			reg = <0 0xf1030000 0 0x1000>;
			interrupts = <0 125 4>;
			interrupt-parent = <&imux>;
			clock-names = "ref_clk", "pclk";
			/* iommus = <&smmu 0x244>; */
			/* dma-coherent; */
			#address-cells = <1>;
			#size-cells = <0>;
		};


		spi0: spi@ff040000 {
			compatible = "cdns,spi-r1p6";
			status = "disabled";
			reg = <0 0xff040000 0 0x1000>;
			interrupts = <0 16 4>;
			interrupt-parent = <&imux>;
			clock-names = "ref_clk", "pclk";
			#address-cells = <1>;
			#size-cells = <0>;
		};

		spi1: spi@ff050000 {
			compatible = "cdns,spi-r1p6";
			status = "disabled";
			reg = <0 0xff050000 0 0x1000>;
			interrupts = <0 17 4>;
			interrupt-parent = <&imux>;
			clock-names = "ref_clk", "pclk";
			#address-cells = <1>;
			#size-cells = <0>;
		};

		sysmon0: sysmon@f1270000 {
			compatible = "xlnx,versal-sysmon";
			#io-channel-cells = <0>;
			reg = <0x0 0xf1270000 0x0 0x4000>;
			interrupts = <0 144 4>;
			xlnx,numchannels = /bits/8 <0>;
			#address-cells = <1>;
			#size-cells = <0>;
		};

		sysmon1: sysmon@109270000 {
			compatible = "xlnx,versal-sysmon";
			status = "disabled";
			reg = <0x1 0x09270000 0x0 0x4000>;
			xlnx,numchannels = /bits/8 <0>;
			#address-cells = <1>;
			#size-cells = <0>;
		};

		sysmon2: sysmon@111270000 {
			compatible = "xlnx,versal-sysmon";
			status = "disabled";
			reg = <0x1 0x11270000 0x0 0x4000>;
			xlnx,numchannels = /bits/8 <0>;
			#address-cells = <1>;
			#size-cells = <0>;
		};

		sysmon3: sysmon@119270000 {
			compatible = "xlnx,versal-sysmon";
			status = "disabled";
			reg = <0x1 0x19270000 0x0 0x4000>;
			xlnx,numchannels = /bits/8 <0>;
			#address-cells = <1>;
			#size-cells = <0>;
		};

		ttc0: timer@ff0e0000 {
			compatible = "cdns,ttc";
			status = "disabled";
			interrupts = <0 37 4>, <0 38 4>, <0 39 4>;
			interrupt-parent = <&imux>;
			reg = <0x0 0xff0e0000 0x0 0x1000>;
			timer-width = <32>;
		};

		ttc1: timer@ff0f0000 {
			compatible = "cdns,ttc";
			status = "disabled";
			interrupts = <0 40 4>, <0 41 4>, <0 42 4>;
			interrupt-parent = <&imux>;
			reg = <0x0 0xff0f0000 0x0 0x1000>;
			timer-width = <32>;
		};

		ttc2: timer@ff100000 {
			compatible = "cdns,ttc";
			status = "disabled";
			interrupts = <0 43 4>, <0 44 4>, <0 45 4>;
			interrupt-parent = <&imux>;
			reg = <0x0 0xff100000 0x0 0x1000>;
			timer-width = <32>;
		};

		ttc3: timer@ff110000 {
			compatible = "cdns,ttc";
			status = "disabled";
			interrupts = <0 46 4>, <0 47 4>, <0 48 4>;
			interrupt-parent = <&imux>;
			reg = <0x0 0xff110000 0x0 0x1000>;
			timer-width = <32>;
		};

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

			dwc3_0: usb@fe200000 {
				compatible = "snps,dwc3";
				status = "disabled";
				reg = <0 0xfe200000 0 0x10000>;
				interrupt-names = "host", "peripheral", "otg", "wakeup";
				interrupts = <0 0x16 4>, <0 0x16 4>, <0 0x1a 4>, <0x0 0x4a 0x4>;
				/* iommus = <&smmu 0x230>; */
				snps,dis_u2_susphy_quirk;
				snps,dis_u3_susphy_quirk;
				snps,quirk-frame-length-adjustment = <0x20>;
				clock-names = "ref";
				/* dma-coherent; */
			};
		};

		cpm_pciea: pci@fca10000 {
			device_type = "pci";
			#address-cells = <3>;
			#interrupt-cells = <1>;
			#size-cells = <2>;
			compatible = "xlnx,versal-cpm-host-1.00";
			status = "disabled";
			interrupt-map = <0 0 0 1 &pcie_intc_0 0>,
					<0 0 0 2 &pcie_intc_0 1>,
					<0 0 0 3 &pcie_intc_0 2>,
					<0 0 0 4 &pcie_intc_0 3>;
			interrupt-map-mask = <0 0 0 7>;
			interrupt-names = "misc";
			interrupts = <0 72 4>;
			xlnx,csr-slcr = <0x6 00000000>;
			xlnx,num-of-bars = <0x2>;
			xlnx,port-type = <0x1>;
			interrupt-parent = <&imux>;
			bus-range = <0x00 0xff>;
			ranges = <0x02000000 0x00000000 0xe0010000 0x0 0xe0010000 0x00000000 0x10000000>,
				 <0x43000000 0x00000080 0x00000000 0x00000080 0x00000000 0x00000000 0x80000000>;
			msi-map = <0x0 &gic_its 0x0 0x10000>;
			reg = <0x6 0x00000000 0x0 0x1000000>,
			      <0x0 0xfca10000 0x0 0x1000>;
			reg-names = "cfg", "cpm_slcr";
			pcie_intc_0: interrupt-controller {
				#address-cells = <0>;
				#interrupt-cells = <1>;
				interrupt-controller ;
			};
		};

		cpm5_pcie: pcie@fcdd0000 {
			device_type = "pci";
			#address-cells = <3>;
			#interrupt-cells = <1>;
			#size-cells = <2>;
			compatible = "xlnx,versal-cpm5-host";
			status = "disabled";
			interrupt-map = <0 0 0 1 &pcie_intc_2 0>,
					<0 0 0 2 &pcie_intc_2 1>,
					<0 0 0 3 &pcie_intc_2 2>,
					<0 0 0 4 &pcie_intc_2 3>;
			interrupt-map-mask = <0 0 0 7>;
			interrupt-names = "misc";
			interrupts = <0 72 4>;
			xlnx,csr-slcr = <0xfce20000>;
			xlnx,num-of-bars = <0x2>;
			xlnx,port-type = <0x1>;
			interrupt-parent = <&imux>;
			bus-range = <0x00 0xff>;
			ranges = <0x02000000 0x0 0xe0000000 0x0 0xe0000000 0x0 0x10000000>,
				 <0x43000000 0x80 0x00000000 0x80 0x00000000 0x0 0x80000000>;
			msi-map = <0x0 &gic_its 0x0 0x10000>;
			reg = <0x06 0x00000000 0x00 0x1000000>,
			      <0x00 0xfcdd0000 0x00 0x1000>,
			      <0x00 0xfce20000 0x00 0x1000000>;
			reg-names = "cfg", "cpm_slcr", "cpm_csr";
			pcie_intc_2: interrupt-controller {
				#address-cells = <0>;
				#interrupt-cells = <1>;
				interrupt-controller;
			};
		};

		watchdog: watchdog@fd4d0000 {
			compatible = "xlnx,versal-wwdt";
			status = "disabled";
			reg = <0 0xfd4d0000 0 0x10000>;
			interrupt-names = "wdt", "wwdt_reset_pending", "gwdt", "gwdt_reset_pending";
			interrupts = <0 0x64 1>, <0 0x6D 1>, <0 0x6C 1>, <0 0x6E 1>;
			interrupt-parent = <&imux>;
			timeout-sec = <30>;
		};

		watchdog1: watchdog@ff120000 {
			compatible = "xlnx,versal-wwdt";
			status = "disabled";
			reg = <0x0 0xff120000 0x0 0x10000>;
			interrupt-parent = <&imux>;
			interrupt-names = "wdt", "wwdt_reset_pending", "gwdt", "gwdt_reset_pending";
			interrupts = <0 49 1>, <0 69 1>, <0 70 4>, <0 71 4>;
			timeout-sec = <30>;
		};
		xilsem_edac: edac@f2014050 {
			compatible = "xlnx,versal-xilsem-edac";
			status = "disabled";
			reg = <0x0 0xf2014050 0x0 0xc4>;
		};

		dma0: pmcdma@f11c0000 {
			status = "disabled";
			compatible = "xlnx,zynqmp-csudma-1.0";
			interrupt-parent = <&imux>;
			interrupts = <0 0x83 4>;
			reg = <0x0 0xf11c0000 0x0 0x10000>;
			xlnx,dma-type = <1>;
		};

		dma1: pmcdma@f11d0000 {
			status = "disabled";
			compatible = "xlnx,zynqmp-csudma-1.0";
			interrupt-parent = <&imux>;
			interrupts = <0 0x84 4>;
			reg = <0x0 0xf11d0000 0x0 0x10000>;
			xlnx,dma-type = <2>;
		};

		iomodule0: iomodule@f0280000 {
			status = "disabled";
			compatible = "xlnx,iomodule-3.1";
			reg = <0x0 0xF0280000 0x0 0x1000>, <0xFFFFFFFF 0xFFFFFFFF 0x0 0xE0000>;
			xlnx,intc-has-fast = <0x0>;
			xlnx,intc-base-vectors = <0xF0240000U>;
			xlnx,intc-addr-width = <0x20>;
			xlnx,intc-level-edge = <0x7FFU>;
			xlnx,clock-freq = <100000000U>;
			xlnx,uart-baudrate = <115200U>;
			xlnx,pit-used = <01 01 01 01>;
			xlnx,pit-size = <0x20 0x20 0x20 0x20>;
			xlnx,pit-mask = <0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF>;
			xlnx,pit-prescaler = <0x9 0x0 0x9 0x0>;
			xlnx,pit-readable = <01 01 01 01>;
			xlnx,gpo-init = <00 00 00 00>;
			xlnx,options = <0x1>;
			xlnx,max-intr-size = <32>;
		};

		ipi_pmc: mailbox@ff320000 {
			status = "disabled";
			compatible = "xlnx,zynqmp-ipi-mailbox";
			interrupt-parent = <&imux>;
			interrupts = <0 27 4>;
			reg = <0x0 0xFF320000U 0x0 0x20>;
			xlnx,ipi-bitmask = <0x2>;
			xlnx,ipi-id = <1>;
			xlnx,ipi-buf-index = <1>;
			#address-cells = <2>;
			#size-cells = <2>;
			ranges;

		};

		ipi_pmc_nobuf: mailbox@ff390000 {
			status = "disabled";
			compatible = "xlnx,zynqmp-ipi-mailbox";
			interrupt-parent = <&imux>;
			interrupts = <0 28 4>;
			reg = <0x0 0xFF390000U 0x0 0x20>;
			xlnx,ipi-bitmask = <0x100>;
			xlnx,ipi-id = <8>;
			xlnx,ipi-buf-index = <0xFFFF>;
			#address-cells = <2>;
			#size-cells = <2>;
			ranges;

		};

		ipi_psm: mailbox@ff310000 {
			status = "disabled";
			compatible = "xlnx,zynqmp-ipi-mailbox";
			interrupt-parent = <&imux>;
			interrupts = <0 29 4>;
			reg = <0x0 0xFF310000U 0x0 0x20>;
			xlnx,ipi-bitmask = <0x1>;
			xlnx,ipi-id = <0>;
			xlnx,ipi-buf-index = <0>;
			#address-cells = <2>;
			#size-cells = <2>;
			ranges;

		};

		ipi0: mailbox@ff330000 {
			status = "disabled";
			compatible = "xlnx,zynqmp-ipi-mailbox";
			interrupt-parent = <&imux>;
			interrupts = <0 30 4>;
			reg = <0x0 0xFF330000U 0x0 0x20>;
			xlnx,ipi-bitmask = <0x4>;
			xlnx,ipi-id = <2>;
			xlnx,ipi-buf-index = <2>;
			#address-cells = <2>;
			#size-cells = <2>;
			ranges;

		};

		ipi1: mailbox@ff340000 {
			status = "disabled";
			compatible = "xlnx,zynqmp-ipi-mailbox";
			interrupt-parent = <&imux>;
			interrupts = <0 31 4>;
			reg = <0x0 0xFF340000U 0x0 0x20>;
			xlnx,ipi-bitmask = <0x8>;
			xlnx,ipi-id = <3>;
			xlnx,ipi-buf-index = <3>;
			#address-cells = <2>;
			#size-cells = <2>;
			ranges;

		};

		ipi2: mailbox@ff350000 {
			status = "disabled";
			compatible = "xlnx,zynqmp-ipi-mailbox";
			interrupt-parent = <&imux>;
			interrupts = <0 32 4>;
			reg = <0x0 0xFF350000U 0x0 0x20>;
			xlnx,ipi-bitmask = <0x10>;
			xlnx,ipi-id = <4>;
			xlnx,ipi-buf-index = <4>;
			#address-cells = <2>;
			#size-cells = <2>;
			ranges;

		};

		ipi3: mailbox@ff360000 {
			status = "disabled";
			compatible = "xlnx,zynqmp-ipi-mailbox";
			interrupt-parent = <&imux>;
			interrupts = <0 33 4>;
			reg = <0x0 0xFF360000U 0x0 0x20>;
			xlnx,ipi-bitmask = <0x20>;
			xlnx,ipi-id = <5>;
			xlnx,ipi-buf-index = <5>;
			#address-cells = <2>;
			#size-cells = <2>;
			ranges;

		};

		ipi4: mailbox@ff370000 {
			status = "disabled";
			compatible = "xlnx,zynqmp-ipi-mailbox";
			interrupt-parent = <&imux>;
			interrupts = <0 34 4>;
			reg = <0x0 0xFF370000U 0x0 0x20>;
			xlnx,ipi-bitmask = <0x40>;
			xlnx,ipi-id = <6>;
			xlnx,ipi-buf-index = <6>;
			#address-cells = <2>;
			#size-cells = <2>;
			ranges;

		};

		ipi5: mailbox@ff380000 {
			status = "disabled";
			compatible = "xlnx,zynqmp-ipi-mailbox";
			interrupt-parent = <&imux>;
			interrupts = <0 35 4>;
			reg = <0x0 0xFF380000U 0x0 0x20>;
			xlnx,ipi-bitmask = <0x80>;
			xlnx,ipi-id = <7>;
			xlnx,ipi-buf-index = <7>;
			#address-cells = <2>;
			#size-cells = <2>;
			ranges;

		};

		ipi6: mailbox@ff3a0000 {
			status = "disabled";
			compatible = "xlnx,zynqmp-ipi-mailbox";
			interrupt-parent = <&imux>;
			interrupts = <0 36 4>;
			reg = <0x0 0xFF3A0000U 0x0 0x20>;
			xlnx,ipi-bitmask = <0x200>;
			xlnx,ipi-id = <9>;
			xlnx,ipi-buf-index = <0xFFFF>;
			#address-cells = <2>;
			#size-cells = <2>;
			ranges;
		};

		coresight: coresight@f0800000 {
			compatible = "xlnx,coresight-1.0";
			status = "disabled";
			reg = <0x0 0xf0800000 0x0 0x10000>;
		};
	};

	psv_r5_0_atcm_global: psv_r5_0_atcm_global@ffe00000 {
		compatible = "xlnx,psv-tcm-global-1.0" , "mmio-sram";
		power-domains = <&versal_firmware 0x1831800b>;
		reg = <0x0 0xffe00000 0x0 0x10000>;
	};

	psv_r5_0_btcm_global: psv_r5_0_btcm_global@ffe20000 {
		compatible = "xlnx,psv-tcm-global-1.0" , "mmio-sram";
		power-domains = <&versal_firmware 0x1831800c>;
		reg = <0x0 0xffe20000 0x0 0x10000>;
	};

	psv_r5_1_atcm_global: psv_r5_1_atcm_global@ffe90000 {
		compatible = "xlnx,psv-tcm-global-1.0" , "mmio-sram";
		power-domains = <&versal_firmware 0x1831800d>;
		reg = <0x0 0xffe90000 0x0 0x10000>;
	};

	psv_r5_1_btcm_global: psv_r5_1_btcm_global@ffeb0000 {
		compatible = "xlnx,psv-tcm-global-1.0" , "mmio-sram";
		power-domains = <&versal_firmware 0x1831800e>;
		reg = <0x0 0xffeb0000 0x0 0x10000>;
	};

	amba_xppu: indirect-bus@1 {
		compatible = "indirect-bus";
		#address-cells = <0x2>;
		#size-cells = <0x2>;

		lpd_xppu: xppu@ff990000 {
			compatible = "xlnx,xppu";
			#firewall-cells = <0x0>;
			reg = <0x0 0xff990000 0x0 0x2000>;
			status = "disabled";
		};

		pmc_xppu: xppu@f1310000 {
			compatible = "xlnx,xppu";
			#firewall-cells = <0x0>;
			reg = <0x0 0xf1310000 0x0 0x2000>;
			status = "disabled";
		};

		pmc_xppu_npi: xppu@f1300000 {
			compatible = "xlnx,xppu";
			#firewall-cells = <0x0>;
			reg = <0x0 0xf1300000 0x0 0x2000>;
			status = "disabled";
		};
	};

	amba_xmpu: indirect-bus@2 {
		compatible = "indirect-bus";
		#address-cells = <0x2>;
		#size-cells = <0x2>;

		fpd_xmpu: xmpu@fd390000 {
			compatible = "xlnx,xmpu";
			#firewall-cells = <0x0>;
			reg = <0x0 0xfd390000 0x0 0x1000>;
			status = "disabled";
		};

		pmc_xmpu: xmpu@f12f0000 {
			compatible = "xlnx,xmpu";
			#firewall-cells = <0x0>;
			reg = <0x0 0xf12f0000 0x0 0x1000>;
			status = "disabled";
		};

		ocm_xmpu: xmpu@ff980000 {
			compatible = "xlnx,xmpu";
			#firewall-cells = <0x0>;
			reg = <0x0 0xff980000 0x0 0x1000>;
			status = "disabled";
		};

		ddrmc_xmpu_0: xmpu@f6080000 {
			compatible = "xlnx,xmpu";
			#firewall-cells = <0x0>;
			reg = <0x0 0xf6080000 0x0 0x1000>;
			status = "disabled";
		};

		ddrmc_xmpu_1: xmpu@f6220000 {
			compatible = "xlnx,xmpu";
			#firewall-cells = <0x0>;
			reg = <0x0 0xf6220000 0x0 0x1000>;
			status = "disabled";
		};

		ddrmc_xmpu_2: xmpu@f6390000 {
			compatible = "xlnx,xmpu";
			#firewall-cells = <0x0>;
			reg = <0x0 0xf6390000 0x0 0x1000>;
			status = "disabled";
		};

		ddrmc_xmpu_3: xmpu@f6500000 {
			compatible = "xlnx,xmpu";
			#firewall-cells = <0x0>;
			reg = <0x0 0xf6500000 0x0 0x1000>;
			status = "disabled";
		};
	};
};
