blob: 79f7cc2412824fb680cdec15fad5af8ae406a3c8 [file] [log] [blame]
Greg Kroah-Hartmanb2441312017-11-01 15:07:57 +01001// SPDX-License-Identifier: GPL-2.0
Grant Likely3ba72222011-07-26 03:19:06 -06002/dts-v1/;
Grant Likely3ba72222011-07-26 03:19:06 -06003
4/ {
5 model = "ARM Versatile AB";
6 compatible = "arm,versatile-ab";
7 #address-cells = <1>;
8 #size-cells = <1>;
9 interrupt-parent = <&vic>;
10
11 aliases {
12 serial0 = &uart0;
13 serial1 = &uart1;
14 serial2 = &uart2;
15 i2c0 = &i2c0;
16 };
17
Grant Likely00388212014-03-27 18:35:32 -070018 chosen {
19 stdout-path = &uart0;
20 };
21
Grant Likely3ba72222011-07-26 03:19:06 -060022 memory {
Rob Herringabe60a32019-01-09 10:26:14 -060023 device_type = "memory";
Grant Likely3ba72222011-07-26 03:19:06 -060024 reg = <0x0 0x08000000>;
25 };
26
Rob Herring2e452782014-03-01 22:22:53 -060027 xtal24mhz: xtal24mhz@24M {
28 #clock-cells = <0>;
29 compatible = "fixed-clock";
30 clock-frequency = <24000000>;
31 };
32
Linus Walleije65857a2018-01-24 16:09:24 +010033 bridge {
34 compatible = "ti,ths8134b", "ti,ths8134";
35 #address-cells = <1>;
36 #size-cells = <0>;
37
38 ports {
39 #address-cells = <1>;
40 #size-cells = <0>;
41
42 port@0 {
43 reg = <0>;
44
45 vga_bridge_in: endpoint {
46 remote-endpoint = <&clcd_pads_vga_dac>;
47 };
48 };
49
50 port@1 {
51 reg = <1>;
52
53 vga_bridge_out: endpoint {
54 remote-endpoint = <&vga_con_in>;
55 };
56 };
57 };
58 };
59
60 vga {
61 compatible = "vga-connector";
62
63 port {
64 vga_con_in: endpoint {
65 remote-endpoint = <&vga_bridge_out>;
66 };
67 };
68 };
69
Rob Herring2e452782014-03-01 22:22:53 -060070 core-module@10000000 {
Linus Walleij07ebfa52016-01-05 15:02:08 +010071 compatible = "arm,core-module-versatile", "syscon", "simple-mfd";
Rob Herring2e452782014-03-01 22:22:53 -060072 reg = <0x10000000 0x200>;
Rob Herring25b892b2021-10-25 01:20:03 +020073 ranges = <0x0 0x10000000 0x200>;
74 #address-cells = <1>;
75 #size-cells = <1>;
Rob Herring2e452782014-03-01 22:22:53 -060076
Rob Herring25b892b2021-10-25 01:20:03 +020077 led@8,0 {
Linus Walleij07ebfa52016-01-05 15:02:08 +010078 compatible = "register-bit-led";
Rob Herring25b892b2021-10-25 01:20:03 +020079 reg = <0x08 0x04>;
Linus Walleij07ebfa52016-01-05 15:02:08 +010080 offset = <0x08>;
81 mask = <0x01>;
82 label = "versatile:0";
83 linux,default-trigger = "heartbeat";
84 default-state = "on";
85 };
Rob Herring25b892b2021-10-25 01:20:03 +020086 led@8,1 {
Linus Walleij07ebfa52016-01-05 15:02:08 +010087 compatible = "register-bit-led";
Rob Herring25b892b2021-10-25 01:20:03 +020088 reg = <0x08 0x04>;
Linus Walleij07ebfa52016-01-05 15:02:08 +010089 offset = <0x08>;
90 mask = <0x02>;
91 label = "versatile:1";
92 linux,default-trigger = "mmc0";
93 default-state = "off";
94 };
Rob Herring25b892b2021-10-25 01:20:03 +020095 led@8,2 {
Linus Walleij07ebfa52016-01-05 15:02:08 +010096 compatible = "register-bit-led";
Rob Herring25b892b2021-10-25 01:20:03 +020097 reg = <0x08 0x04>;
Linus Walleij07ebfa52016-01-05 15:02:08 +010098 offset = <0x08>;
99 mask = <0x04>;
100 label = "versatile:2";
101 linux,default-trigger = "cpu0";
102 default-state = "off";
103 };
Rob Herring25b892b2021-10-25 01:20:03 +0200104 led@8,3 {
Linus Walleij07ebfa52016-01-05 15:02:08 +0100105 compatible = "register-bit-led";
Rob Herring25b892b2021-10-25 01:20:03 +0200106 reg = <0x08 0x04>;
Linus Walleij07ebfa52016-01-05 15:02:08 +0100107 offset = <0x08>;
108 mask = <0x08>;
109 label = "versatile:3";
110 default-state = "off";
111 };
Rob Herring25b892b2021-10-25 01:20:03 +0200112 led@8,4 {
Linus Walleij07ebfa52016-01-05 15:02:08 +0100113 compatible = "register-bit-led";
Rob Herring25b892b2021-10-25 01:20:03 +0200114 reg = <0x08 0x04>;
Linus Walleij07ebfa52016-01-05 15:02:08 +0100115 offset = <0x08>;
116 mask = <0x10>;
117 label = "versatile:4";
118 default-state = "off";
119 };
Rob Herring25b892b2021-10-25 01:20:03 +0200120 led@8,5 {
Linus Walleij07ebfa52016-01-05 15:02:08 +0100121 compatible = "register-bit-led";
Rob Herring25b892b2021-10-25 01:20:03 +0200122 reg = <0x08 0x04>;
Linus Walleij07ebfa52016-01-05 15:02:08 +0100123 offset = <0x08>;
124 mask = <0x20>;
125 label = "versatile:5";
126 default-state = "off";
127 };
Rob Herring25b892b2021-10-25 01:20:03 +0200128 led@8,6 {
Linus Walleij07ebfa52016-01-05 15:02:08 +0100129 compatible = "register-bit-led";
Rob Herring25b892b2021-10-25 01:20:03 +0200130 reg = <0x08 0x04>;
Linus Walleij07ebfa52016-01-05 15:02:08 +0100131 offset = <0x08>;
132 mask = <0x40>;
133 label = "versatile:6";
134 default-state = "off";
135 };
Rob Herring25b892b2021-10-25 01:20:03 +0200136 led@8,7 {
Linus Walleij07ebfa52016-01-05 15:02:08 +0100137 compatible = "register-bit-led";
Rob Herring25b892b2021-10-25 01:20:03 +0200138 reg = <0x08 0x04>;
Linus Walleij07ebfa52016-01-05 15:02:08 +0100139 offset = <0x08>;
140 mask = <0x80>;
141 label = "versatile:7";
142 default-state = "off";
143 };
144
Rob Herring2e452782014-03-01 22:22:53 -0600145 /* OSC1 on AB, OSC4 on PB */
146 osc1: cm_aux_osc@24M {
147 #clock-cells = <0>;
148 compatible = "arm,versatile-cm-auxosc";
149 clocks = <&xtal24mhz>;
150 };
151
152 /* The timer clock is the 24 MHz oscillator divided to 1MHz */
153 timclk: timclk@1M {
154 #clock-cells = <0>;
155 compatible = "fixed-factor-clock";
156 clock-div = <24>;
157 clock-mult = <1>;
158 clocks = <&xtal24mhz>;
159 };
160
161 pclk: pclk@24M {
162 #clock-cells = <0>;
163 compatible = "fixed-factor-clock";
164 clock-div = <1>;
165 clock-mult = <1>;
166 clocks = <&xtal24mhz>;
167 };
168 };
169
Grant Likely3ba72222011-07-26 03:19:06 -0600170 flash@34000000 {
Linus Walleij7bb73fd2016-01-26 10:55:32 +0100171 /* 64 MiB NOR flash in non-interleaved chips */
172 compatible = "arm,versatile-flash", "cfi-flash";
173 reg = <0x34000000 0x04000000>;
Grant Likely3ba72222011-07-26 03:19:06 -0600174 bank-width = <4>;
Linus Walleij10d8b9d2019-01-23 14:25:25 +0100175 partitions {
176 compatible = "arm,arm-firmware-suite";
177 };
Grant Likely3ba72222011-07-26 03:19:06 -0600178 };
179
180 i2c0: i2c@10002000 {
181 #address-cells = <1>;
182 #size-cells = <0>;
183 compatible = "arm,versatile-i2c";
184 reg = <0x10002000 0x1000>;
185
186 rtc@68 {
187 compatible = "dallas,ds1338";
188 reg = <0x68>;
189 };
190 };
191
192 net@10010000 {
193 compatible = "smsc,lan91c111";
194 reg = <0x10010000 0x10000>;
195 interrupts = <25>;
196 };
197
198 lcd@10008000 {
199 compatible = "arm,versatile-lcd";
200 reg = <0x10008000 0x1000>;
201 };
202
203 amba {
Masahiro Yamada2ef7d5f2016-03-09 13:26:45 +0900204 compatible = "simple-bus";
Grant Likely3ba72222011-07-26 03:19:06 -0600205 #address-cells = <1>;
206 #size-cells = <1>;
207 ranges;
208
Sudeep Holla82a1c672021-07-01 14:21:18 +0100209 vic: interrupt-controller@10140000 {
Grant Likely3ba72222011-07-26 03:19:06 -0600210 compatible = "arm,versatile-vic";
211 interrupt-controller;
212 #interrupt-cells = <1>;
213 reg = <0x10140000 0x1000>;
Rob Herring0ba6c5d2014-03-01 22:22:21 -0600214 valid-mask = <0xffffffff>;
Grant Likely3ba72222011-07-26 03:19:06 -0600215 };
216
Sudeep Holla82a1c672021-07-01 14:21:18 +0100217 sic: interrupt-controller@10003000 {
Grant Likely3ba72222011-07-26 03:19:06 -0600218 compatible = "arm,versatile-sic";
219 interrupt-controller;
220 #interrupt-cells = <1>;
221 reg = <0x10003000 0x1000>;
222 interrupt-parent = <&vic>;
223 interrupts = <31>; /* Cascaded to vic */
Rob Herring0ba6c5d2014-03-01 22:22:21 -0600224 clear-mask = <0xffffffff>;
Linus Walleij20f12752016-01-05 09:59:30 +0100225 /*
226 * Valid interrupt lines mask according to
227 * table 4-36 page 4-50 of ARM DUI 0225D
228 */
229 valid-mask = <0x0760031b>;
Grant Likely3ba72222011-07-26 03:19:06 -0600230 };
231
232 dma@10130000 {
233 compatible = "arm,pl081", "arm,primecell";
234 reg = <0x10130000 0x1000>;
235 interrupts = <17>;
Rob Herring2e452782014-03-01 22:22:53 -0600236 clocks = <&pclk>;
237 clock-names = "apb_pclk";
Grant Likely3ba72222011-07-26 03:19:06 -0600238 };
239
240 uart0: uart@101f1000 {
241 compatible = "arm,pl011", "arm,primecell";
242 reg = <0x101f1000 0x1000>;
243 interrupts = <12>;
Rob Herring2e452782014-03-01 22:22:53 -0600244 clocks = <&xtal24mhz>, <&pclk>;
245 clock-names = "uartclk", "apb_pclk";
Grant Likely3ba72222011-07-26 03:19:06 -0600246 };
247
248 uart1: uart@101f2000 {
249 compatible = "arm,pl011", "arm,primecell";
250 reg = <0x101f2000 0x1000>;
251 interrupts = <13>;
Rob Herring2e452782014-03-01 22:22:53 -0600252 clocks = <&xtal24mhz>, <&pclk>;
253 clock-names = "uartclk", "apb_pclk";
Grant Likely3ba72222011-07-26 03:19:06 -0600254 };
255
256 uart2: uart@101f3000 {
257 compatible = "arm,pl011", "arm,primecell";
258 reg = <0x101f3000 0x1000>;
259 interrupts = <14>;
Rob Herring2e452782014-03-01 22:22:53 -0600260 clocks = <&xtal24mhz>, <&pclk>;
261 clock-names = "uartclk", "apb_pclk";
Grant Likely3ba72222011-07-26 03:19:06 -0600262 };
263
264 smc@10100000 {
265 compatible = "arm,primecell";
266 reg = <0x10100000 0x1000>;
Rob Herring2e452782014-03-01 22:22:53 -0600267 clocks = <&pclk>;
268 clock-names = "apb_pclk";
Grant Likely3ba72222011-07-26 03:19:06 -0600269 };
270
271 mpmc@10110000 {
272 compatible = "arm,primecell";
273 reg = <0x10110000 0x1000>;
Rob Herring2e452782014-03-01 22:22:53 -0600274 clocks = <&pclk>;
275 clock-names = "apb_pclk";
Grant Likely3ba72222011-07-26 03:19:06 -0600276 };
277
278 display@10120000 {
279 compatible = "arm,pl110", "arm,primecell";
280 reg = <0x10120000 0x1000>;
281 interrupts = <16>;
Rob Herring2e452782014-03-01 22:22:53 -0600282 clocks = <&osc1>, <&pclk>;
Linus Walleije65857a2018-01-24 16:09:24 +0100283 clock-names = "clcdclk", "apb_pclk";
284 /* 800x600 16bpp @ 36MHz works fine */
285 max-memory-bandwidth = <54000000>;
286
287 /*
288 * This port is routed through a PLD (Programmable
289 * Logic Device) that routes the output from the CLCD
290 * (after transformations) to the VGA DAC and also an
291 * external panel connector. The PLD is essential for
292 * supporting RGB565/BGR565.
293 *
294 * The signals from the port thus reaches two endpoints.
295 * The PLD is managed through a few special bits in the
296 * FPGA "sysreg".
297 *
298 * This arrangement can be clearly seen in
299 * ARM DUI 0225D, page 3-41, figure 3-19.
300 */
301 port@0 {
302 #address-cells = <1>;
303 #size-cells = <0>;
304
305 clcd_pads_panel: endpoint@0 {
306 reg = <0>;
307 remote-endpoint = <&panel_in>;
308 arm,pl11x,tft-r0g0b0-pads = <0 8 16>;
309 };
310 clcd_pads_vga_dac: endpoint@1 {
311 reg = <1>;
312 remote-endpoint = <&vga_bridge_in>;
313 arm,pl11x,tft-r0g0b0-pads = <0 8 16>;
314 };
315 };
Grant Likely3ba72222011-07-26 03:19:06 -0600316 };
317
318 sctl@101e0000 {
319 compatible = "arm,primecell";
320 reg = <0x101e0000 0x1000>;
Rob Herring2e452782014-03-01 22:22:53 -0600321 clocks = <&pclk>;
322 clock-names = "apb_pclk";
Grant Likely3ba72222011-07-26 03:19:06 -0600323 };
324
325 watchdog@101e1000 {
326 compatible = "arm,primecell";
327 reg = <0x101e1000 0x1000>;
328 interrupts = <0>;
Rob Herring2e452782014-03-01 22:22:53 -0600329 clocks = <&pclk>;
330 clock-names = "apb_pclk";
Grant Likely3ba72222011-07-26 03:19:06 -0600331 };
332
Rob Herring818270d2013-03-13 17:07:44 -0500333 timer@101e2000 {
334 compatible = "arm,sp804", "arm,primecell";
335 reg = <0x101e2000 0x1000>;
336 interrupts = <4>;
Rob Herring2e452782014-03-01 22:22:53 -0600337 clocks = <&timclk>, <&timclk>, <&pclk>;
338 clock-names = "timer0", "timer1", "apb_pclk";
Rob Herring818270d2013-03-13 17:07:44 -0500339 };
340
341 timer@101e3000 {
342 compatible = "arm,sp804", "arm,primecell";
343 reg = <0x101e3000 0x1000>;
344 interrupts = <5>;
Rob Herring2e452782014-03-01 22:22:53 -0600345 clocks = <&timclk>, <&timclk>, <&pclk>;
346 clock-names = "timer0", "timer1", "apb_pclk";
Rob Herring818270d2013-03-13 17:07:44 -0500347 };
348
Grant Likely3ba72222011-07-26 03:19:06 -0600349 gpio0: gpio@101e4000 {
350 compatible = "arm,pl061", "arm,primecell";
351 reg = <0x101e4000 0x1000>;
352 gpio-controller;
353 interrupts = <6>;
354 #gpio-cells = <2>;
355 interrupt-controller;
356 #interrupt-cells = <2>;
Rob Herring2e452782014-03-01 22:22:53 -0600357 clocks = <&pclk>;
358 clock-names = "apb_pclk";
Grant Likely3ba72222011-07-26 03:19:06 -0600359 };
360
361 gpio1: gpio@101e5000 {
362 compatible = "arm,pl061", "arm,primecell";
363 reg = <0x101e5000 0x1000>;
364 interrupts = <7>;
365 gpio-controller;
366 #gpio-cells = <2>;
367 interrupt-controller;
368 #interrupt-cells = <2>;
Rob Herring2e452782014-03-01 22:22:53 -0600369 clocks = <&pclk>;
370 clock-names = "apb_pclk";
Grant Likely3ba72222011-07-26 03:19:06 -0600371 };
372
373 rtc@101e8000 {
374 compatible = "arm,pl030", "arm,primecell";
375 reg = <0x101e8000 0x1000>;
376 interrupts = <10>;
Rob Herring2e452782014-03-01 22:22:53 -0600377 clocks = <&pclk>;
378 clock-names = "apb_pclk";
Grant Likely3ba72222011-07-26 03:19:06 -0600379 };
380
381 sci@101f0000 {
382 compatible = "arm,primecell";
383 reg = <0x101f0000 0x1000>;
384 interrupts = <15>;
Rob Herring2e452782014-03-01 22:22:53 -0600385 clocks = <&pclk>;
386 clock-names = "apb_pclk";
Grant Likely3ba72222011-07-26 03:19:06 -0600387 };
388
Rob Herring016add12018-09-13 13:12:26 -0500389 spi@101f4000 {
Grant Likely3ba72222011-07-26 03:19:06 -0600390 compatible = "arm,pl022", "arm,primecell";
391 reg = <0x101f4000 0x1000>;
392 interrupts = <11>;
Rob Herring2e452782014-03-01 22:22:53 -0600393 clocks = <&xtal24mhz>, <&pclk>;
394 clock-names = "SSPCLK", "apb_pclk";
Grant Likely3ba72222011-07-26 03:19:06 -0600395 };
396
397 fpga {
398 compatible = "arm,versatile-fpga", "simple-bus";
399 #address-cells = <1>;
400 #size-cells = <1>;
401 ranges = <0 0x10000000 0x10000>;
402
Rob Herring35a85782015-01-28 11:56:32 -0600403 sysreg@0 {
Linus Walleije65857a2018-01-24 16:09:24 +0100404 compatible = "arm,versatile-sysreg", "syscon", "simple-mfd";
Rob Herring35a85782015-01-28 11:56:32 -0600405 reg = <0x00000 0x1000>;
Linus Walleije65857a2018-01-24 16:09:24 +0100406
407 panel: display@0 {
408 compatible = "arm,versatile-tft-panel";
409
410 port {
411 panel_in: endpoint {
412 remote-endpoint = <&clcd_pads_panel>;
413 };
414 };
415 };
Rob Herring35a85782015-01-28 11:56:32 -0600416 };
417
Grant Likely3ba72222011-07-26 03:19:06 -0600418 aaci@4000 {
419 compatible = "arm,primecell";
420 reg = <0x4000 0x1000>;
421 interrupts = <24>;
Rob Herring2e452782014-03-01 22:22:53 -0600422 clocks = <&pclk>;
423 clock-names = "apb_pclk";
Grant Likely3ba72222011-07-26 03:19:06 -0600424 };
425 mmc@5000 {
Rob Herring04aa49f2014-03-03 02:28:38 -0600426 compatible = "arm,pl180", "arm,primecell";
Linus Walleij20f12752016-01-05 09:59:30 +0100427 reg = <0x5000 0x1000>;
428 interrupts-extended = <&vic 22 &sic 1>;
Rob Herring2e452782014-03-01 22:22:53 -0600429 clocks = <&xtal24mhz>, <&pclk>;
430 clock-names = "mclk", "apb_pclk";
Grant Likely3ba72222011-07-26 03:19:06 -0600431 };
432 kmi@6000 {
433 compatible = "arm,pl050", "arm,primecell";
434 reg = <0x6000 0x1000>;
435 interrupt-parent = <&sic>;
436 interrupts = <3>;
Rob Herring2e452782014-03-01 22:22:53 -0600437 clocks = <&xtal24mhz>, <&pclk>;
438 clock-names = "KMIREFCLK", "apb_pclk";
Grant Likely3ba72222011-07-26 03:19:06 -0600439 };
440 kmi@7000 {
441 compatible = "arm,pl050", "arm,primecell";
442 reg = <0x7000 0x1000>;
443 interrupt-parent = <&sic>;
444 interrupts = <4>;
Rob Herring2e452782014-03-01 22:22:53 -0600445 clocks = <&xtal24mhz>, <&pclk>;
446 clock-names = "KMIREFCLK", "apb_pclk";
Grant Likely3ba72222011-07-26 03:19:06 -0600447 };
448 };
449 };
450};