xref: /OK3568_Linux_fs/kernel/arch/arm/boot/dts/arm-realview-pbx.dtsi (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun/*
2*4882a593Smuzhiyun * Copyright 2016 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#include <dt-bindings/interrupt-controller/irq.h>
24*4882a593Smuzhiyun#include <dt-bindings/gpio/gpio.h>
25*4882a593Smuzhiyun
26*4882a593Smuzhiyun/ {
27*4882a593Smuzhiyun	#address-cells = <1>;
28*4882a593Smuzhiyun	#size-cells = <1>;
29*4882a593Smuzhiyun	compatible = "arm,realview-pbx";
30*4882a593Smuzhiyun
31*4882a593Smuzhiyun	chosen { };
32*4882a593Smuzhiyun
33*4882a593Smuzhiyun	aliases {
34*4882a593Smuzhiyun		serial0 = &serial0;
35*4882a593Smuzhiyun		serial1 = &serial1;
36*4882a593Smuzhiyun		serial2 = &serial2;
37*4882a593Smuzhiyun		serial3 = &serial3;
38*4882a593Smuzhiyun		i2c0 = &i2c0;
39*4882a593Smuzhiyun		i2c1 = &i2c1;
40*4882a593Smuzhiyun	};
41*4882a593Smuzhiyun
42*4882a593Smuzhiyun	memory {
43*4882a593Smuzhiyun		device_type = "memory";
44*4882a593Smuzhiyun		/* 128 MiB memory @ 0x0 */
45*4882a593Smuzhiyun		reg = <0x00000000 0x08000000>;
46*4882a593Smuzhiyun	};
47*4882a593Smuzhiyun
48*4882a593Smuzhiyun	/* The voltage to the MMC card is hardwired at 3.3V */
49*4882a593Smuzhiyun	vmmc: regulator-vmmc {
50*4882a593Smuzhiyun		compatible = "regulator-fixed";
51*4882a593Smuzhiyun		regulator-name = "vmmc";
52*4882a593Smuzhiyun		regulator-min-microvolt = <3300000>;
53*4882a593Smuzhiyun		regulator-max-microvolt = <3300000>;
54*4882a593Smuzhiyun		regulator-boot-on;
55*4882a593Smuzhiyun        };
56*4882a593Smuzhiyun
57*4882a593Smuzhiyun	veth: regulator-veth {
58*4882a593Smuzhiyun		compatible = "regulator-fixed";
59*4882a593Smuzhiyun		regulator-name = "veth";
60*4882a593Smuzhiyun		regulator-min-microvolt = <3300000>;
61*4882a593Smuzhiyun		regulator-max-microvolt = <3300000>;
62*4882a593Smuzhiyun		regulator-boot-on;
63*4882a593Smuzhiyun	};
64*4882a593Smuzhiyun
65*4882a593Smuzhiyun	xtal24mhz: xtal24mhz@24M {
66*4882a593Smuzhiyun		#clock-cells = <0>;
67*4882a593Smuzhiyun		compatible = "fixed-clock";
68*4882a593Smuzhiyun		clock-frequency = <24000000>;
69*4882a593Smuzhiyun	};
70*4882a593Smuzhiyun
71*4882a593Smuzhiyun	refclk32khz: refclk32khz {
72*4882a593Smuzhiyun		#clock-cells = <0>;
73*4882a593Smuzhiyun		compatible = "fixed-clock";
74*4882a593Smuzhiyun		clock-frequency = <32768>;
75*4882a593Smuzhiyun	};
76*4882a593Smuzhiyun
77*4882a593Smuzhiyun	timclk: timclk@1M {
78*4882a593Smuzhiyun		#clock-cells = <0>;
79*4882a593Smuzhiyun		compatible = "fixed-factor-clock";
80*4882a593Smuzhiyun		clock-div = <24>;
81*4882a593Smuzhiyun		clock-mult = <1>;
82*4882a593Smuzhiyun		clocks = <&xtal24mhz>;
83*4882a593Smuzhiyun	};
84*4882a593Smuzhiyun
85*4882a593Smuzhiyun	mclk: mclk@24M {
86*4882a593Smuzhiyun		#clock-cells = <0>;
87*4882a593Smuzhiyun		compatible = "fixed-factor-clock";
88*4882a593Smuzhiyun		clock-div = <1>;
89*4882a593Smuzhiyun		clock-mult = <1>;
90*4882a593Smuzhiyun		clocks = <&xtal24mhz>;
91*4882a593Smuzhiyun	};
92*4882a593Smuzhiyun
93*4882a593Smuzhiyun	kmiclk: kmiclk@24M {
94*4882a593Smuzhiyun		#clock-cells = <0>;
95*4882a593Smuzhiyun		compatible = "fixed-factor-clock";
96*4882a593Smuzhiyun		clock-div = <1>;
97*4882a593Smuzhiyun		clock-mult = <1>;
98*4882a593Smuzhiyun		clocks = <&xtal24mhz>;
99*4882a593Smuzhiyun	};
100*4882a593Smuzhiyun
101*4882a593Smuzhiyun	sspclk: sspclk@24M {
102*4882a593Smuzhiyun		#clock-cells = <0>;
103*4882a593Smuzhiyun		compatible = "fixed-factor-clock";
104*4882a593Smuzhiyun		clock-div = <1>;
105*4882a593Smuzhiyun		clock-mult = <1>;
106*4882a593Smuzhiyun		clocks = <&xtal24mhz>;
107*4882a593Smuzhiyun	};
108*4882a593Smuzhiyun
109*4882a593Smuzhiyun	uartclk: uartclk@24M {
110*4882a593Smuzhiyun		#clock-cells = <0>;
111*4882a593Smuzhiyun		compatible = "fixed-factor-clock";
112*4882a593Smuzhiyun		clock-div = <1>;
113*4882a593Smuzhiyun		clock-mult = <1>;
114*4882a593Smuzhiyun		clocks = <&xtal24mhz>;
115*4882a593Smuzhiyun	};
116*4882a593Smuzhiyun
117*4882a593Smuzhiyun	wdogclk: wdogclk@24M {
118*4882a593Smuzhiyun		#clock-cells = <0>;
119*4882a593Smuzhiyun		compatible = "fixed-factor-clock";
120*4882a593Smuzhiyun		clock-div = <1>;
121*4882a593Smuzhiyun		clock-mult = <1>;
122*4882a593Smuzhiyun		clocks = <&xtal24mhz>;
123*4882a593Smuzhiyun	};
124*4882a593Smuzhiyun
125*4882a593Smuzhiyun	/* FIXME: this actually hangs off the PLL clocks */
126*4882a593Smuzhiyun	pclk: pclk@0 {
127*4882a593Smuzhiyun		#clock-cells = <0>;
128*4882a593Smuzhiyun		compatible = "fixed-clock";
129*4882a593Smuzhiyun		clock-frequency = <0>;
130*4882a593Smuzhiyun	};
131*4882a593Smuzhiyun
132*4882a593Smuzhiyun	flash0@40000000 {
133*4882a593Smuzhiyun		/* 2 * 32MiB NOR Flash memory */
134*4882a593Smuzhiyun		compatible = "arm,versatile-flash", "cfi-flash";
135*4882a593Smuzhiyun		reg = <0x40000000 0x04000000>;
136*4882a593Smuzhiyun		bank-width = <4>;
137*4882a593Smuzhiyun		partitions {
138*4882a593Smuzhiyun			compatible = "arm,arm-firmware-suite";
139*4882a593Smuzhiyun		};
140*4882a593Smuzhiyun	};
141*4882a593Smuzhiyun
142*4882a593Smuzhiyun	flash1@44000000 {
143*4882a593Smuzhiyun		/* 2 * 32MiB NOR Flash memory */
144*4882a593Smuzhiyun		compatible = "arm,versatile-flash", "cfi-flash";
145*4882a593Smuzhiyun		reg = <0x44000000 0x04000000>;
146*4882a593Smuzhiyun		bank-width = <4>;
147*4882a593Smuzhiyun		partitions {
148*4882a593Smuzhiyun			compatible = "arm,arm-firmware-suite";
149*4882a593Smuzhiyun		};
150*4882a593Smuzhiyun	};
151*4882a593Smuzhiyun
152*4882a593Smuzhiyun	/* SMSC 9118 ethernet with PHY and EEPROM */
153*4882a593Smuzhiyun	ethernet: ethernet@4e000000 {
154*4882a593Smuzhiyun		compatible = "smsc,lan9118", "smsc,lan9115";
155*4882a593Smuzhiyun		reg = <0x4e000000 0x10000>;
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: usb@4f000000 {
165*4882a593Smuzhiyun		compatible = "nxp,usb-isp1761";
166*4882a593Smuzhiyun		reg = <0x4f000000 0x20000>;
167*4882a593Smuzhiyun		port1-otg;
168*4882a593Smuzhiyun	};
169*4882a593Smuzhiyun
170*4882a593Smuzhiyun	bridge {
171*4882a593Smuzhiyun		compatible = "ti,ths8134a", "ti,ths8134";
172*4882a593Smuzhiyun		#address-cells = <1>;
173*4882a593Smuzhiyun		#size-cells = <0>;
174*4882a593Smuzhiyun
175*4882a593Smuzhiyun		ports {
176*4882a593Smuzhiyun			#address-cells = <1>;
177*4882a593Smuzhiyun			#size-cells = <0>;
178*4882a593Smuzhiyun
179*4882a593Smuzhiyun			port@0 {
180*4882a593Smuzhiyun				reg = <0>;
181*4882a593Smuzhiyun
182*4882a593Smuzhiyun				vga_bridge_in: endpoint {
183*4882a593Smuzhiyun					remote-endpoint = <&clcd_pads>;
184*4882a593Smuzhiyun				};
185*4882a593Smuzhiyun			};
186*4882a593Smuzhiyun
187*4882a593Smuzhiyun			port@1 {
188*4882a593Smuzhiyun				reg = <1>;
189*4882a593Smuzhiyun
190*4882a593Smuzhiyun				vga_bridge_out: endpoint {
191*4882a593Smuzhiyun					remote-endpoint = <&vga_con_in>;
192*4882a593Smuzhiyun				};
193*4882a593Smuzhiyun			};
194*4882a593Smuzhiyun		};
195*4882a593Smuzhiyun	};
196*4882a593Smuzhiyun
197*4882a593Smuzhiyun	vga {
198*4882a593Smuzhiyun		/*
199*4882a593Smuzhiyun		 * This DDC I2C is connected directly to the DVI portions
200*4882a593Smuzhiyun		 * of the connector, so it's not really working when the
201*4882a593Smuzhiyun		 * monitor is connected to the VGA connector.
202*4882a593Smuzhiyun		 */
203*4882a593Smuzhiyun		compatible = "vga-connector";
204*4882a593Smuzhiyun		ddc-i2c-bus = <&i2c1>;
205*4882a593Smuzhiyun
206*4882a593Smuzhiyun		port {
207*4882a593Smuzhiyun			vga_con_in: endpoint {
208*4882a593Smuzhiyun				remote-endpoint = <&vga_bridge_out>;
209*4882a593Smuzhiyun			};
210*4882a593Smuzhiyun		};
211*4882a593Smuzhiyun	};
212*4882a593Smuzhiyun
213*4882a593Smuzhiyun	soc: soc {
214*4882a593Smuzhiyun		compatible = "arm,realview-pbx-soc", "simple-bus";
215*4882a593Smuzhiyun		#address-cells = <1>;
216*4882a593Smuzhiyun		#size-cells = <1>;
217*4882a593Smuzhiyun		regmap = <&syscon>;
218*4882a593Smuzhiyun		ranges;
219*4882a593Smuzhiyun
220*4882a593Smuzhiyun		syscon: syscon@10000000 {
221*4882a593Smuzhiyun			compatible = "arm,realview-pbx-syscon", "syscon", "simple-mfd";
222*4882a593Smuzhiyun			reg = <0x10000000 0x1000>;
223*4882a593Smuzhiyun
224*4882a593Smuzhiyun			led@08.0 {
225*4882a593Smuzhiyun				compatible = "register-bit-led";
226*4882a593Smuzhiyun				offset = <0x08>;
227*4882a593Smuzhiyun				mask = <0x01>;
228*4882a593Smuzhiyun				label = "versatile:0";
229*4882a593Smuzhiyun				linux,default-trigger = "heartbeat";
230*4882a593Smuzhiyun				default-state = "on";
231*4882a593Smuzhiyun			};
232*4882a593Smuzhiyun			led@08.1 {
233*4882a593Smuzhiyun				compatible = "register-bit-led";
234*4882a593Smuzhiyun				offset = <0x08>;
235*4882a593Smuzhiyun				mask = <0x02>;
236*4882a593Smuzhiyun				label = "versatile:1";
237*4882a593Smuzhiyun				linux,default-trigger = "mmc0";
238*4882a593Smuzhiyun				default-state = "off";
239*4882a593Smuzhiyun			};
240*4882a593Smuzhiyun			led@08.2 {
241*4882a593Smuzhiyun				compatible = "register-bit-led";
242*4882a593Smuzhiyun				offset = <0x08>;
243*4882a593Smuzhiyun				mask = <0x04>;
244*4882a593Smuzhiyun				label = "versatile:2";
245*4882a593Smuzhiyun				linux,default-trigger = "cpu0";
246*4882a593Smuzhiyun				default-state = "off";
247*4882a593Smuzhiyun			};
248*4882a593Smuzhiyun			led@08.3 {
249*4882a593Smuzhiyun				compatible = "register-bit-led";
250*4882a593Smuzhiyun				offset = <0x08>;
251*4882a593Smuzhiyun				mask = <0x08>;
252*4882a593Smuzhiyun				label = "versatile:3";
253*4882a593Smuzhiyun				default-state = "off";
254*4882a593Smuzhiyun			};
255*4882a593Smuzhiyun			led@08.4 {
256*4882a593Smuzhiyun				compatible = "register-bit-led";
257*4882a593Smuzhiyun				offset = <0x08>;
258*4882a593Smuzhiyun				mask = <0x10>;
259*4882a593Smuzhiyun				label = "versatile:4";
260*4882a593Smuzhiyun				default-state = "off";
261*4882a593Smuzhiyun			};
262*4882a593Smuzhiyun			led@08.5 {
263*4882a593Smuzhiyun				compatible = "register-bit-led";
264*4882a593Smuzhiyun				offset = <0x08>;
265*4882a593Smuzhiyun				mask = <0x20>;
266*4882a593Smuzhiyun				label = "versatile:5";
267*4882a593Smuzhiyun				default-state = "off";
268*4882a593Smuzhiyun			};
269*4882a593Smuzhiyun			led@08.6 {
270*4882a593Smuzhiyun				compatible = "register-bit-led";
271*4882a593Smuzhiyun				offset = <0x08>;
272*4882a593Smuzhiyun				mask = <0x40>;
273*4882a593Smuzhiyun				label = "versatile:6";
274*4882a593Smuzhiyun				default-state = "off";
275*4882a593Smuzhiyun			};
276*4882a593Smuzhiyun			led@08.7 {
277*4882a593Smuzhiyun				compatible = "register-bit-led";
278*4882a593Smuzhiyun				offset = <0x08>;
279*4882a593Smuzhiyun				mask = <0x80>;
280*4882a593Smuzhiyun				label = "versatile:7";
281*4882a593Smuzhiyun				default-state = "off";
282*4882a593Smuzhiyun			};
283*4882a593Smuzhiyun			oscclk0: osc0@0c {
284*4882a593Smuzhiyun				compatible = "arm,syscon-icst307";
285*4882a593Smuzhiyun				#clock-cells = <0>;
286*4882a593Smuzhiyun				lock-offset = <0x20>;
287*4882a593Smuzhiyun				vco-offset = <0x0C>;
288*4882a593Smuzhiyun				clocks = <&xtal24mhz>;
289*4882a593Smuzhiyun			};
290*4882a593Smuzhiyun			oscclk1: osc1@10 {
291*4882a593Smuzhiyun				compatible = "arm,syscon-icst307";
292*4882a593Smuzhiyun				#clock-cells = <0>;
293*4882a593Smuzhiyun				lock-offset = <0x20>;
294*4882a593Smuzhiyun				vco-offset = <0x10>;
295*4882a593Smuzhiyun				clocks = <&xtal24mhz>;
296*4882a593Smuzhiyun			};
297*4882a593Smuzhiyun			oscclk2: osc2@14 {
298*4882a593Smuzhiyun				compatible = "arm,syscon-icst307";
299*4882a593Smuzhiyun				#clock-cells = <0>;
300*4882a593Smuzhiyun				lock-offset = <0x20>;
301*4882a593Smuzhiyun				vco-offset = <0x14>;
302*4882a593Smuzhiyun				clocks = <&xtal24mhz>;
303*4882a593Smuzhiyun			};
304*4882a593Smuzhiyun			oscclk3: osc3@18 {
305*4882a593Smuzhiyun				compatible = "arm,syscon-icst307";
306*4882a593Smuzhiyun				#clock-cells = <0>;
307*4882a593Smuzhiyun				lock-offset = <0x20>;
308*4882a593Smuzhiyun				vco-offset = <0x18>;
309*4882a593Smuzhiyun				clocks = <&xtal24mhz>;
310*4882a593Smuzhiyun			};
311*4882a593Smuzhiyun			oscclk4: osc4@1c {
312*4882a593Smuzhiyun				compatible = "arm,syscon-icst307";
313*4882a593Smuzhiyun				#clock-cells = <0>;
314*4882a593Smuzhiyun				lock-offset = <0x20>;
315*4882a593Smuzhiyun				vco-offset = <0x1c>;
316*4882a593Smuzhiyun				clocks = <&xtal24mhz>;
317*4882a593Smuzhiyun			};
318*4882a593Smuzhiyun		};
319*4882a593Smuzhiyun
320*4882a593Smuzhiyun		sp810_syscon0: sysctl@10001000 {
321*4882a593Smuzhiyun			compatible = "arm,sp810", "arm,primecell";
322*4882a593Smuzhiyun			reg = <0x10001000 0x1000>;
323*4882a593Smuzhiyun			clocks = <&refclk32khz>, <&timclk>, <&xtal24mhz>;
324*4882a593Smuzhiyun			clock-names = "refclk", "timclk", "apb_pclk";
325*4882a593Smuzhiyun			#clock-cells = <1>;
326*4882a593Smuzhiyun			clock-output-names = "timerclk0",
327*4882a593Smuzhiyun					     "timerclk1",
328*4882a593Smuzhiyun					     "timerclk2",
329*4882a593Smuzhiyun					     "timerclk3";
330*4882a593Smuzhiyun			assigned-clocks = <&sp810_syscon0 0>,
331*4882a593Smuzhiyun					  <&sp810_syscon0 1>,
332*4882a593Smuzhiyun					  <&sp810_syscon0 2>,
333*4882a593Smuzhiyun					  <&sp810_syscon0 3>;
334*4882a593Smuzhiyun			assigned-clock-parents = <&timclk>,
335*4882a593Smuzhiyun					       <&timclk>,
336*4882a593Smuzhiyun					       <&timclk>,
337*4882a593Smuzhiyun					       <&timclk>;
338*4882a593Smuzhiyun		};
339*4882a593Smuzhiyun
340*4882a593Smuzhiyun		i2c0: i2c@10002000 {
341*4882a593Smuzhiyun			#address-cells = <1>;
342*4882a593Smuzhiyun			#size-cells = <0>;
343*4882a593Smuzhiyun			compatible = "arm,versatile-i2c";
344*4882a593Smuzhiyun			reg = <0x10002000 0x1000>;
345*4882a593Smuzhiyun
346*4882a593Smuzhiyun			rtc@68 {
347*4882a593Smuzhiyun				compatible = "dallas,ds1338";
348*4882a593Smuzhiyun				reg = <0x68>;
349*4882a593Smuzhiyun			};
350*4882a593Smuzhiyun		};
351*4882a593Smuzhiyun
352*4882a593Smuzhiyun		serial0: serial@10009000 {
353*4882a593Smuzhiyun			compatible = "arm,pl011", "arm,primecell";
354*4882a593Smuzhiyun			reg = <0x10009000 0x1000>;
355*4882a593Smuzhiyun			clocks = <&uartclk>, <&pclk>;
356*4882a593Smuzhiyun			clock-names = "uartclk", "apb_pclk";
357*4882a593Smuzhiyun		};
358*4882a593Smuzhiyun
359*4882a593Smuzhiyun		serial1: serial@1000a000 {
360*4882a593Smuzhiyun			compatible = "arm,pl011", "arm,primecell";
361*4882a593Smuzhiyun			reg = <0x1000a000 0x1000>;
362*4882a593Smuzhiyun			clocks = <&uartclk>, <&pclk>;
363*4882a593Smuzhiyun			clock-names = "uartclk", "apb_pclk";
364*4882a593Smuzhiyun		};
365*4882a593Smuzhiyun
366*4882a593Smuzhiyun		serial2: serial@1000b000 {
367*4882a593Smuzhiyun			compatible = "arm,pl011", "arm,primecell";
368*4882a593Smuzhiyun			reg = <0x1000b000 0x1000>;
369*4882a593Smuzhiyun			clocks = <&uartclk>, <&pclk>;
370*4882a593Smuzhiyun			clock-names = "uartclk", "apb_pclk";
371*4882a593Smuzhiyun		};
372*4882a593Smuzhiyun
373*4882a593Smuzhiyun		ssp: spi@1000d000 {
374*4882a593Smuzhiyun			compatible = "arm,pl022", "arm,primecell";
375*4882a593Smuzhiyun			reg = <0x1000d000 0x1000>;
376*4882a593Smuzhiyun			clocks = <&sspclk>, <&pclk>;
377*4882a593Smuzhiyun			clock-names = "SSPCLK", "apb_pclk";
378*4882a593Smuzhiyun		};
379*4882a593Smuzhiyun
380*4882a593Smuzhiyun		wdog0: watchdog@1000f000 {
381*4882a593Smuzhiyun			compatible = "arm,sp805", "arm,primecell";
382*4882a593Smuzhiyun			reg = <0x1000f000 0x1000>;
383*4882a593Smuzhiyun			clocks = <&wdogclk>, <&pclk>;
384*4882a593Smuzhiyun			clock-names = "wdog_clk", "apb_pclk";
385*4882a593Smuzhiyun			status = "disabled";
386*4882a593Smuzhiyun		};
387*4882a593Smuzhiyun
388*4882a593Smuzhiyun		wdog1: watchdog@10010000 {
389*4882a593Smuzhiyun			compatible = "arm,sp805", "arm,primecell";
390*4882a593Smuzhiyun			reg = <0x10010000 0x1000>;
391*4882a593Smuzhiyun			clocks = <&wdogclk>, <&pclk>;
392*4882a593Smuzhiyun			clock-names = "wdog_clk", "apb_pclk";
393*4882a593Smuzhiyun			status = "disabled";
394*4882a593Smuzhiyun		};
395*4882a593Smuzhiyun
396*4882a593Smuzhiyun		timer01: timer@10011000 {
397*4882a593Smuzhiyun			compatible = "arm,sp804", "arm,primecell";
398*4882a593Smuzhiyun			reg = <0x10011000 0x1000>;
399*4882a593Smuzhiyun			clocks = <&sp810_syscon0 0>,
400*4882a593Smuzhiyun			         <&sp810_syscon0 1>,
401*4882a593Smuzhiyun				 <&pclk>;
402*4882a593Smuzhiyun			clock-names = "timerclk0",
403*4882a593Smuzhiyun				    "timerclk1",
404*4882a593Smuzhiyun				    "apb_pclk";
405*4882a593Smuzhiyun		};
406*4882a593Smuzhiyun
407*4882a593Smuzhiyun		timer23: timer@10012000 {
408*4882a593Smuzhiyun			compatible = "arm,sp804", "arm,primecell";
409*4882a593Smuzhiyun			reg = <0x10012000 0x1000>;
410*4882a593Smuzhiyun			clocks = <&sp810_syscon0 2>,
411*4882a593Smuzhiyun			         <&sp810_syscon0 3>,
412*4882a593Smuzhiyun				 <&pclk>;
413*4882a593Smuzhiyun			clock-names = "timerclk2",
414*4882a593Smuzhiyun				    "timerclk3",
415*4882a593Smuzhiyun				    "apb_pclk";
416*4882a593Smuzhiyun		};
417*4882a593Smuzhiyun
418*4882a593Smuzhiyun		gpio0: gpio@10013000 {
419*4882a593Smuzhiyun			compatible = "arm,pl061", "arm,primecell";
420*4882a593Smuzhiyun			reg = <0x10013000 0x1000>;
421*4882a593Smuzhiyun			gpio-controller;
422*4882a593Smuzhiyun			#gpio-cells = <2>;
423*4882a593Smuzhiyun			interrupt-controller;
424*4882a593Smuzhiyun			#interrupt-cells = <2>;
425*4882a593Smuzhiyun			clocks = <&pclk>;
426*4882a593Smuzhiyun			clock-names = "apb_pclk";
427*4882a593Smuzhiyun		};
428*4882a593Smuzhiyun
429*4882a593Smuzhiyun		gpio1: gpio@10014000 {
430*4882a593Smuzhiyun			compatible = "arm,pl061", "arm,primecell";
431*4882a593Smuzhiyun			reg = <0x10014000 0x1000>;
432*4882a593Smuzhiyun			gpio-controller;
433*4882a593Smuzhiyun			#gpio-cells = <2>;
434*4882a593Smuzhiyun			interrupt-controller;
435*4882a593Smuzhiyun			#interrupt-cells = <2>;
436*4882a593Smuzhiyun			clocks = <&pclk>;
437*4882a593Smuzhiyun			clock-names = "apb_pclk";
438*4882a593Smuzhiyun		};
439*4882a593Smuzhiyun
440*4882a593Smuzhiyun		gpio2: gpio@10015000 {
441*4882a593Smuzhiyun			compatible = "arm,pl061", "arm,primecell";
442*4882a593Smuzhiyun			reg = <0x10015000 0x1000>;
443*4882a593Smuzhiyun			gpio-controller;
444*4882a593Smuzhiyun			#gpio-cells = <2>;
445*4882a593Smuzhiyun			interrupt-controller;
446*4882a593Smuzhiyun			#interrupt-cells = <2>;
447*4882a593Smuzhiyun			clocks = <&pclk>;
448*4882a593Smuzhiyun			clock-names = "apb_pclk";
449*4882a593Smuzhiyun		};
450*4882a593Smuzhiyun
451*4882a593Smuzhiyun		i2c1: i2c@10016000 {
452*4882a593Smuzhiyun			#address-cells = <1>;
453*4882a593Smuzhiyun			#size-cells = <0>;
454*4882a593Smuzhiyun			compatible = "arm,versatile-i2c";
455*4882a593Smuzhiyun			reg = <0x10016000 0x1000>;
456*4882a593Smuzhiyun		};
457*4882a593Smuzhiyun
458*4882a593Smuzhiyun		rtc: rtc@10017000 {
459*4882a593Smuzhiyun			compatible = "arm,pl031", "arm,primecell";
460*4882a593Smuzhiyun			reg = <0x10017000 0x1000>;
461*4882a593Smuzhiyun			clocks = <&pclk>;
462*4882a593Smuzhiyun			clock-names = "apb_pclk";
463*4882a593Smuzhiyun		};
464*4882a593Smuzhiyun
465*4882a593Smuzhiyun		timer45: timer@10018000 {
466*4882a593Smuzhiyun			compatible = "arm,sp804", "arm,primecell";
467*4882a593Smuzhiyun			reg = <0x10018000 0x1000>;
468*4882a593Smuzhiyun			clocks = <&timclk>, <&timclk>, <&pclk>;
469*4882a593Smuzhiyun			clock-names = "timerclk4", "timerclk5", "apb_pclk";
470*4882a593Smuzhiyun		};
471*4882a593Smuzhiyun
472*4882a593Smuzhiyun		timer67: timer@10019000 {
473*4882a593Smuzhiyun			compatible = "arm,sp804", "arm,primecell";
474*4882a593Smuzhiyun			reg = <0x10019000 0x1000>;
475*4882a593Smuzhiyun			clocks = <&timclk>, <&timclk>, <&pclk>;
476*4882a593Smuzhiyun			clock-names = "timerclk6", "timerclk7", "apb_pclk";
477*4882a593Smuzhiyun		};
478*4882a593Smuzhiyun
479*4882a593Smuzhiyun		sp810_syscon1: sysctl@1001a000 {
480*4882a593Smuzhiyun			compatible = "arm,sp810", "arm,primecell";
481*4882a593Smuzhiyun			reg = <0x1001a000 0x1000>;
482*4882a593Smuzhiyun			clocks = <&refclk32khz>, <&timclk>, <&xtal24mhz>;
483*4882a593Smuzhiyun			clock-names = "refclk", "timclk", "apb_pclk";
484*4882a593Smuzhiyun			#clock-cells = <1>;
485*4882a593Smuzhiyun			clock-output-names = "timerclk4",
486*4882a593Smuzhiyun					     "timerclk5",
487*4882a593Smuzhiyun					     "timerclk6",
488*4882a593Smuzhiyun					     "timerclk7";
489*4882a593Smuzhiyun			assigned-clocks = <&sp810_syscon1 0>,
490*4882a593Smuzhiyun					  <&sp810_syscon1 1>,
491*4882a593Smuzhiyun					  <&sp810_syscon1 2>,
492*4882a593Smuzhiyun					  <&sp810_syscon1 3>;
493*4882a593Smuzhiyun			assigned-clock-parents = <&timclk>,
494*4882a593Smuzhiyun					       <&timclk>,
495*4882a593Smuzhiyun					       <&timclk>,
496*4882a593Smuzhiyun					       <&timclk>;
497*4882a593Smuzhiyun		};
498*4882a593Smuzhiyun	};
499*4882a593Smuzhiyun
500*4882a593Smuzhiyun
501*4882a593Smuzhiyun	/* These peripherals are inside the FPGA */
502*4882a593Smuzhiyun	fpga {
503*4882a593Smuzhiyun		#address-cells = <1>;
504*4882a593Smuzhiyun		#size-cells = <1>;
505*4882a593Smuzhiyun		compatible = "simple-bus";
506*4882a593Smuzhiyun		ranges;
507*4882a593Smuzhiyun
508*4882a593Smuzhiyun		aaci: aaci@10004000 {
509*4882a593Smuzhiyun			compatible = "arm,pl041", "arm,primecell";
510*4882a593Smuzhiyun			reg = <0x10004000 0x1000>;
511*4882a593Smuzhiyun			clocks = <&pclk>;
512*4882a593Smuzhiyun			clock-names = "apb_pclk";
513*4882a593Smuzhiyun		};
514*4882a593Smuzhiyun
515*4882a593Smuzhiyun		mmc: mmcsd@10005000 {
516*4882a593Smuzhiyun			compatible = "arm,pl18x", "arm,primecell";
517*4882a593Smuzhiyun			reg = <0x10005000 0x1000>;
518*4882a593Smuzhiyun
519*4882a593Smuzhiyun			/* Due to frequent FIFO overruns, use just 500 kHz */
520*4882a593Smuzhiyun			max-frequency = <500000>;
521*4882a593Smuzhiyun			bus-width = <4>;
522*4882a593Smuzhiyun			cap-sd-highspeed;
523*4882a593Smuzhiyun			cap-mmc-highspeed;
524*4882a593Smuzhiyun			clocks = <&mclk>, <&pclk>;
525*4882a593Smuzhiyun			clock-names = "mclk", "apb_pclk";
526*4882a593Smuzhiyun			vmmc-supply = <&vmmc>;
527*4882a593Smuzhiyun			cd-gpios = <&gpio2 0 GPIO_ACTIVE_LOW>;
528*4882a593Smuzhiyun			wp-gpios = <&gpio2 1 GPIO_ACTIVE_HIGH>;
529*4882a593Smuzhiyun		};
530*4882a593Smuzhiyun
531*4882a593Smuzhiyun		kmi0: kmi@10006000 {
532*4882a593Smuzhiyun			compatible = "arm,pl050", "arm,primecell";
533*4882a593Smuzhiyun			reg = <0x10006000 0x1000>;
534*4882a593Smuzhiyun			clocks = <&kmiclk>, <&pclk>;
535*4882a593Smuzhiyun			clock-names = "KMIREFCLK", "apb_pclk";
536*4882a593Smuzhiyun		};
537*4882a593Smuzhiyun
538*4882a593Smuzhiyun		kmi1: kmi@10007000 {
539*4882a593Smuzhiyun			compatible = "arm,pl050", "arm,primecell";
540*4882a593Smuzhiyun			reg = <0x10007000 0x1000>;
541*4882a593Smuzhiyun			clocks = <&kmiclk>, <&pclk>;
542*4882a593Smuzhiyun			clock-names = "KMIREFCLK", "apb_pclk";
543*4882a593Smuzhiyun		};
544*4882a593Smuzhiyun
545*4882a593Smuzhiyun		serial3: serial@1000c000 {
546*4882a593Smuzhiyun			compatible = "arm,pl011", "arm,primecell";
547*4882a593Smuzhiyun			reg = <0x1000c000 0x1000>;
548*4882a593Smuzhiyun			clocks = <&uartclk>, <&pclk>;
549*4882a593Smuzhiyun			clock-names = "uartclk", "apb_pclk";
550*4882a593Smuzhiyun		};
551*4882a593Smuzhiyun	};
552*4882a593Smuzhiyun
553*4882a593Smuzhiyun	/* These peripherals are inside the NEC ISSP */
554*4882a593Smuzhiyun	issp {
555*4882a593Smuzhiyun		#address-cells = <1>;
556*4882a593Smuzhiyun		#size-cells = <1>;
557*4882a593Smuzhiyun		compatible = "simple-bus";
558*4882a593Smuzhiyun		ranges;
559*4882a593Smuzhiyun
560*4882a593Smuzhiyun		clcd: clcd@10020000 {
561*4882a593Smuzhiyun			compatible = "arm,pl111", "arm,primecell";
562*4882a593Smuzhiyun			reg = <0x10020000 0x1000>;
563*4882a593Smuzhiyun			interrupt-names = "combined";
564*4882a593Smuzhiyun			clocks = <&oscclk4>, <&pclk>;
565*4882a593Smuzhiyun			clock-names = "clcdclk", "apb_pclk";
566*4882a593Smuzhiyun			/* 1024x768 16bpp @65MHz works fine */
567*4882a593Smuzhiyun			max-memory-bandwidth = <95000000>;
568*4882a593Smuzhiyun
569*4882a593Smuzhiyun			port {
570*4882a593Smuzhiyun				clcd_pads: endpoint {
571*4882a593Smuzhiyun					remote-endpoint = <&vga_bridge_in>;
572*4882a593Smuzhiyun					arm,pl11x,tft-r0g0b0-pads = <0 8 16>;
573*4882a593Smuzhiyun				};
574*4882a593Smuzhiyun			};
575*4882a593Smuzhiyun		};
576*4882a593Smuzhiyun	};
577*4882a593Smuzhiyun};
578