// SPDX-License-Identifier: GPL-2.0
/*
 * SoC core Device Tree for the ARM Integrator platforms
 */

/ {
	#address-cells = <1>;
	#size-cells = <1>;

	memory {
		device_type = "memory";
		reg = <0x0 0x0>;
	};

	core-module@10000000 {
		compatible = "arm,core-module-integrator", "syscon", "simple-mfd";
		reg = <0x10000000 0x200>;
		ranges = <0x0 0x10000000 0x200>;
		#address-cells = <1>;
		#size-cells = <1>;

		/* Use core module LED to indicate CPU load */
		led@c,0 {
			compatible = "register-bit-led";
			reg = <0x0c 0x04>;
			offset = <0x0c>;
			mask = <0x01>;
			label = "integrator:core_module";
			linux,default-trigger = "cpu0";
			default-state = "on";
		};
	};

	ebi@12000000 {
		compatible = "arm,external-bus-interface";
		reg = <0x12000000 0x100>;
	};

	timer@13000000 {
		reg = <0x13000000 0x100>;
		interrupt-parent = <&pic>;
		interrupts = <5>;
	};

	timer@13000100 {
		reg = <0x13000100 0x100>;
		interrupt-parent = <&pic>;
		interrupts = <6>;
	};

	timer@13000200 {
		reg = <0x13000200 0x100>;
		interrupt-parent = <&pic>;
		interrupts = <7>;
	};

	pic@14000000 {
		compatible = "arm,versatile-fpga-irq";
		#interrupt-cells = <1>;
		interrupt-controller;
		reg = <0x14000000 0x100>;
		clear-mask = <0xffffffff>;
	};

	flash@24000000 {
		compatible = "arm,versatile-flash", "cfi-flash";
		reg = <0x24000000 0x02000000>;
		bank-width = <4>;
		partitions {
			compatible = "arm,arm-firmware-suite";
		};
	};

	fpga {
		compatible = "simple-bus";
		#address-cells = <1>;
		#size-cells = <1>;
		ranges;
		interrupt-parent = <&pic>;

		/*
		 * These PrimeCells are in the same locations and using the
		 * same interrupts in all Integrators, however the silicon
		 * version deployed is different.
		 */
		rtc@15000000 {
			reg = <0x15000000 0x1000>;
			interrupts = <8>;
		};

		serial@16000000 {
			reg = <0x16000000 0x1000>;
			interrupts = <1>;
		};

		serial@17000000 {
			reg = <0x17000000 0x1000>;
			interrupts = <2>;
		};

		kmi@18000000 {
			reg = <0x18000000 0x1000>;
			interrupts = <3>;
		};

		kmi@19000000 {
			reg = <0x19000000 0x1000>;
			interrupts = <4>;
		};

		syscon@1a000000 {
			/* Debug registers mapped as syscon */
			compatible = "syscon", "simple-mfd";
			reg = <0x1a000000 0x10>;
			ranges = <0x0 0x1a000000 0x10>;
			#address-cells = <1>;
			#size-cells = <1>;

			led@4,0 {
				compatible = "register-bit-led";
				reg = <0x04 0x04>;
				offset = <0x04>;
				mask = <0x01>;
				label = "integrator:green0";
				linux,default-trigger = "heartbeat";
				default-state = "on";
			};
			led@4,1 {
				compatible = "register-bit-led";
				reg = <0x04 0x04>;
				offset = <0x04>;
				mask = <0x02>;
				label = "integrator:yellow";
				default-state = "off";
			};
			led@4,2 {
				compatible = "register-bit-led";
				reg = <0x04 0x04>;
				offset = <0x04>;
				mask = <0x04>;
				label = "integrator:red";
				default-state = "off";
			};
			led@4,3 {
				compatible = "register-bit-led";
				reg = <0x04 0x04>;
				offset = <0x04>;
				mask = <0x08>;
				label = "integrator:green1";
				default-state = "off";
			};
		};
	};
};