xref: /OK3568_Linux_fs/kernel/arch/arm/boot/dts/integratorap.dts (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun// SPDX-License-Identifier: GPL-2.0
2*4882a593Smuzhiyun/*
3*4882a593Smuzhiyun * Device Tree for the ARM Integrator/AP platform
4*4882a593Smuzhiyun */
5*4882a593Smuzhiyun
6*4882a593Smuzhiyun/dts-v1/;
7*4882a593Smuzhiyun#include "integrator.dtsi"
8*4882a593Smuzhiyun#include <dt-bindings/gpio/gpio.h>
9*4882a593Smuzhiyun#include <dt-bindings/input/input.h>
10*4882a593Smuzhiyun
11*4882a593Smuzhiyun/ {
12*4882a593Smuzhiyun	model = "ARM Integrator/AP";
13*4882a593Smuzhiyun	compatible = "arm,integrator-ap";
14*4882a593Smuzhiyun
15*4882a593Smuzhiyun	cpus {
16*4882a593Smuzhiyun		#address-cells = <1>;
17*4882a593Smuzhiyun		#size-cells = <0>;
18*4882a593Smuzhiyun
19*4882a593Smuzhiyun		cpu@0 {
20*4882a593Smuzhiyun			device_type = "cpu";
21*4882a593Smuzhiyun			/*
22*4882a593Smuzhiyun			 * Since the board has pluggable CPU modules, we
23*4882a593Smuzhiyun			 * cannot define a proper compatible here. Let the
24*4882a593Smuzhiyun			 * boot loader fill in the apropriate compatible
25*4882a593Smuzhiyun			 * string if necessary.
26*4882a593Smuzhiyun			 */
27*4882a593Smuzhiyun			/* compatible = "arm,arm926ej-s"; */
28*4882a593Smuzhiyun			reg = <0>;
29*4882a593Smuzhiyun			/*
30*4882a593Smuzhiyun			 * The documentation in ARM DUI 0138E page 3-12 states
31*4882a593Smuzhiyun			 * that the maximum frequency for this clock is 200 MHz
32*4882a593Smuzhiyun			 * but painful trial-and-error has proved to me that it
33*4882a593Smuzhiyun			 * is actually just hanging the system above 71 MHz.
34*4882a593Smuzhiyun			 * Sad but true.
35*4882a593Smuzhiyun			 */
36*4882a593Smuzhiyun					 /* kHz     uV   */
37*4882a593Smuzhiyun			operating-points = <71000  0
38*4882a593Smuzhiyun					    66000  0
39*4882a593Smuzhiyun					    60000  0
40*4882a593Smuzhiyun					    48000  0
41*4882a593Smuzhiyun					    36000  0
42*4882a593Smuzhiyun					    24000  0
43*4882a593Smuzhiyun					    12000  0>;
44*4882a593Smuzhiyun			clocks = <&cmosc>;
45*4882a593Smuzhiyun			clock-names = "cpu";
46*4882a593Smuzhiyun			clock-latency = <1000000>; /* 1 ms */
47*4882a593Smuzhiyun		};
48*4882a593Smuzhiyun	};
49*4882a593Smuzhiyun
50*4882a593Smuzhiyun	aliases {
51*4882a593Smuzhiyun		arm,timer-primary = &timer2;
52*4882a593Smuzhiyun		arm,timer-secondary = &timer1;
53*4882a593Smuzhiyun	};
54*4882a593Smuzhiyun
55*4882a593Smuzhiyun	chosen {
56*4882a593Smuzhiyun		bootargs = "root=/dev/ram0 console=ttyAM0,38400n8 earlyprintk";
57*4882a593Smuzhiyun	};
58*4882a593Smuzhiyun
59*4882a593Smuzhiyun	/* 24 MHz chrystal on the Integrator/AP development board */
60*4882a593Smuzhiyun	xtal24mhz: xtal24mhz@24M {
61*4882a593Smuzhiyun		#clock-cells = <0>;
62*4882a593Smuzhiyun		compatible = "fixed-clock";
63*4882a593Smuzhiyun		clock-frequency = <24000000>;
64*4882a593Smuzhiyun	};
65*4882a593Smuzhiyun
66*4882a593Smuzhiyun	pclk: pclk@0 {
67*4882a593Smuzhiyun		#clock-cells = <0>;
68*4882a593Smuzhiyun		compatible = "fixed-factor-clock";
69*4882a593Smuzhiyun		clock-div = <1>;
70*4882a593Smuzhiyun		clock-mult = <1>;
71*4882a593Smuzhiyun		clocks = <&xtal24mhz>;
72*4882a593Smuzhiyun	};
73*4882a593Smuzhiyun
74*4882a593Smuzhiyun	/* The UART clock is 14.74 MHz divided by an ICS525 */
75*4882a593Smuzhiyun	uartclk: uartclk@14.74M {
76*4882a593Smuzhiyun		#clock-cells = <0>;
77*4882a593Smuzhiyun		compatible = "fixed-clock";
78*4882a593Smuzhiyun		clock-frequency = <14745600>;
79*4882a593Smuzhiyun		clocks = <&xtal24mhz>;
80*4882a593Smuzhiyun	};
81*4882a593Smuzhiyun
82*4882a593Smuzhiyun	core-module@10000000 {
83*4882a593Smuzhiyun		/* 24 MHz chrystal on the core module */
84*4882a593Smuzhiyun		cm24mhz: cm24mhz@24M {
85*4882a593Smuzhiyun			#clock-cells = <0>;
86*4882a593Smuzhiyun			compatible = "fixed-clock";
87*4882a593Smuzhiyun			clock-frequency = <24000000>;
88*4882a593Smuzhiyun		};
89*4882a593Smuzhiyun
90*4882a593Smuzhiyun		/* Oscillator on the core module, clocks the CPU core */
91*4882a593Smuzhiyun		cmosc: cmosc@24M {
92*4882a593Smuzhiyun			compatible = "arm,syscon-icst525-integratorap-cm";
93*4882a593Smuzhiyun			#clock-cells = <0>;
94*4882a593Smuzhiyun			lock-offset = <0x14>;
95*4882a593Smuzhiyun			vco-offset = <0x08>;
96*4882a593Smuzhiyun			clocks = <&cm24mhz>;
97*4882a593Smuzhiyun		};
98*4882a593Smuzhiyun
99*4882a593Smuzhiyun		/* Auxilary oscillator on the core module, 32.369MHz at boot */
100*4882a593Smuzhiyun		auxosc: auxosc@24M {
101*4882a593Smuzhiyun			compatible = "arm,syscon-icst525";
102*4882a593Smuzhiyun			#clock-cells = <0>;
103*4882a593Smuzhiyun			lock-offset = <0x14>;
104*4882a593Smuzhiyun			vco-offset = <0x1c>;
105*4882a593Smuzhiyun			clocks = <&cm24mhz>;
106*4882a593Smuzhiyun		};
107*4882a593Smuzhiyun	};
108*4882a593Smuzhiyun
109*4882a593Smuzhiyun	syscon {
110*4882a593Smuzhiyun		compatible = "arm,integrator-ap-syscon", "syscon";
111*4882a593Smuzhiyun		reg = <0x11000000 0x100>;
112*4882a593Smuzhiyun
113*4882a593Smuzhiyun		/*
114*4882a593Smuzhiyun		 * SYSCLK clocks PCIv3 bridge, system controller and the
115*4882a593Smuzhiyun		 * logic modules.
116*4882a593Smuzhiyun		 */
117*4882a593Smuzhiyun		sysclk: apsys@24M {
118*4882a593Smuzhiyun			compatible = "arm,syscon-icst525-integratorap-sys";
119*4882a593Smuzhiyun			#clock-cells = <0>;
120*4882a593Smuzhiyun			lock-offset = <0x1c>;
121*4882a593Smuzhiyun			vco-offset = <0x04>;
122*4882a593Smuzhiyun			clocks = <&xtal24mhz>;
123*4882a593Smuzhiyun		};
124*4882a593Smuzhiyun
125*4882a593Smuzhiyun		/* One-bit control for the PCI bus clock (33 or 25 MHz) */
126*4882a593Smuzhiyun		pciclk: pciclk@24M {
127*4882a593Smuzhiyun			compatible = "arm,syscon-icst525-integratorap-pci";
128*4882a593Smuzhiyun			#clock-cells = <0>;
129*4882a593Smuzhiyun			lock-offset = <0x1c>;
130*4882a593Smuzhiyun			vco-offset = <0x04>;
131*4882a593Smuzhiyun			clocks = <&xtal24mhz>;
132*4882a593Smuzhiyun		};
133*4882a593Smuzhiyun	};
134*4882a593Smuzhiyun
135*4882a593Smuzhiyun	timer0: timer@13000000 {
136*4882a593Smuzhiyun		compatible = "arm,integrator-timer";
137*4882a593Smuzhiyun		clocks = <&xtal24mhz>;
138*4882a593Smuzhiyun	};
139*4882a593Smuzhiyun
140*4882a593Smuzhiyun	timer1: timer@13000100 {
141*4882a593Smuzhiyun		compatible = "arm,integrator-timer";
142*4882a593Smuzhiyun		clocks = <&xtal24mhz>;
143*4882a593Smuzhiyun	};
144*4882a593Smuzhiyun
145*4882a593Smuzhiyun	timer2: timer@13000200 {
146*4882a593Smuzhiyun		compatible = "arm,integrator-timer";
147*4882a593Smuzhiyun		clocks = <&xtal24mhz>;
148*4882a593Smuzhiyun	};
149*4882a593Smuzhiyun
150*4882a593Smuzhiyun	pic: pic@14000000 {
151*4882a593Smuzhiyun		valid-mask = <0x003fffff>;
152*4882a593Smuzhiyun	};
153*4882a593Smuzhiyun
154*4882a593Smuzhiyun	pci: pciv3@62000000 {
155*4882a593Smuzhiyun		compatible = "arm,integrator-ap-pci", "v3,v360epc-pci";
156*4882a593Smuzhiyun		device_type = "pci";
157*4882a593Smuzhiyun		#interrupt-cells = <1>;
158*4882a593Smuzhiyun		#size-cells = <2>;
159*4882a593Smuzhiyun		#address-cells = <3>;
160*4882a593Smuzhiyun		/* Bridge registers and config access space */
161*4882a593Smuzhiyun		reg = <0x62000000 0x10000>, <0x61000000 0x01000000>;
162*4882a593Smuzhiyun		interrupt-parent = <&pic>;
163*4882a593Smuzhiyun		interrupts = <17>; /* Bus error IRQ */
164*4882a593Smuzhiyun		clocks = <&pciclk>;
165*4882a593Smuzhiyun		bus-range = <0x00 0xff>;
166*4882a593Smuzhiyun		ranges = <0x01000000 0 0x0000000 /* I/O space @00000000 */
167*4882a593Smuzhiyun			0x60000000 0 0x00010000 /* 64 KB @ LB 60000000 */
168*4882a593Smuzhiyun			0x02000000 0 0x40000000 /* non-prefectable memory @40000000 */
169*4882a593Smuzhiyun			0x40000000 0 0x10000000 /* 256 MiB @ LB 40000000 1:1 */
170*4882a593Smuzhiyun			0x42000000 0 0x50000000 /* prefetchable memory @50000000 */
171*4882a593Smuzhiyun			0x50000000 0 0x10000000>; /* 256 MiB @ LB 50000000 1:1 */
172*4882a593Smuzhiyun		dma-ranges = <0x02000000 0 0x20000000 /* EBI memory space */
173*4882a593Smuzhiyun			0x20000000 0 0x20000000 /* 512 MB @ LB 20000000 1:1 */
174*4882a593Smuzhiyun			0x02000000 0 0x80000000 /* Core module alias memory */
175*4882a593Smuzhiyun			0x80000000 0 0x40000000>; /* 1GB @ LB 80000000 */
176*4882a593Smuzhiyun		interrupt-map-mask = <0xf800 0 0 0x7>;
177*4882a593Smuzhiyun		interrupt-map = <
178*4882a593Smuzhiyun		/* IDSEL 9 */
179*4882a593Smuzhiyun		0x4800 0 0 1 &pic 13 /* INT A on slot 9 is irq 13 */
180*4882a593Smuzhiyun		0x4800 0 0 2 &pic 14 /* INT B on slot 9 is irq 14 */
181*4882a593Smuzhiyun		0x4800 0 0 3 &pic 15 /* INT C on slot 9 is irq 15 */
182*4882a593Smuzhiyun		0x4800 0 0 4 &pic 16 /* INT D on slot 9 is irq 16 */
183*4882a593Smuzhiyun		/* IDSEL 10 */
184*4882a593Smuzhiyun		0x5000 0 0 1 &pic 14 /* INT A on slot 10 is irq 14 */
185*4882a593Smuzhiyun		0x5000 0 0 2 &pic 15 /* INT B on slot 10 is irq 15 */
186*4882a593Smuzhiyun		0x5000 0 0 3 &pic 16 /* INT C on slot 10 is irq 16 */
187*4882a593Smuzhiyun		0x5000 0 0 4 &pic 13 /* INT D on slot 10 is irq 13 */
188*4882a593Smuzhiyun		/* IDSEL 11 */
189*4882a593Smuzhiyun		0x5800 0 0 1 &pic 15 /* INT A on slot 11 is irq 15 */
190*4882a593Smuzhiyun		0x5800 0 0 2 &pic 16 /* INT B on slot 11 is irq 16 */
191*4882a593Smuzhiyun		0x5800 0 0 3 &pic 13 /* INT C on slot 11 is irq 13 */
192*4882a593Smuzhiyun		0x5800 0 0 4 &pic 14 /* INT D on slot 11 is irq 14 */
193*4882a593Smuzhiyun		/* IDSEL 12 */
194*4882a593Smuzhiyun		0x6000 0 0 1 &pic 16 /* INT A on slot 12 is irq 16 */
195*4882a593Smuzhiyun		0x6000 0 0 2 &pic 13 /* INT B on slot 12 is irq 13 */
196*4882a593Smuzhiyun		0x6000 0 0 3 &pic 14 /* INT C on slot 12 is irq 14 */
197*4882a593Smuzhiyun		0x6000 0 0 4 &pic 15 /* INT D on slot 12 is irq 15 */
198*4882a593Smuzhiyun		>;
199*4882a593Smuzhiyun	};
200*4882a593Smuzhiyun
201*4882a593Smuzhiyun	fpga {
202*4882a593Smuzhiyun		/*
203*4882a593Smuzhiyun		 * The Integator/AP predates the idea to have magic numbers
204*4882a593Smuzhiyun		 * identifying the PrimeCell in hardware, thus we have to
205*4882a593Smuzhiyun		 * supply these from the device tree.
206*4882a593Smuzhiyun		 */
207*4882a593Smuzhiyun		rtc: rtc@15000000 {
208*4882a593Smuzhiyun			compatible = "arm,pl030", "arm,primecell";
209*4882a593Smuzhiyun			arm,primecell-periphid = <0x00041030>;
210*4882a593Smuzhiyun			clocks = <&pclk>;
211*4882a593Smuzhiyun			clock-names = "apb_pclk";
212*4882a593Smuzhiyun		};
213*4882a593Smuzhiyun
214*4882a593Smuzhiyun		uart0: uart@16000000 {
215*4882a593Smuzhiyun			compatible = "arm,pl010", "arm,primecell";
216*4882a593Smuzhiyun			arm,primecell-periphid = <0x00041010>;
217*4882a593Smuzhiyun			clocks = <&uartclk>, <&pclk>;
218*4882a593Smuzhiyun			clock-names = "uartclk", "apb_pclk";
219*4882a593Smuzhiyun		};
220*4882a593Smuzhiyun
221*4882a593Smuzhiyun		uart1: uart@17000000 {
222*4882a593Smuzhiyun			compatible = "arm,pl010", "arm,primecell";
223*4882a593Smuzhiyun			arm,primecell-periphid = <0x00041010>;
224*4882a593Smuzhiyun			clocks = <&uartclk>, <&pclk>;
225*4882a593Smuzhiyun			clock-names = "uartclk", "apb_pclk";
226*4882a593Smuzhiyun		};
227*4882a593Smuzhiyun
228*4882a593Smuzhiyun		kmi0: kmi@18000000 {
229*4882a593Smuzhiyun			compatible = "arm,pl050", "arm,primecell";
230*4882a593Smuzhiyun			arm,primecell-periphid = <0x00041050>;
231*4882a593Smuzhiyun			clocks = <&xtal24mhz>, <&pclk>;
232*4882a593Smuzhiyun			clock-names = "KMIREFCLK", "apb_pclk";
233*4882a593Smuzhiyun		};
234*4882a593Smuzhiyun
235*4882a593Smuzhiyun		kmi1: kmi@19000000 {
236*4882a593Smuzhiyun			compatible = "arm,pl050", "arm,primecell";
237*4882a593Smuzhiyun			arm,primecell-periphid = <0x00041050>;
238*4882a593Smuzhiyun			clocks = <&xtal24mhz>, <&pclk>;
239*4882a593Smuzhiyun			clock-names = "KMIREFCLK", "apb_pclk";
240*4882a593Smuzhiyun		};
241*4882a593Smuzhiyun	};
242*4882a593Smuzhiyun
243*4882a593Smuzhiyun	/*
244*4882a593Smuzhiyun	 * Logic module bus, we support up to 4 logical modules
245*4882a593Smuzhiyun	 * They appear at 0xc0000000, 0xd0000000, 0xe0000000 and 0xf0000000
246*4882a593Smuzhiyun	 * and use interrupts 9, 10, 11 and 12 respectively.
247*4882a593Smuzhiyun	 */
248*4882a593Smuzhiyun	bus@c0000000 {
249*4882a593Smuzhiyun		compatible = "arm,integrator-ap-lm";
250*4882a593Smuzhiyun		#address-cells = <1>;
251*4882a593Smuzhiyun		#size-cells = <1>;
252*4882a593Smuzhiyun		ranges = <0xc0000000 0xc0000000 0x40000000>;
253*4882a593Smuzhiyun		dma-ranges;
254*4882a593Smuzhiyun
255*4882a593Smuzhiyun		lm0: bus@c0000000 {
256*4882a593Smuzhiyun			compatible = "simple-bus";
257*4882a593Smuzhiyun			ranges = <0x00000000 0xc0000000 0x10000000>;
258*4882a593Smuzhiyun			dma-ranges = <0x00000000 0x80000000 0x10000000>;
259*4882a593Smuzhiyun			reg = <0xc0000000 0x10000000>;
260*4882a593Smuzhiyun			#address-cells = <1>;
261*4882a593Smuzhiyun			#size-cells = <1>;
262*4882a593Smuzhiyun		};
263*4882a593Smuzhiyun		lm1: bus@d0000000 {
264*4882a593Smuzhiyun			compatible = "simple-bus";
265*4882a593Smuzhiyun			ranges = <0x00000000 0xd0000000 0x10000000>;
266*4882a593Smuzhiyun			dma-ranges = <0x00000000 0x80000000 0x10000000>;
267*4882a593Smuzhiyun			reg = <0xd0000000 0x10000000>;
268*4882a593Smuzhiyun			#address-cells = <1>;
269*4882a593Smuzhiyun			#size-cells = <1>;
270*4882a593Smuzhiyun		};
271*4882a593Smuzhiyun		lm2: bus@e0000000 {
272*4882a593Smuzhiyun			compatible = "simple-bus";
273*4882a593Smuzhiyun			ranges = <0x00000000 0xe0000000 0x10000000>;
274*4882a593Smuzhiyun			dma-ranges = <0x00000000 0x80000000 0x10000000>;
275*4882a593Smuzhiyun			reg = <0xe0000000 0x10000000>;
276*4882a593Smuzhiyun			#address-cells = <1>;
277*4882a593Smuzhiyun			#size-cells = <1>;
278*4882a593Smuzhiyun		};
279*4882a593Smuzhiyun		lm3: bus@f0000000 {
280*4882a593Smuzhiyun			compatible = "simple-bus";
281*4882a593Smuzhiyun			ranges = <0x00000000 0xf0000000 0x10000000>;
282*4882a593Smuzhiyun			dma-ranges = <0x00000000 0x80000000 0x10000000>;
283*4882a593Smuzhiyun			reg = <0xf0000000 0x10000000>;
284*4882a593Smuzhiyun			#address-cells = <1>;
285*4882a593Smuzhiyun			#size-cells = <1>;
286*4882a593Smuzhiyun		};
287*4882a593Smuzhiyun	};
288*4882a593Smuzhiyun};
289