xref: /OK3568_Linux_fs/kernel/arch/arm/boot/dts/arm-realview-pb1176.dts (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun/*
2*4882a593Smuzhiyun * Copyright 2014 Linaro Ltd
3*4882a593Smuzhiyun *
4*4882a593Smuzhiyun * Permission is hereby granted, free of charge, to any person obtaining a copy
5*4882a593Smuzhiyun * of this software and associated documentation files (the "Software"), to deal
6*4882a593Smuzhiyun * in the Software without restriction, including without limitation the rights
7*4882a593Smuzhiyun * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8*4882a593Smuzhiyun * copies of the Software, and to permit persons to whom the Software is
9*4882a593Smuzhiyun * furnished to do so, subject to the following conditions:
10*4882a593Smuzhiyun *
11*4882a593Smuzhiyun * The above copyright notice and this permission notice shall be included in
12*4882a593Smuzhiyun * all copies or substantial portions of the Software.
13*4882a593Smuzhiyun *
14*4882a593Smuzhiyun * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15*4882a593Smuzhiyun * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16*4882a593Smuzhiyun * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17*4882a593Smuzhiyun * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18*4882a593Smuzhiyun * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19*4882a593Smuzhiyun * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20*4882a593Smuzhiyun * THE SOFTWARE.
21*4882a593Smuzhiyun */
22*4882a593Smuzhiyun
23*4882a593Smuzhiyun/dts-v1/;
24*4882a593Smuzhiyun#include <dt-bindings/interrupt-controller/irq.h>
25*4882a593Smuzhiyun#include <dt-bindings/gpio/gpio.h>
26*4882a593Smuzhiyun
27*4882a593Smuzhiyun/ {
28*4882a593Smuzhiyun	#address-cells = <1>;
29*4882a593Smuzhiyun	#size-cells = <1>;
30*4882a593Smuzhiyun	model = "ARM RealView PB1176";
31*4882a593Smuzhiyun	compatible = "arm,realview-pb1176";
32*4882a593Smuzhiyun
33*4882a593Smuzhiyun	chosen { };
34*4882a593Smuzhiyun
35*4882a593Smuzhiyun	aliases {
36*4882a593Smuzhiyun		serial0 = &pb1176_serial0;
37*4882a593Smuzhiyun		serial1 = &pb1176_serial1;
38*4882a593Smuzhiyun		serial2 = &pb1176_serial2;
39*4882a593Smuzhiyun		serial3 = &pb1176_serial3;
40*4882a593Smuzhiyun		serial4 = &fpga_serial;
41*4882a593Smuzhiyun	};
42*4882a593Smuzhiyun
43*4882a593Smuzhiyun	memory {
44*4882a593Smuzhiyun		device_type = "memory";
45*4882a593Smuzhiyun		/* 128 MiB memory @ 0x0 */
46*4882a593Smuzhiyun		reg = <0x00000000 0x08000000>;
47*4882a593Smuzhiyun	};
48*4882a593Smuzhiyun
49*4882a593Smuzhiyun	/* The voltage to the MMC card is hardwired at 3.3V */
50*4882a593Smuzhiyun	vmmc: regulator-vmmc {
51*4882a593Smuzhiyun		compatible = "regulator-fixed";
52*4882a593Smuzhiyun		regulator-name = "vmmc";
53*4882a593Smuzhiyun		regulator-min-microvolt = <3300000>;
54*4882a593Smuzhiyun		regulator-max-microvolt = <3300000>;
55*4882a593Smuzhiyun		regulator-boot-on;
56*4882a593Smuzhiyun        };
57*4882a593Smuzhiyun
58*4882a593Smuzhiyun	veth: regulator-veth {
59*4882a593Smuzhiyun		compatible = "regulator-fixed";
60*4882a593Smuzhiyun		regulator-name = "veth";
61*4882a593Smuzhiyun		regulator-min-microvolt = <3300000>;
62*4882a593Smuzhiyun		regulator-max-microvolt = <3300000>;
63*4882a593Smuzhiyun		regulator-boot-on;
64*4882a593Smuzhiyun	};
65*4882a593Smuzhiyun
66*4882a593Smuzhiyun	xtal24mhz: xtal24mhz@24M {
67*4882a593Smuzhiyun		#clock-cells = <0>;
68*4882a593Smuzhiyun		compatible = "fixed-clock";
69*4882a593Smuzhiyun		clock-frequency = <24000000>;
70*4882a593Smuzhiyun	};
71*4882a593Smuzhiyun
72*4882a593Smuzhiyun	timclk: timclk@1M {
73*4882a593Smuzhiyun		#clock-cells = <0>;
74*4882a593Smuzhiyun		compatible = "fixed-factor-clock";
75*4882a593Smuzhiyun		clock-div = <24>;
76*4882a593Smuzhiyun		clock-mult = <1>;
77*4882a593Smuzhiyun		clocks = <&xtal24mhz>;
78*4882a593Smuzhiyun	};
79*4882a593Smuzhiyun
80*4882a593Smuzhiyun	mclk: mclk@24M {
81*4882a593Smuzhiyun		#clock-cells = <0>;
82*4882a593Smuzhiyun		compatible = "fixed-factor-clock";
83*4882a593Smuzhiyun		clock-div = <1>;
84*4882a593Smuzhiyun		clock-mult = <1>;
85*4882a593Smuzhiyun		clocks = <&xtal24mhz>;
86*4882a593Smuzhiyun	};
87*4882a593Smuzhiyun
88*4882a593Smuzhiyun	kmiclk: kmiclk@24M {
89*4882a593Smuzhiyun		#clock-cells = <0>;
90*4882a593Smuzhiyun		compatible = "fixed-factor-clock";
91*4882a593Smuzhiyun		clock-div = <1>;
92*4882a593Smuzhiyun		clock-mult = <1>;
93*4882a593Smuzhiyun		clocks = <&xtal24mhz>;
94*4882a593Smuzhiyun	};
95*4882a593Smuzhiyun
96*4882a593Smuzhiyun	sspclk: sspclk@24M {
97*4882a593Smuzhiyun		#clock-cells = <0>;
98*4882a593Smuzhiyun		compatible = "fixed-factor-clock";
99*4882a593Smuzhiyun		clock-div = <1>;
100*4882a593Smuzhiyun		clock-mult = <1>;
101*4882a593Smuzhiyun		clocks = <&xtal24mhz>;
102*4882a593Smuzhiyun	};
103*4882a593Smuzhiyun
104*4882a593Smuzhiyun	uartclk: uartclk@24M {
105*4882a593Smuzhiyun		#clock-cells = <0>;
106*4882a593Smuzhiyun		compatible = "fixed-factor-clock";
107*4882a593Smuzhiyun		clock-div = <1>;
108*4882a593Smuzhiyun		clock-mult = <1>;
109*4882a593Smuzhiyun		clocks = <&xtal24mhz>;
110*4882a593Smuzhiyun	};
111*4882a593Smuzhiyun
112*4882a593Smuzhiyun	/* FIXME: this actually hangs off the PLL clocks */
113*4882a593Smuzhiyun	pclk: pclk@0 {
114*4882a593Smuzhiyun		#clock-cells = <0>;
115*4882a593Smuzhiyun		compatible = "fixed-clock";
116*4882a593Smuzhiyun		clock-frequency = <0>;
117*4882a593Smuzhiyun	};
118*4882a593Smuzhiyun
119*4882a593Smuzhiyun	flash@30000000 {
120*4882a593Smuzhiyun		compatible = "arm,versatile-flash", "cfi-flash";
121*4882a593Smuzhiyun		reg = <0x30000000 0x4000000>;
122*4882a593Smuzhiyun		bank-width = <4>;
123*4882a593Smuzhiyun		partitions {
124*4882a593Smuzhiyun			compatible = "arm,arm-firmware-suite";
125*4882a593Smuzhiyun		};
126*4882a593Smuzhiyun	};
127*4882a593Smuzhiyun
128*4882a593Smuzhiyun	fpga_flash@38000000 {
129*4882a593Smuzhiyun		compatible = "arm,versatile-flash", "cfi-flash";
130*4882a593Smuzhiyun		reg = <0x38000000 0x800000>;
131*4882a593Smuzhiyun		bank-width = <4>;
132*4882a593Smuzhiyun		partitions {
133*4882a593Smuzhiyun			compatible = "arm,arm-firmware-suite";
134*4882a593Smuzhiyun		};
135*4882a593Smuzhiyun	};
136*4882a593Smuzhiyun
137*4882a593Smuzhiyun	/*
138*4882a593Smuzhiyun	 * The "secure flash" contains things like the boot
139*4882a593Smuzhiyun	 * monitor so we don't want people to accidentally
140*4882a593Smuzhiyun	 * screw this up. Mark the device tree node disabled
141*4882a593Smuzhiyun	 * by default.
142*4882a593Smuzhiyun	 */
143*4882a593Smuzhiyun	secflash@3c000000 {
144*4882a593Smuzhiyun		compatible = "arm,versatile-flash", "cfi-flash";
145*4882a593Smuzhiyun		reg = <0x3c000000 0x4000000>;
146*4882a593Smuzhiyun		bank-width = <4>;
147*4882a593Smuzhiyun		status = "disabled";
148*4882a593Smuzhiyun	};
149*4882a593Smuzhiyun
150*4882a593Smuzhiyun	/* SMSC 9118 ethernet with PHY and EEPROM */
151*4882a593Smuzhiyun	ethernet@3a000000 {
152*4882a593Smuzhiyun		compatible = "smsc,lan9118", "smsc,lan9115";
153*4882a593Smuzhiyun		reg = <0x3a000000 0x10000>;
154*4882a593Smuzhiyun		interrupt-parent = <&intc_fpga1176>;
155*4882a593Smuzhiyun		interrupts = <0 10 IRQ_TYPE_LEVEL_HIGH>;
156*4882a593Smuzhiyun		phy-mode = "mii";
157*4882a593Smuzhiyun		reg-io-width = <4>;
158*4882a593Smuzhiyun		smsc,irq-active-high;
159*4882a593Smuzhiyun		smsc,irq-push-pull;
160*4882a593Smuzhiyun		vdd33a-supply = <&veth>;
161*4882a593Smuzhiyun		vddvario-supply = <&veth>;
162*4882a593Smuzhiyun	};
163*4882a593Smuzhiyun
164*4882a593Smuzhiyun	usb@3b000000 {
165*4882a593Smuzhiyun		compatible = "nxp,usb-isp1761";
166*4882a593Smuzhiyun		reg = <0x3b000000 0x20000>;
167*4882a593Smuzhiyun		interrupt-parent = <&intc_fpga1176>;
168*4882a593Smuzhiyun		interrupts = <0 11 IRQ_TYPE_LEVEL_HIGH>;
169*4882a593Smuzhiyun		port1-otg;
170*4882a593Smuzhiyun	};
171*4882a593Smuzhiyun
172*4882a593Smuzhiyun	bridge {
173*4882a593Smuzhiyun		compatible = "ti,ths8134a", "ti,ths8134";
174*4882a593Smuzhiyun		#address-cells = <1>;
175*4882a593Smuzhiyun		#size-cells = <0>;
176*4882a593Smuzhiyun
177*4882a593Smuzhiyun		ports {
178*4882a593Smuzhiyun			#address-cells = <1>;
179*4882a593Smuzhiyun			#size-cells = <0>;
180*4882a593Smuzhiyun
181*4882a593Smuzhiyun			port@0 {
182*4882a593Smuzhiyun				reg = <0>;
183*4882a593Smuzhiyun
184*4882a593Smuzhiyun				vga_bridge_in: endpoint {
185*4882a593Smuzhiyun					remote-endpoint = <&clcd_pads>;
186*4882a593Smuzhiyun				};
187*4882a593Smuzhiyun			};
188*4882a593Smuzhiyun
189*4882a593Smuzhiyun			port@1 {
190*4882a593Smuzhiyun				reg = <1>;
191*4882a593Smuzhiyun
192*4882a593Smuzhiyun				vga_bridge_out: endpoint {
193*4882a593Smuzhiyun					remote-endpoint = <&vga_con_in>;
194*4882a593Smuzhiyun				};
195*4882a593Smuzhiyun			};
196*4882a593Smuzhiyun		};
197*4882a593Smuzhiyun	};
198*4882a593Smuzhiyun
199*4882a593Smuzhiyun	vga {
200*4882a593Smuzhiyun		compatible = "vga-connector";
201*4882a593Smuzhiyun
202*4882a593Smuzhiyun		port {
203*4882a593Smuzhiyun			vga_con_in: endpoint {
204*4882a593Smuzhiyun				remote-endpoint = <&vga_bridge_out>;
205*4882a593Smuzhiyun			};
206*4882a593Smuzhiyun		};
207*4882a593Smuzhiyun	};
208*4882a593Smuzhiyun
209*4882a593Smuzhiyun	soc {
210*4882a593Smuzhiyun		#address-cells = <1>;
211*4882a593Smuzhiyun		#size-cells = <1>;
212*4882a593Smuzhiyun		compatible = "arm,realview-pb1176-soc", "simple-bus";
213*4882a593Smuzhiyun		regmap = <&syscon>;
214*4882a593Smuzhiyun		ranges;
215*4882a593Smuzhiyun
216*4882a593Smuzhiyun		syscon: syscon@10000000 {
217*4882a593Smuzhiyun			compatible = "arm,realview-pb1176-syscon", "syscon", "simple-mfd";
218*4882a593Smuzhiyun			reg = <0x10000000 0x1000>;
219*4882a593Smuzhiyun
220*4882a593Smuzhiyun			led@08.0 {
221*4882a593Smuzhiyun				compatible = "register-bit-led";
222*4882a593Smuzhiyun				offset = <0x08>;
223*4882a593Smuzhiyun				mask = <0x01>;
224*4882a593Smuzhiyun				label = "versatile:0";
225*4882a593Smuzhiyun				linux,default-trigger = "heartbeat";
226*4882a593Smuzhiyun				default-state = "on";
227*4882a593Smuzhiyun			};
228*4882a593Smuzhiyun			led@08.1 {
229*4882a593Smuzhiyun				compatible = "register-bit-led";
230*4882a593Smuzhiyun				offset = <0x08>;
231*4882a593Smuzhiyun				mask = <0x02>;
232*4882a593Smuzhiyun				label = "versatile:1";
233*4882a593Smuzhiyun				linux,default-trigger = "mmc0";
234*4882a593Smuzhiyun				default-state = "off";
235*4882a593Smuzhiyun			};
236*4882a593Smuzhiyun			led@08.2 {
237*4882a593Smuzhiyun				compatible = "register-bit-led";
238*4882a593Smuzhiyun				offset = <0x08>;
239*4882a593Smuzhiyun				mask = <0x04>;
240*4882a593Smuzhiyun				label = "versatile:2";
241*4882a593Smuzhiyun				linux,default-trigger = "cpu0";
242*4882a593Smuzhiyun				default-state = "off";
243*4882a593Smuzhiyun			};
244*4882a593Smuzhiyun			led@08.3 {
245*4882a593Smuzhiyun				compatible = "register-bit-led";
246*4882a593Smuzhiyun				offset = <0x08>;
247*4882a593Smuzhiyun				mask = <0x08>;
248*4882a593Smuzhiyun				label = "versatile:3";
249*4882a593Smuzhiyun				default-state = "off";
250*4882a593Smuzhiyun			};
251*4882a593Smuzhiyun			led@08.4 {
252*4882a593Smuzhiyun				compatible = "register-bit-led";
253*4882a593Smuzhiyun				offset = <0x08>;
254*4882a593Smuzhiyun				mask = <0x10>;
255*4882a593Smuzhiyun				label = "versatile:4";
256*4882a593Smuzhiyun				default-state = "off";
257*4882a593Smuzhiyun			};
258*4882a593Smuzhiyun			led@08.5 {
259*4882a593Smuzhiyun				compatible = "register-bit-led";
260*4882a593Smuzhiyun				offset = <0x08>;
261*4882a593Smuzhiyun				mask = <0x20>;
262*4882a593Smuzhiyun				label = "versatile:5";
263*4882a593Smuzhiyun				default-state = "off";
264*4882a593Smuzhiyun			};
265*4882a593Smuzhiyun			led@08.6 {
266*4882a593Smuzhiyun				compatible = "register-bit-led";
267*4882a593Smuzhiyun				offset = <0x08>;
268*4882a593Smuzhiyun				mask = <0x40>;
269*4882a593Smuzhiyun				label = "versatile:6";
270*4882a593Smuzhiyun				default-state = "off";
271*4882a593Smuzhiyun			};
272*4882a593Smuzhiyun			led@08.7 {
273*4882a593Smuzhiyun				compatible = "register-bit-led";
274*4882a593Smuzhiyun				offset = <0x08>;
275*4882a593Smuzhiyun				mask = <0x80>;
276*4882a593Smuzhiyun				label = "versatile:7";
277*4882a593Smuzhiyun				default-state = "off";
278*4882a593Smuzhiyun			};
279*4882a593Smuzhiyun			oscclk0: osc0@0c {
280*4882a593Smuzhiyun				compatible = "arm,syscon-icst307";
281*4882a593Smuzhiyun				#clock-cells = <0>;
282*4882a593Smuzhiyun				lock-offset = <0x20>;
283*4882a593Smuzhiyun				vco-offset = <0x0C>;
284*4882a593Smuzhiyun				clocks = <&xtal24mhz>;
285*4882a593Smuzhiyun			};
286*4882a593Smuzhiyun			oscclk1: osc1@10 {
287*4882a593Smuzhiyun				compatible = "arm,syscon-icst307";
288*4882a593Smuzhiyun				#clock-cells = <0>;
289*4882a593Smuzhiyun				lock-offset = <0x20>;
290*4882a593Smuzhiyun				vco-offset = <0x10>;
291*4882a593Smuzhiyun				clocks = <&xtal24mhz>;
292*4882a593Smuzhiyun			};
293*4882a593Smuzhiyun			oscclk2: osc2@14 {
294*4882a593Smuzhiyun				compatible = "arm,syscon-icst307";
295*4882a593Smuzhiyun				#clock-cells = <0>;
296*4882a593Smuzhiyun				lock-offset = <0x20>;
297*4882a593Smuzhiyun				vco-offset = <0x14>;
298*4882a593Smuzhiyun				clocks = <&xtal24mhz>;
299*4882a593Smuzhiyun			};
300*4882a593Smuzhiyun			oscclk3: osc3@18 {
301*4882a593Smuzhiyun				compatible = "arm,syscon-icst307";
302*4882a593Smuzhiyun				#clock-cells = <0>;
303*4882a593Smuzhiyun				lock-offset = <0x20>;
304*4882a593Smuzhiyun				vco-offset = <0x18>;
305*4882a593Smuzhiyun				clocks = <&xtal24mhz>;
306*4882a593Smuzhiyun			};
307*4882a593Smuzhiyun			oscclk4: osc4@1c {
308*4882a593Smuzhiyun				compatible = "arm,syscon-icst307";
309*4882a593Smuzhiyun				#clock-cells = <0>;
310*4882a593Smuzhiyun				lock-offset = <0x20>;
311*4882a593Smuzhiyun				vco-offset = <0x1c>;
312*4882a593Smuzhiyun				clocks = <&xtal24mhz>;
313*4882a593Smuzhiyun			};
314*4882a593Smuzhiyun		};
315*4882a593Smuzhiyun
316*4882a593Smuzhiyun		/* Primary DevChip GIC synthesized with the CPU */
317*4882a593Smuzhiyun		intc_dc1176: interrupt-controller@10120000 {
318*4882a593Smuzhiyun			compatible = "arm,arm1176jzf-devchip-gic", "arm,arm11mp-gic";
319*4882a593Smuzhiyun			#interrupt-cells = <3>;
320*4882a593Smuzhiyun			#address-cells = <1>;
321*4882a593Smuzhiyun			interrupt-controller;
322*4882a593Smuzhiyun			reg = <0x10121000 0x1000>,
323*4882a593Smuzhiyun			      <0x10120000 0x100>;
324*4882a593Smuzhiyun		};
325*4882a593Smuzhiyun
326*4882a593Smuzhiyun		L2: cache-controller {
327*4882a593Smuzhiyun			compatible = "arm,l220-cache";
328*4882a593Smuzhiyun			reg = <0x10110000 0x1000>;
329*4882a593Smuzhiyun			interrupt-parent = <&intc_dc1176>;
330*4882a593Smuzhiyun			interrupts = <0 13 IRQ_TYPE_LEVEL_HIGH>;
331*4882a593Smuzhiyun			cache-unified;
332*4882a593Smuzhiyun			cache-level = <2>;
333*4882a593Smuzhiyun			/*
334*4882a593Smuzhiyun			 * Override default cache size, sets and
335*4882a593Smuzhiyun			 * associativity as these may be erroneously set
336*4882a593Smuzhiyun			 * up by boot loader(s).
337*4882a593Smuzhiyun			 */
338*4882a593Smuzhiyun			arm,override-auxreg;
339*4882a593Smuzhiyun			cache-size = <131072>; // 128kB
340*4882a593Smuzhiyun			cache-sets = <512>;
341*4882a593Smuzhiyun			cache-line-size = <32>;
342*4882a593Smuzhiyun		};
343*4882a593Smuzhiyun
344*4882a593Smuzhiyun		pmu {
345*4882a593Smuzhiyun			compatible = "arm,arm1176-pmu";
346*4882a593Smuzhiyun			interrupt-parent = <&intc_dc1176>;
347*4882a593Smuzhiyun			interrupts = <0 7 IRQ_TYPE_LEVEL_HIGH>;
348*4882a593Smuzhiyun		};
349*4882a593Smuzhiyun
350*4882a593Smuzhiyun		timer01: timer@10104000 {
351*4882a593Smuzhiyun			compatible = "arm,sp804", "arm,primecell";
352*4882a593Smuzhiyun			reg = <0x10104000 0x1000>;
353*4882a593Smuzhiyun			interrupt-parent = <&intc_dc1176>;
354*4882a593Smuzhiyun			interrupts = <0 8 IRQ_TYPE_LEVEL_HIGH>, <0 9 IRQ_TYPE_LEVEL_HIGH>;
355*4882a593Smuzhiyun			clocks = <&timclk>, <&timclk>, <&pclk>;
356*4882a593Smuzhiyun			clock-names = "timer1", "timer2", "apb_pclk";
357*4882a593Smuzhiyun		};
358*4882a593Smuzhiyun
359*4882a593Smuzhiyun		timer23: timer@10105000 {
360*4882a593Smuzhiyun			compatible = "arm,sp804", "arm,primecell";
361*4882a593Smuzhiyun			reg = <0x10105000 0x1000>;
362*4882a593Smuzhiyun			interrupt-parent = <&intc_dc1176>;
363*4882a593Smuzhiyun			interrupts = <0 10 IRQ_TYPE_LEVEL_HIGH>;
364*4882a593Smuzhiyun			arm,sp804-has-irq = <1>;
365*4882a593Smuzhiyun			clocks = <&timclk>, <&timclk>, <&pclk>;
366*4882a593Smuzhiyun			clock-names = "timer1", "timer2", "apb_pclk";
367*4882a593Smuzhiyun		};
368*4882a593Smuzhiyun
369*4882a593Smuzhiyun		pb1176_rtc: rtc@10108000 {
370*4882a593Smuzhiyun			compatible = "arm,pl031", "arm,primecell";
371*4882a593Smuzhiyun			reg = <0x10108000 0x1000>;
372*4882a593Smuzhiyun			interrupt-parent = <&intc_dc1176>;
373*4882a593Smuzhiyun			interrupts = <0 14 IRQ_TYPE_LEVEL_HIGH>;
374*4882a593Smuzhiyun			clocks = <&pclk>;
375*4882a593Smuzhiyun			clock-names = "apb_pclk";
376*4882a593Smuzhiyun		};
377*4882a593Smuzhiyun
378*4882a593Smuzhiyun		pb1176_gpio0: gpio@1010a000 {
379*4882a593Smuzhiyun			compatible = "arm,pl061", "arm,primecell";
380*4882a593Smuzhiyun			reg = <0x1010a000 0x1000>;
381*4882a593Smuzhiyun			gpio-controller;
382*4882a593Smuzhiyun			interrupt-parent = <&intc_dc1176>;
383*4882a593Smuzhiyun			interrupts = <0 16 IRQ_TYPE_LEVEL_HIGH>;
384*4882a593Smuzhiyun			#gpio-cells = <2>;
385*4882a593Smuzhiyun			interrupt-controller;
386*4882a593Smuzhiyun			#interrupt-cells = <2>;
387*4882a593Smuzhiyun			clocks = <&pclk>;
388*4882a593Smuzhiyun			clock-names = "apb_pclk";
389*4882a593Smuzhiyun		};
390*4882a593Smuzhiyun
391*4882a593Smuzhiyun		pb1176_ssp: spi@1010b000 {
392*4882a593Smuzhiyun			compatible = "arm,pl022", "arm,primecell";
393*4882a593Smuzhiyun			reg = <0x1010b000 0x1000>;
394*4882a593Smuzhiyun			interrupt-parent = <&intc_dc1176>;
395*4882a593Smuzhiyun			interrupts = <0 17 IRQ_TYPE_LEVEL_HIGH>;
396*4882a593Smuzhiyun			clocks = <&sspclk>, <&pclk>;
397*4882a593Smuzhiyun			clock-names = "SSPCLK", "apb_pclk";
398*4882a593Smuzhiyun		};
399*4882a593Smuzhiyun
400*4882a593Smuzhiyun		pb1176_serial0: serial@1010c000 {
401*4882a593Smuzhiyun			compatible = "arm,pl011", "arm,primecell";
402*4882a593Smuzhiyun			reg = <0x1010c000 0x1000>;
403*4882a593Smuzhiyun			interrupt-parent = <&intc_dc1176>;
404*4882a593Smuzhiyun			interrupts = <0 18 IRQ_TYPE_LEVEL_HIGH>;
405*4882a593Smuzhiyun			clocks = <&uartclk>, <&pclk>;
406*4882a593Smuzhiyun			clock-names = "uartclk", "apb_pclk";
407*4882a593Smuzhiyun		};
408*4882a593Smuzhiyun
409*4882a593Smuzhiyun		pb1176_serial1: serial@1010d000 {
410*4882a593Smuzhiyun			compatible = "arm,pl011", "arm,primecell";
411*4882a593Smuzhiyun			reg = <0x1010d000 0x1000>;
412*4882a593Smuzhiyun			interrupt-parent = <&intc_dc1176>;
413*4882a593Smuzhiyun			interrupts = <0 19 IRQ_TYPE_LEVEL_HIGH>;
414*4882a593Smuzhiyun			clocks = <&uartclk>, <&pclk>;
415*4882a593Smuzhiyun			clock-names = "uartclk", "apb_pclk";
416*4882a593Smuzhiyun		};
417*4882a593Smuzhiyun
418*4882a593Smuzhiyun		pb1176_serial2: serial@1010e000 {
419*4882a593Smuzhiyun			compatible = "arm,pl011", "arm,primecell";
420*4882a593Smuzhiyun			reg = <0x1010e000 0x1000>;
421*4882a593Smuzhiyun			interrupt-parent = <&intc_dc1176>;
422*4882a593Smuzhiyun			interrupts = <0 20 IRQ_TYPE_LEVEL_HIGH>;
423*4882a593Smuzhiyun			clocks = <&uartclk>, <&pclk>;
424*4882a593Smuzhiyun			clock-names = "uartclk", "apb_pclk";
425*4882a593Smuzhiyun		};
426*4882a593Smuzhiyun
427*4882a593Smuzhiyun		pb1176_serial3: serial@1010f000 {
428*4882a593Smuzhiyun			compatible = "arm,pl011", "arm,primecell";
429*4882a593Smuzhiyun			reg = <0x1010f000 0x1000>;
430*4882a593Smuzhiyun			interrupt-parent = <&intc_dc1176>;
431*4882a593Smuzhiyun			interrupts = <0 21 IRQ_TYPE_LEVEL_HIGH>;
432*4882a593Smuzhiyun			clocks = <&uartclk>, <&pclk>;
433*4882a593Smuzhiyun			clock-names = "uartclk", "apb_pclk";
434*4882a593Smuzhiyun		};
435*4882a593Smuzhiyun
436*4882a593Smuzhiyun		/* Direct-mapped development chip ROM */
437*4882a593Smuzhiyun		pb1176_rom@10200000 {
438*4882a593Smuzhiyun			compatible = "direct-mapped";
439*4882a593Smuzhiyun			reg = <0x10200000 0x4000>;
440*4882a593Smuzhiyun			bank-width = <1>;
441*4882a593Smuzhiyun		};
442*4882a593Smuzhiyun
443*4882a593Smuzhiyun		clcd@10112000 {
444*4882a593Smuzhiyun			compatible = "arm,pl111", "arm,primecell";
445*4882a593Smuzhiyun			reg = <0x10112000 0x1000>;
446*4882a593Smuzhiyun			interrupt-parent = <&intc_dc1176>;
447*4882a593Smuzhiyun			interrupt-names = "combined";
448*4882a593Smuzhiyun			interrupts = <0 47 IRQ_TYPE_LEVEL_HIGH>;
449*4882a593Smuzhiyun			clocks = <&oscclk0>, <&pclk>;
450*4882a593Smuzhiyun			clock-names = "clcdclk", "apb_pclk";
451*4882a593Smuzhiyun			/* 1024x768 16bpp @65MHz works fine */
452*4882a593Smuzhiyun			max-memory-bandwidth = <95000000>;
453*4882a593Smuzhiyun
454*4882a593Smuzhiyun			port {
455*4882a593Smuzhiyun				clcd_pads: endpoint {
456*4882a593Smuzhiyun					remote-endpoint = <&vga_bridge_in>;
457*4882a593Smuzhiyun					arm,pl11x,tft-r0g0b0-pads = <0 8 16>;
458*4882a593Smuzhiyun				};
459*4882a593Smuzhiyun			};
460*4882a593Smuzhiyun		};
461*4882a593Smuzhiyun	};
462*4882a593Smuzhiyun
463*4882a593Smuzhiyun	/* These peripherals are inside the FPGA rather than the DevChip */
464*4882a593Smuzhiyun	fpga {
465*4882a593Smuzhiyun		#address-cells = <1>;
466*4882a593Smuzhiyun		#size-cells = <1>;
467*4882a593Smuzhiyun		compatible = "simple-bus";
468*4882a593Smuzhiyun		ranges;
469*4882a593Smuzhiyun
470*4882a593Smuzhiyun		i2c0: i2c@10002000 {
471*4882a593Smuzhiyun			#address-cells = <1>;
472*4882a593Smuzhiyun			#size-cells = <0>;
473*4882a593Smuzhiyun			compatible = "arm,versatile-i2c";
474*4882a593Smuzhiyun			reg = <0x10002000 0x1000>;
475*4882a593Smuzhiyun
476*4882a593Smuzhiyun			rtc@68 {
477*4882a593Smuzhiyun				compatible = "dallas,ds1338";
478*4882a593Smuzhiyun				reg = <0x68>;
479*4882a593Smuzhiyun			};
480*4882a593Smuzhiyun		};
481*4882a593Smuzhiyun
482*4882a593Smuzhiyun		fpga_aaci: aaci@10004000 {
483*4882a593Smuzhiyun			compatible = "arm,pl041", "arm,primecell";
484*4882a593Smuzhiyun			reg = <0x10004000 0x1000>;
485*4882a593Smuzhiyun			interrupt-parent = <&intc_fpga1176>;
486*4882a593Smuzhiyun			interrupts = <0 19 IRQ_TYPE_LEVEL_HIGH>;
487*4882a593Smuzhiyun			clocks = <&pclk>;
488*4882a593Smuzhiyun			clock-names = "apb_pclk";
489*4882a593Smuzhiyun		};
490*4882a593Smuzhiyun
491*4882a593Smuzhiyun		fpga_mci: mmcsd@10005000 {
492*4882a593Smuzhiyun			compatible = "arm,pl18x", "arm,primecell";
493*4882a593Smuzhiyun			reg = <0x10005000 0x1000>;
494*4882a593Smuzhiyun			interrupt-parent = <&intc_fpga1176>;
495*4882a593Smuzhiyun			interrupts = <0 1 IRQ_TYPE_LEVEL_HIGH>,
496*4882a593Smuzhiyun					<0 2 IRQ_TYPE_LEVEL_HIGH>;
497*4882a593Smuzhiyun			/* Due to frequent FIFO overruns, use just 500 kHz */
498*4882a593Smuzhiyun			max-frequency = <500000>;
499*4882a593Smuzhiyun			bus-width = <4>;
500*4882a593Smuzhiyun			cap-sd-highspeed;
501*4882a593Smuzhiyun			cap-mmc-highspeed;
502*4882a593Smuzhiyun			clocks = <&mclk>, <&pclk>;
503*4882a593Smuzhiyun			clock-names = "mclk", "apb_pclk";
504*4882a593Smuzhiyun			vmmc-supply = <&vmmc>;
505*4882a593Smuzhiyun			cd-gpios = <&fpga_gpio1 0 GPIO_ACTIVE_LOW>;
506*4882a593Smuzhiyun			wp-gpios = <&fpga_gpio1 1 GPIO_ACTIVE_HIGH>;
507*4882a593Smuzhiyun		};
508*4882a593Smuzhiyun
509*4882a593Smuzhiyun		fpga_kmi0: kmi@10006000 {
510*4882a593Smuzhiyun			compatible = "arm,pl050", "arm,primecell";
511*4882a593Smuzhiyun			reg = <0x10006000 0x1000>;
512*4882a593Smuzhiyun			interrupt-parent = <&intc_fpga1176>;
513*4882a593Smuzhiyun			interrupts = <0 3 IRQ_TYPE_LEVEL_HIGH>;
514*4882a593Smuzhiyun			clocks = <&kmiclk>, <&pclk>;
515*4882a593Smuzhiyun			clock-names = "KMIREFCLK", "apb_pclk";
516*4882a593Smuzhiyun		};
517*4882a593Smuzhiyun
518*4882a593Smuzhiyun		fpga_kmi1: kmi@10007000 {
519*4882a593Smuzhiyun			compatible = "arm,pl050", "arm,primecell";
520*4882a593Smuzhiyun			reg = <0x10007000 0x1000>;
521*4882a593Smuzhiyun			interrupt-parent = <&intc_fpga1176>;
522*4882a593Smuzhiyun			interrupts = <0 4 IRQ_TYPE_LEVEL_HIGH>;
523*4882a593Smuzhiyun			clocks = <&kmiclk>, <&pclk>;
524*4882a593Smuzhiyun			clock-names = "KMIREFCLK", "apb_pclk";
525*4882a593Smuzhiyun		};
526*4882a593Smuzhiyun
527*4882a593Smuzhiyun		fpga_charlcd: charlcd@10008000 {
528*4882a593Smuzhiyun			compatible = "arm,versatile-lcd";
529*4882a593Smuzhiyun			reg = <0x10008000 0x1000>;
530*4882a593Smuzhiyun			interrupt-parent = <&intc_fpga1176>;
531*4882a593Smuzhiyun			interrupts = <0 7 IRQ_TYPE_LEVEL_HIGH>;
532*4882a593Smuzhiyun			clocks = <&pclk>;
533*4882a593Smuzhiyun			clock-names = "apb_pclk";
534*4882a593Smuzhiyun		};
535*4882a593Smuzhiyun
536*4882a593Smuzhiyun		fpga_serial: serial@10009000 {
537*4882a593Smuzhiyun			compatible = "arm,pl011", "arm,primecell";
538*4882a593Smuzhiyun			reg = <0x10009000 0x1000>;
539*4882a593Smuzhiyun			interrupt-parent = <&intc_fpga1176>;
540*4882a593Smuzhiyun			interrupts = <0 6 IRQ_TYPE_LEVEL_HIGH>;
541*4882a593Smuzhiyun			clocks = <&uartclk>, <&pclk>;
542*4882a593Smuzhiyun			clock-names = "uartclk", "apb_pclk";
543*4882a593Smuzhiyun		};
544*4882a593Smuzhiyun
545*4882a593Smuzhiyun		/* This GIC on the board is cascaded off the DevChip GIC */
546*4882a593Smuzhiyun		intc_fpga1176: interrupt-controller@10040000 {
547*4882a593Smuzhiyun			compatible = "arm,arm1176jzf-devchip-gic", "arm,arm11mp-gic";
548*4882a593Smuzhiyun			#interrupt-cells = <3>;
549*4882a593Smuzhiyun			#address-cells = <1>;
550*4882a593Smuzhiyun			interrupt-controller;
551*4882a593Smuzhiyun			reg = <0x10041000 0x1000>,
552*4882a593Smuzhiyun			      <0x10040000 0x100>;
553*4882a593Smuzhiyun			interrupt-parent = <&intc_dc1176>;
554*4882a593Smuzhiyun			interrupts = <0 31 IRQ_TYPE_LEVEL_HIGH>;
555*4882a593Smuzhiyun		};
556*4882a593Smuzhiyun
557*4882a593Smuzhiyun		fpga_gpio0: gpio@10014000 {
558*4882a593Smuzhiyun			compatible = "arm,pl061", "arm,primecell";
559*4882a593Smuzhiyun			reg = <0x10014000 0x1000>;
560*4882a593Smuzhiyun			gpio-controller;
561*4882a593Smuzhiyun			interrupt-parent = <&intc_fpga1176>;
562*4882a593Smuzhiyun			interrupts = <0 8 IRQ_TYPE_LEVEL_HIGH>;
563*4882a593Smuzhiyun			#gpio-cells = <2>;
564*4882a593Smuzhiyun			interrupt-controller;
565*4882a593Smuzhiyun			#interrupt-cells = <2>;
566*4882a593Smuzhiyun			clocks = <&pclk>;
567*4882a593Smuzhiyun			clock-names = "apb_pclk";
568*4882a593Smuzhiyun		};
569*4882a593Smuzhiyun
570*4882a593Smuzhiyun		fpga_gpio1: gpio@10015000 {
571*4882a593Smuzhiyun			compatible = "arm,pl061", "arm,primecell";
572*4882a593Smuzhiyun			reg = <0x10015000 0x1000>;
573*4882a593Smuzhiyun			gpio-controller;
574*4882a593Smuzhiyun			interrupt-parent = <&intc_fpga1176>;
575*4882a593Smuzhiyun			interrupts = <0 9 IRQ_TYPE_LEVEL_HIGH>;
576*4882a593Smuzhiyun			#gpio-cells = <2>;
577*4882a593Smuzhiyun			interrupt-controller;
578*4882a593Smuzhiyun			#interrupt-cells = <2>;
579*4882a593Smuzhiyun			clocks = <&pclk>;
580*4882a593Smuzhiyun			clock-names = "apb_pclk";
581*4882a593Smuzhiyun		};
582*4882a593Smuzhiyun
583*4882a593Smuzhiyun		fpga_rtc: rtc@10017000 {
584*4882a593Smuzhiyun			compatible = "arm,pl031", "arm,primecell";
585*4882a593Smuzhiyun			reg = <0x10017000 0x1000>;
586*4882a593Smuzhiyun			interrupt-parent = <&intc_fpga1176>;
587*4882a593Smuzhiyun			interrupts = <0 25 IRQ_TYPE_LEVEL_HIGH>;
588*4882a593Smuzhiyun			clocks = <&pclk>;
589*4882a593Smuzhiyun			clock-names = "apb_pclk";
590*4882a593Smuzhiyun		};
591*4882a593Smuzhiyun	};
592*4882a593Smuzhiyun};
593