18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Copyright (C) 2014, 2015 Synopsys, Inc. (www.synopsys.com)
48c2ecf20Sopenharmony_ci */
58c2ecf20Sopenharmony_ci
68c2ecf20Sopenharmony_ci/*
78c2ecf20Sopenharmony_ci * Device tree for AXC003 CPU card: HS38x2 (Dual Core) with IDU intc
88c2ecf20Sopenharmony_ci */
98c2ecf20Sopenharmony_ci
108c2ecf20Sopenharmony_ci/include/ "skeleton_hs_idu.dtsi"
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_ci/ {
138c2ecf20Sopenharmony_ci	compatible = "snps,arc";
148c2ecf20Sopenharmony_ci	#address-cells = <2>;
158c2ecf20Sopenharmony_ci	#size-cells = <2>;
168c2ecf20Sopenharmony_ci
178c2ecf20Sopenharmony_ci	cpu_card {
188c2ecf20Sopenharmony_ci		compatible = "simple-bus";
198c2ecf20Sopenharmony_ci		#address-cells = <1>;
208c2ecf20Sopenharmony_ci		#size-cells = <1>;
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_ci		ranges = <0x00000000 0x0 0xf0000000 0x10000000>;
238c2ecf20Sopenharmony_ci
248c2ecf20Sopenharmony_ci		input_clk: input-clk {
258c2ecf20Sopenharmony_ci			#clock-cells = <0>;
268c2ecf20Sopenharmony_ci			compatible = "fixed-clock";
278c2ecf20Sopenharmony_ci			clock-frequency = <33333333>;
288c2ecf20Sopenharmony_ci		};
298c2ecf20Sopenharmony_ci
308c2ecf20Sopenharmony_ci		core_clk: core-clk@80 {
318c2ecf20Sopenharmony_ci			compatible = "snps,axs10x-arc-pll-clock";
328c2ecf20Sopenharmony_ci			reg = <0x80 0x10>, <0x100 0x10>;
338c2ecf20Sopenharmony_ci			#clock-cells = <0>;
348c2ecf20Sopenharmony_ci			clocks = <&input_clk>;
358c2ecf20Sopenharmony_ci
368c2ecf20Sopenharmony_ci			/*
378c2ecf20Sopenharmony_ci			 * Set initial core pll output frequency to 100MHz.
388c2ecf20Sopenharmony_ci			 * It will be applied at the core pll driver probing
398c2ecf20Sopenharmony_ci			 * on early boot.
408c2ecf20Sopenharmony_ci			 */
418c2ecf20Sopenharmony_ci			assigned-clocks = <&core_clk>;
428c2ecf20Sopenharmony_ci			assigned-clock-rates = <100000000>;
438c2ecf20Sopenharmony_ci		};
448c2ecf20Sopenharmony_ci
458c2ecf20Sopenharmony_ci		core_intc: archs-intc@cpu {
468c2ecf20Sopenharmony_ci			compatible = "snps,archs-intc";
478c2ecf20Sopenharmony_ci			interrupt-controller;
488c2ecf20Sopenharmony_ci			#interrupt-cells = <1>;
498c2ecf20Sopenharmony_ci		};
508c2ecf20Sopenharmony_ci
518c2ecf20Sopenharmony_ci		idu_intc: idu-interrupt-controller {
528c2ecf20Sopenharmony_ci			compatible = "snps,archs-idu-intc";
538c2ecf20Sopenharmony_ci			interrupt-controller;
548c2ecf20Sopenharmony_ci			interrupt-parent = <&core_intc>;
558c2ecf20Sopenharmony_ci			#interrupt-cells = <1>;
568c2ecf20Sopenharmony_ci		};
578c2ecf20Sopenharmony_ci
588c2ecf20Sopenharmony_ci		/*
598c2ecf20Sopenharmony_ci		 * this GPIO block ORs all interrupts on CPU card (creg,..)
608c2ecf20Sopenharmony_ci		 * to uplink only 1 IRQ to ARC core intc
618c2ecf20Sopenharmony_ci		 */
628c2ecf20Sopenharmony_ci		dw-apb-gpio@2000 {
638c2ecf20Sopenharmony_ci			compatible = "snps,dw-apb-gpio";
648c2ecf20Sopenharmony_ci			reg = < 0x2000 0x80 >;
658c2ecf20Sopenharmony_ci			#address-cells = <1>;
668c2ecf20Sopenharmony_ci			#size-cells = <0>;
678c2ecf20Sopenharmony_ci
688c2ecf20Sopenharmony_ci			ictl_intc: gpio-controller@0 {
698c2ecf20Sopenharmony_ci				compatible = "snps,dw-apb-gpio-port";
708c2ecf20Sopenharmony_ci				gpio-controller;
718c2ecf20Sopenharmony_ci				#gpio-cells = <2>;
728c2ecf20Sopenharmony_ci				snps,nr-gpios = <30>;
738c2ecf20Sopenharmony_ci				reg = <0>;
748c2ecf20Sopenharmony_ci				interrupt-controller;
758c2ecf20Sopenharmony_ci				#interrupt-cells = <2>;
768c2ecf20Sopenharmony_ci				interrupt-parent = <&idu_intc>;
778c2ecf20Sopenharmony_ci				interrupts = <1>;
788c2ecf20Sopenharmony_ci			};
798c2ecf20Sopenharmony_ci		};
808c2ecf20Sopenharmony_ci
818c2ecf20Sopenharmony_ci		debug_uart: dw-apb-uart@5000 {
828c2ecf20Sopenharmony_ci			compatible = "snps,dw-apb-uart";
838c2ecf20Sopenharmony_ci			reg = <0x5000 0x100>;
848c2ecf20Sopenharmony_ci			clock-frequency = <33333000>;
858c2ecf20Sopenharmony_ci			interrupt-parent = <&ictl_intc>;
868c2ecf20Sopenharmony_ci			interrupts = <2 4>;
878c2ecf20Sopenharmony_ci			baud = <115200>;
888c2ecf20Sopenharmony_ci			reg-shift = <2>;
898c2ecf20Sopenharmony_ci			reg-io-width = <4>;
908c2ecf20Sopenharmony_ci		};
918c2ecf20Sopenharmony_ci
928c2ecf20Sopenharmony_ci		arcpct0: pct {
938c2ecf20Sopenharmony_ci			compatible = "snps,archs-pct";
948c2ecf20Sopenharmony_ci			#interrupt-cells = <1>;
958c2ecf20Sopenharmony_ci			interrupt-parent = <&core_intc>;
968c2ecf20Sopenharmony_ci			interrupts = <20>;
978c2ecf20Sopenharmony_ci		};
988c2ecf20Sopenharmony_ci	};
998c2ecf20Sopenharmony_ci
1008c2ecf20Sopenharmony_ci	/*
1018c2ecf20Sopenharmony_ci	 * Mark DMA peripherals connected via IOC port as dma-coherent. We do
1028c2ecf20Sopenharmony_ci	 * it via overlay because peripherals defined in axs10x_mb.dtsi are
1038c2ecf20Sopenharmony_ci	 * used for both AXS101 and AXS103 boards and only AXS103 has IOC (so
1048c2ecf20Sopenharmony_ci	 * only AXS103 board has HW-coherent DMA peripherals)
1058c2ecf20Sopenharmony_ci	 * We don't need to mark pgu@17000 as dma-coherent because it uses
1068c2ecf20Sopenharmony_ci	 * external DMA buffer located outside of IOC aperture.
1078c2ecf20Sopenharmony_ci	 */
1088c2ecf20Sopenharmony_ci	axs10x_mb {
1098c2ecf20Sopenharmony_ci		ethernet@18000 {
1108c2ecf20Sopenharmony_ci			dma-coherent;
1118c2ecf20Sopenharmony_ci		};
1128c2ecf20Sopenharmony_ci
1138c2ecf20Sopenharmony_ci		ehci@40000 {
1148c2ecf20Sopenharmony_ci			dma-coherent;
1158c2ecf20Sopenharmony_ci		};
1168c2ecf20Sopenharmony_ci
1178c2ecf20Sopenharmony_ci		ohci@60000 {
1188c2ecf20Sopenharmony_ci			dma-coherent;
1198c2ecf20Sopenharmony_ci		};
1208c2ecf20Sopenharmony_ci
1218c2ecf20Sopenharmony_ci		mmc@15000 {
1228c2ecf20Sopenharmony_ci			dma-coherent;
1238c2ecf20Sopenharmony_ci		};
1248c2ecf20Sopenharmony_ci	};
1258c2ecf20Sopenharmony_ci
1268c2ecf20Sopenharmony_ci	/*
1278c2ecf20Sopenharmony_ci	 * This INTC is actually connected to DW APB GPIO
1288c2ecf20Sopenharmony_ci	 * which acts as a wire between MB INTC and CPU INTC.
1298c2ecf20Sopenharmony_ci	 * GPIO INTC is configured in platform init code
1308c2ecf20Sopenharmony_ci	 * and here we mimic direct connection from MB INTC to
1318c2ecf20Sopenharmony_ci	 * CPU INTC, thus we set "interrupts = <0 1>" instead of
1328c2ecf20Sopenharmony_ci	 * "interrupts = <12>"
1338c2ecf20Sopenharmony_ci	 *
1348c2ecf20Sopenharmony_ci	 * This intc actually resides on MB, but we move it here to
1358c2ecf20Sopenharmony_ci	 * avoid duplicating the MB dtsi file given that IRQ from
1368c2ecf20Sopenharmony_ci	 * this intc to cpu intc are different for axs101 and axs103
1378c2ecf20Sopenharmony_ci	 */
1388c2ecf20Sopenharmony_ci	mb_intc: interrupt-controller@e0012000 {
1398c2ecf20Sopenharmony_ci		#interrupt-cells = <1>;
1408c2ecf20Sopenharmony_ci		compatible = "snps,dw-apb-ictl";
1418c2ecf20Sopenharmony_ci		reg = < 0x0 0xe0012000 0x0 0x200 >;
1428c2ecf20Sopenharmony_ci		interrupt-controller;
1438c2ecf20Sopenharmony_ci		interrupt-parent = <&idu_intc>;
1448c2ecf20Sopenharmony_ci		interrupts = <0>;
1458c2ecf20Sopenharmony_ci	};
1468c2ecf20Sopenharmony_ci
1478c2ecf20Sopenharmony_ci	memory {
1488c2ecf20Sopenharmony_ci		device_type = "memory";
1498c2ecf20Sopenharmony_ci		/* CONFIG_LINUX_RAM_BASE needs to match low mem start */
1508c2ecf20Sopenharmony_ci		reg = <0x0 0x80000000 0x0 0x20000000	/* 512 MiB low mem */
1518c2ecf20Sopenharmony_ci		       0x1 0xc0000000 0x0 0x40000000>;	/* 1 GiB highmem */
1528c2ecf20Sopenharmony_ci	};
1538c2ecf20Sopenharmony_ci
1548c2ecf20Sopenharmony_ci	reserved-memory {
1558c2ecf20Sopenharmony_ci		#address-cells = <2>;
1568c2ecf20Sopenharmony_ci		#size-cells = <2>;
1578c2ecf20Sopenharmony_ci		ranges;
1588c2ecf20Sopenharmony_ci		/*
1598c2ecf20Sopenharmony_ci		 * Move frame buffer out of IOC aperture (0x8z-0xaz).
1608c2ecf20Sopenharmony_ci		 */
1618c2ecf20Sopenharmony_ci		frame_buffer: frame_buffer@be000000 {
1628c2ecf20Sopenharmony_ci			compatible = "shared-dma-pool";
1638c2ecf20Sopenharmony_ci			reg = <0x0 0xbe000000 0x0 0x2000000>;
1648c2ecf20Sopenharmony_ci			no-map;
1658c2ecf20Sopenharmony_ci		};
1668c2ecf20Sopenharmony_ci	};
1678c2ecf20Sopenharmony_ci};
168