xref: /freebsd/sys/contrib/device-tree/src/arc/axc003_idu.dtsi (revision c66ec88fed842fbaad62c30d510644ceb7bd2d71)
1*c66ec88fSEmmanuel Vadot// SPDX-License-Identifier: GPL-2.0-only
2*c66ec88fSEmmanuel Vadot/*
3*c66ec88fSEmmanuel Vadot * Copyright (C) 2014, 2015 Synopsys, Inc. (www.synopsys.com)
4*c66ec88fSEmmanuel Vadot */
5*c66ec88fSEmmanuel Vadot
6*c66ec88fSEmmanuel Vadot/*
7*c66ec88fSEmmanuel Vadot * Device tree for AXC003 CPU card: HS38x2 (Dual Core) with IDU intc
8*c66ec88fSEmmanuel Vadot */
9*c66ec88fSEmmanuel Vadot
10*c66ec88fSEmmanuel Vadot/include/ "skeleton_hs_idu.dtsi"
11*c66ec88fSEmmanuel Vadot
12*c66ec88fSEmmanuel Vadot/ {
13*c66ec88fSEmmanuel Vadot	compatible = "snps,arc";
14*c66ec88fSEmmanuel Vadot	#address-cells = <2>;
15*c66ec88fSEmmanuel Vadot	#size-cells = <2>;
16*c66ec88fSEmmanuel Vadot
17*c66ec88fSEmmanuel Vadot	cpu_card {
18*c66ec88fSEmmanuel Vadot		compatible = "simple-bus";
19*c66ec88fSEmmanuel Vadot		#address-cells = <1>;
20*c66ec88fSEmmanuel Vadot		#size-cells = <1>;
21*c66ec88fSEmmanuel Vadot
22*c66ec88fSEmmanuel Vadot		ranges = <0x00000000 0x0 0xf0000000 0x10000000>;
23*c66ec88fSEmmanuel Vadot
24*c66ec88fSEmmanuel Vadot		input_clk: input-clk {
25*c66ec88fSEmmanuel Vadot			#clock-cells = <0>;
26*c66ec88fSEmmanuel Vadot			compatible = "fixed-clock";
27*c66ec88fSEmmanuel Vadot			clock-frequency = <33333333>;
28*c66ec88fSEmmanuel Vadot		};
29*c66ec88fSEmmanuel Vadot
30*c66ec88fSEmmanuel Vadot		core_clk: core-clk@80 {
31*c66ec88fSEmmanuel Vadot			compatible = "snps,axs10x-arc-pll-clock";
32*c66ec88fSEmmanuel Vadot			reg = <0x80 0x10>, <0x100 0x10>;
33*c66ec88fSEmmanuel Vadot			#clock-cells = <0>;
34*c66ec88fSEmmanuel Vadot			clocks = <&input_clk>;
35*c66ec88fSEmmanuel Vadot
36*c66ec88fSEmmanuel Vadot			/*
37*c66ec88fSEmmanuel Vadot			 * Set initial core pll output frequency to 100MHz.
38*c66ec88fSEmmanuel Vadot			 * It will be applied at the core pll driver probing
39*c66ec88fSEmmanuel Vadot			 * on early boot.
40*c66ec88fSEmmanuel Vadot			 */
41*c66ec88fSEmmanuel Vadot			assigned-clocks = <&core_clk>;
42*c66ec88fSEmmanuel Vadot			assigned-clock-rates = <100000000>;
43*c66ec88fSEmmanuel Vadot		};
44*c66ec88fSEmmanuel Vadot
45*c66ec88fSEmmanuel Vadot		core_intc: archs-intc@cpu {
46*c66ec88fSEmmanuel Vadot			compatible = "snps,archs-intc";
47*c66ec88fSEmmanuel Vadot			interrupt-controller;
48*c66ec88fSEmmanuel Vadot			#interrupt-cells = <1>;
49*c66ec88fSEmmanuel Vadot		};
50*c66ec88fSEmmanuel Vadot
51*c66ec88fSEmmanuel Vadot		idu_intc: idu-interrupt-controller {
52*c66ec88fSEmmanuel Vadot			compatible = "snps,archs-idu-intc";
53*c66ec88fSEmmanuel Vadot			interrupt-controller;
54*c66ec88fSEmmanuel Vadot			interrupt-parent = <&core_intc>;
55*c66ec88fSEmmanuel Vadot			#interrupt-cells = <1>;
56*c66ec88fSEmmanuel Vadot		};
57*c66ec88fSEmmanuel Vadot
58*c66ec88fSEmmanuel Vadot		/*
59*c66ec88fSEmmanuel Vadot		 * this GPIO block ORs all interrupts on CPU card (creg,..)
60*c66ec88fSEmmanuel Vadot		 * to uplink only 1 IRQ to ARC core intc
61*c66ec88fSEmmanuel Vadot		 */
62*c66ec88fSEmmanuel Vadot		dw-apb-gpio@2000 {
63*c66ec88fSEmmanuel Vadot			compatible = "snps,dw-apb-gpio";
64*c66ec88fSEmmanuel Vadot			reg = < 0x2000 0x80 >;
65*c66ec88fSEmmanuel Vadot			#address-cells = <1>;
66*c66ec88fSEmmanuel Vadot			#size-cells = <0>;
67*c66ec88fSEmmanuel Vadot
68*c66ec88fSEmmanuel Vadot			ictl_intc: gpio-controller@0 {
69*c66ec88fSEmmanuel Vadot				compatible = "snps,dw-apb-gpio-port";
70*c66ec88fSEmmanuel Vadot				gpio-controller;
71*c66ec88fSEmmanuel Vadot				#gpio-cells = <2>;
72*c66ec88fSEmmanuel Vadot				snps,nr-gpios = <30>;
73*c66ec88fSEmmanuel Vadot				reg = <0>;
74*c66ec88fSEmmanuel Vadot				interrupt-controller;
75*c66ec88fSEmmanuel Vadot				#interrupt-cells = <2>;
76*c66ec88fSEmmanuel Vadot				interrupt-parent = <&idu_intc>;
77*c66ec88fSEmmanuel Vadot				interrupts = <1>;
78*c66ec88fSEmmanuel Vadot			};
79*c66ec88fSEmmanuel Vadot		};
80*c66ec88fSEmmanuel Vadot
81*c66ec88fSEmmanuel Vadot		debug_uart: dw-apb-uart@5000 {
82*c66ec88fSEmmanuel Vadot			compatible = "snps,dw-apb-uart";
83*c66ec88fSEmmanuel Vadot			reg = <0x5000 0x100>;
84*c66ec88fSEmmanuel Vadot			clock-frequency = <33333000>;
85*c66ec88fSEmmanuel Vadot			interrupt-parent = <&ictl_intc>;
86*c66ec88fSEmmanuel Vadot			interrupts = <2 4>;
87*c66ec88fSEmmanuel Vadot			baud = <115200>;
88*c66ec88fSEmmanuel Vadot			reg-shift = <2>;
89*c66ec88fSEmmanuel Vadot			reg-io-width = <4>;
90*c66ec88fSEmmanuel Vadot		};
91*c66ec88fSEmmanuel Vadot
92*c66ec88fSEmmanuel Vadot		arcpct0: pct {
93*c66ec88fSEmmanuel Vadot			compatible = "snps,archs-pct";
94*c66ec88fSEmmanuel Vadot			#interrupt-cells = <1>;
95*c66ec88fSEmmanuel Vadot			interrupt-parent = <&core_intc>;
96*c66ec88fSEmmanuel Vadot			interrupts = <20>;
97*c66ec88fSEmmanuel Vadot		};
98*c66ec88fSEmmanuel Vadot	};
99*c66ec88fSEmmanuel Vadot
100*c66ec88fSEmmanuel Vadot	/*
101*c66ec88fSEmmanuel Vadot	 * Mark DMA peripherals connected via IOC port as dma-coherent. We do
102*c66ec88fSEmmanuel Vadot	 * it via overlay because peripherals defined in axs10x_mb.dtsi are
103*c66ec88fSEmmanuel Vadot	 * used for both AXS101 and AXS103 boards and only AXS103 has IOC (so
104*c66ec88fSEmmanuel Vadot	 * only AXS103 board has HW-coherent DMA peripherals)
105*c66ec88fSEmmanuel Vadot	 * We don't need to mark pgu@17000 as dma-coherent because it uses
106*c66ec88fSEmmanuel Vadot	 * external DMA buffer located outside of IOC aperture.
107*c66ec88fSEmmanuel Vadot	 */
108*c66ec88fSEmmanuel Vadot	axs10x_mb {
109*c66ec88fSEmmanuel Vadot		ethernet@18000 {
110*c66ec88fSEmmanuel Vadot			dma-coherent;
111*c66ec88fSEmmanuel Vadot		};
112*c66ec88fSEmmanuel Vadot
113*c66ec88fSEmmanuel Vadot		ehci@40000 {
114*c66ec88fSEmmanuel Vadot			dma-coherent;
115*c66ec88fSEmmanuel Vadot		};
116*c66ec88fSEmmanuel Vadot
117*c66ec88fSEmmanuel Vadot		ohci@60000 {
118*c66ec88fSEmmanuel Vadot			dma-coherent;
119*c66ec88fSEmmanuel Vadot		};
120*c66ec88fSEmmanuel Vadot
121*c66ec88fSEmmanuel Vadot		mmc@15000 {
122*c66ec88fSEmmanuel Vadot			dma-coherent;
123*c66ec88fSEmmanuel Vadot		};
124*c66ec88fSEmmanuel Vadot	};
125*c66ec88fSEmmanuel Vadot
126*c66ec88fSEmmanuel Vadot	/*
127*c66ec88fSEmmanuel Vadot	 * This INTC is actually connected to DW APB GPIO
128*c66ec88fSEmmanuel Vadot	 * which acts as a wire between MB INTC and CPU INTC.
129*c66ec88fSEmmanuel Vadot	 * GPIO INTC is configured in platform init code
130*c66ec88fSEmmanuel Vadot	 * and here we mimic direct connection from MB INTC to
131*c66ec88fSEmmanuel Vadot	 * CPU INTC, thus we set "interrupts = <0 1>" instead of
132*c66ec88fSEmmanuel Vadot	 * "interrupts = <12>"
133*c66ec88fSEmmanuel Vadot	 *
134*c66ec88fSEmmanuel Vadot	 * This intc actually resides on MB, but we move it here to
135*c66ec88fSEmmanuel Vadot	 * avoid duplicating the MB dtsi file given that IRQ from
136*c66ec88fSEmmanuel Vadot	 * this intc to cpu intc are different for axs101 and axs103
137*c66ec88fSEmmanuel Vadot	 */
138*c66ec88fSEmmanuel Vadot	mb_intc: dw-apb-ictl@e0012000 {
139*c66ec88fSEmmanuel Vadot		#interrupt-cells = <1>;
140*c66ec88fSEmmanuel Vadot		compatible = "snps,dw-apb-ictl";
141*c66ec88fSEmmanuel Vadot		reg = < 0x0 0xe0012000 0x0 0x200 >;
142*c66ec88fSEmmanuel Vadot		interrupt-controller;
143*c66ec88fSEmmanuel Vadot		interrupt-parent = <&idu_intc>;
144*c66ec88fSEmmanuel Vadot		interrupts = <0>;
145*c66ec88fSEmmanuel Vadot	};
146*c66ec88fSEmmanuel Vadot
147*c66ec88fSEmmanuel Vadot	memory {
148*c66ec88fSEmmanuel Vadot		device_type = "memory";
149*c66ec88fSEmmanuel Vadot		/* CONFIG_LINUX_RAM_BASE needs to match low mem start */
150*c66ec88fSEmmanuel Vadot		reg = <0x0 0x80000000 0x0 0x20000000	/* 512 MiB low mem */
151*c66ec88fSEmmanuel Vadot		       0x1 0xc0000000 0x0 0x40000000>;	/* 1 GiB highmem */
152*c66ec88fSEmmanuel Vadot	};
153*c66ec88fSEmmanuel Vadot
154*c66ec88fSEmmanuel Vadot	reserved-memory {
155*c66ec88fSEmmanuel Vadot		#address-cells = <2>;
156*c66ec88fSEmmanuel Vadot		#size-cells = <2>;
157*c66ec88fSEmmanuel Vadot		ranges;
158*c66ec88fSEmmanuel Vadot		/*
159*c66ec88fSEmmanuel Vadot		 * Move frame buffer out of IOC aperture (0x8z-0xaz).
160*c66ec88fSEmmanuel Vadot		 */
161*c66ec88fSEmmanuel Vadot		frame_buffer: frame_buffer@be000000 {
162*c66ec88fSEmmanuel Vadot			compatible = "shared-dma-pool";
163*c66ec88fSEmmanuel Vadot			reg = <0x0 0xbe000000 0x0 0x2000000>;
164*c66ec88fSEmmanuel Vadot			no-map;
165*c66ec88fSEmmanuel Vadot		};
166*c66ec88fSEmmanuel Vadot	};
167*c66ec88fSEmmanuel Vadot};
168