]> git.karo-electronics.de Git - karo-tx-linux.git/blob - arch/arm/boot/dts/sun8i-a23.dtsi
284522e1a59189a48789203801e03cb500808edd
[karo-tx-linux.git] / arch / arm / boot / dts / sun8i-a23.dtsi
1 /*
2  * Copyright 2014 Chen-Yu Tsai
3  *
4  * Chen-Yu Tsai <wens@csie.org>
5  *
6  * The code contained herein is licensed under the GNU General Public
7  * License. You may obtain a copy of the GNU General Public License
8  * Version 2 or later at the following locations:
9  *
10  * http://www.opensource.org/licenses/gpl-license.html
11  * http://www.gnu.org/copyleft/gpl.html
12  */
13
14 /include/ "skeleton.dtsi"
15
16 / {
17         interrupt-parent = <&gic>;
18
19         aliases {
20                 serial0 = &uart0;
21                 serial1 = &uart1;
22                 serial2 = &uart2;
23                 serial3 = &uart3;
24                 serial4 = &uart4;
25                 serial5 = &r_uart;
26         };
27
28         cpus {
29                 #address-cells = <1>;
30                 #size-cells = <0>;
31
32                 cpu@0 {
33                         compatible = "arm,cortex-a7";
34                         device_type = "cpu";
35                         reg = <0>;
36                 };
37
38                 cpu@1 {
39                         compatible = "arm,cortex-a7";
40                         device_type = "cpu";
41                         reg = <1>;
42                 };
43         };
44
45         memory {
46                 reg = <0x40000000 0x40000000>;
47         };
48
49         clocks {
50                 #address-cells = <1>;
51                 #size-cells = <1>;
52                 ranges;
53
54                 osc24M: osc24M_clk {
55                         #clock-cells = <0>;
56                         compatible = "fixed-clock";
57                         clock-frequency = <24000000>;
58                         clock-output-names = "osc24M";
59                 };
60
61                 osc32k: osc32k_clk {
62                         #clock-cells = <0>;
63                         compatible = "fixed-clock";
64                         clock-frequency = <32768>;
65                         clock-output-names = "osc32k";
66                 };
67
68                 pll1: clk@01c20000 {
69                         #clock-cells = <0>;
70                         compatible = "allwinner,sun8i-a23-pll1-clk";
71                         reg = <0x01c20000 0x4>;
72                         clocks = <&osc24M>;
73                         clock-output-names = "pll1";
74                 };
75
76                 /* dummy clock until actually implemented */
77                 pll6: pll6_clk {
78                         #clock-cells = <0>;
79                         compatible = "fixed-clock";
80                         clock-frequency = <600000000>;
81                         clock-output-names = "pll6";
82                 };
83
84                 cpu: cpu_clk@01c20050 {
85                         #clock-cells = <0>;
86                         compatible = "allwinner,sun4i-a10-cpu-clk";
87                         reg = <0x01c20050 0x4>;
88
89                         /*
90                          * PLL1 is listed twice here.
91                          * While it looks suspicious, it's actually documented
92                          * that way both in the datasheet and in the code from
93                          * Allwinner.
94                          */
95                         clocks = <&osc32k>, <&osc24M>, <&pll1>, <&pll1>;
96                         clock-output-names = "cpu";
97                 };
98
99                 axi: axi_clk@01c20050 {
100                         #clock-cells = <0>;
101                         compatible = "allwinner,sun8i-a23-axi-clk";
102                         reg = <0x01c20050 0x4>;
103                         clocks = <&cpu>;
104                         clock-output-names = "axi";
105                 };
106
107                 ahb1_mux: ahb1_mux_clk@01c20054 {
108                         #clock-cells = <0>;
109                         compatible = "allwinner,sun6i-a31-ahb1-mux-clk";
110                         reg = <0x01c20054 0x4>;
111                         clocks = <&osc32k>, <&osc24M>, <&axi>, <&pll6>;
112                         clock-output-names = "ahb1_mux";
113                 };
114
115                 ahb1: ahb1_clk@01c20054 {
116                         #clock-cells = <0>;
117                         compatible = "allwinner,sun4i-a10-ahb-clk";
118                         reg = <0x01c20054 0x4>;
119                         clocks = <&ahb1_mux>;
120                         clock-output-names = "ahb1";
121                 };
122
123                 apb1: apb1_clk@01c20054 {
124                         #clock-cells = <0>;
125                         compatible = "allwinner,sun4i-a10-apb0-clk";
126                         reg = <0x01c20054 0x4>;
127                         clocks = <&ahb1>;
128                         clock-output-names = "apb1";
129                 };
130
131                 ahb1_gates: clk@01c20060 {
132                         #clock-cells = <1>;
133                         compatible = "allwinner,sun8i-a23-ahb1-gates-clk";
134                         reg = <0x01c20060 0x8>;
135                         clocks = <&ahb1>;
136                         clock-output-names = "ahb1_mipidsi", "ahb1_dma",
137                                         "ahb1_mmc0", "ahb1_mmc1", "ahb1_mmc2",
138                                         "ahb1_nand", "ahb1_sdram",
139                                         "ahb1_hstimer", "ahb1_spi0",
140                                         "ahb1_spi1", "ahb1_otg", "ahb1_ehci",
141                                         "ahb1_ohci", "ahb1_ve", "ahb1_lcd",
142                                         "ahb1_csi", "ahb1_be",  "ahb1_fe",
143                                         "ahb1_gpu", "ahb1_spinlock",
144                                         "ahb1_drc";
145                 };
146
147                 apb1_gates: clk@01c20068 {
148                         #clock-cells = <1>;
149                         compatible = "allwinner,sun8i-a23-apb1-gates-clk";
150                         reg = <0x01c20068 0x4>;
151                         clocks = <&apb1>;
152                         clock-output-names = "apb1_codec", "apb1_pio",
153                                         "apb1_daudio0", "apb1_daudio1";
154                 };
155
156                 apb2_mux: apb2_mux_clk@01c20058 {
157                         #clock-cells = <0>;
158                         compatible = "allwinner,sun4i-a10-apb1-mux-clk";
159                         reg = <0x01c20058 0x4>;
160                         clocks = <&osc32k>, <&osc24M>, <&pll6>, <&pll6>;
161                         clock-output-names = "apb2_mux";
162                 };
163
164                 apb2: apb2_clk@01c20058 {
165                         #clock-cells = <0>;
166                         compatible = "allwinner,sun6i-a31-apb2-div-clk";
167                         reg = <0x01c20058 0x4>;
168                         clocks = <&apb2_mux>;
169                         clock-output-names = "apb2";
170                 };
171
172                 apb2_gates: clk@01c2006c {
173                         #clock-cells = <1>;
174                         compatible = "allwinner,sun8i-a23-apb2-gates-clk";
175                         reg = <0x01c2006c 0x4>;
176                         clocks = <&apb2>;
177                         clock-output-names = "apb2_i2c0", "apb2_i2c1",
178                                         "apb2_i2c2", "apb2_uart0",
179                                         "apb2_uart1", "apb2_uart2",
180                                         "apb2_uart3", "apb2_uart4";
181                 };
182
183                 mmc0_clk: clk@01c20088 {
184                         #clock-cells = <0>;
185                         compatible = "allwinner,sun4i-a10-mod0-clk";
186                         reg = <0x01c20088 0x4>;
187                         clocks = <&osc24M>, <&pll6>;
188                         clock-output-names = "mmc0";
189                 };
190
191                 mmc1_clk: clk@01c2008c {
192                         #clock-cells = <0>;
193                         compatible = "allwinner,sun4i-a10-mod0-clk";
194                         reg = <0x01c2008c 0x4>;
195                         clocks = <&osc24M>, <&pll6>;
196                         clock-output-names = "mmc1";
197                 };
198
199                 mmc2_clk: clk@01c20090 {
200                         #clock-cells = <0>;
201                         compatible = "allwinner,sun4i-a10-mod0-clk";
202                         reg = <0x01c20090 0x4>;
203                         clocks = <&osc24M>, <&pll6>;
204                         clock-output-names = "mmc2";
205                 };
206         };
207
208         soc@01c00000 {
209                 compatible = "simple-bus";
210                 #address-cells = <1>;
211                 #size-cells = <1>;
212                 ranges;
213
214                 mmc0: mmc@01c0f000 {
215                         compatible = "allwinner,sun5i-a13-mmc";
216                         reg = <0x01c0f000 0x1000>;
217                         clocks = <&ahb1_gates 8>, <&mmc0_clk>;
218                         clock-names = "ahb", "mmc";
219                         resets = <&ahb1_rst 8>;
220                         reset-names = "ahb";
221                         interrupts = <0 60 4>;
222                         status = "disabled";
223                 };
224
225                 mmc1: mmc@01c10000 {
226                         compatible = "allwinner,sun5i-a13-mmc";
227                         reg = <0x01c10000 0x1000>;
228                         clocks = <&ahb1_gates 9>, <&mmc1_clk>;
229                         clock-names = "ahb", "mmc";
230                         resets = <&ahb1_rst 9>;
231                         reset-names = "ahb";
232                         interrupts = <0 61 4>;
233                         status = "disabled";
234                 };
235
236                 mmc2: mmc@01c11000 {
237                         compatible = "allwinner,sun5i-a13-mmc";
238                         reg = <0x01c11000 0x1000>;
239                         clocks = <&ahb1_gates 10>, <&mmc2_clk>;
240                         clock-names = "ahb", "mmc";
241                         resets = <&ahb1_rst 10>;
242                         reset-names = "ahb";
243                         interrupts = <0 62 4>;
244                         status = "disabled";
245                 };
246
247                 pio: pinctrl@01c20800 {
248                         compatible = "allwinner,sun8i-a23-pinctrl";
249                         reg = <0x01c20800 0x400>;
250                         interrupts = <0 11 4>,
251                                      <0 15 4>,
252                                      <0 17 4>;
253                         clocks = <&apb1_gates 5>;
254                         gpio-controller;
255                         interrupt-controller;
256                         #address-cells = <1>;
257                         #size-cells = <0>;
258                         #gpio-cells = <3>;
259
260                         uart0_pins_a: uart0@0 {
261                                 allwinner,pins = "PF2", "PF4";
262                                 allwinner,function = "uart0";
263                                 allwinner,drive = <0>;
264                                 allwinner,pull = <0>;
265                         };
266
267                         mmc0_pins_a: mmc0@0 {
268                                 allwinner,pins = "PF0","PF1","PF2","PF3","PF4","PF5";
269                                 allwinner,function = "mmc0";
270                                 allwinner,drive = <2>;
271                                 allwinner,pull = <0>;
272                         };
273
274                         mmc1_pins_a: mmc1@0 {
275                                 allwinner,pins = "PG0","PG1","PG2","PG3","PG4","PG5";
276                                 allwinner,function = "mmc1";
277                                 allwinner,drive = <2>;
278                                 allwinner,pull = <0>;
279                         };
280                 };
281
282                 ahb1_rst: reset@01c202c0 {
283                         #reset-cells = <1>;
284                         compatible = "allwinner,sun6i-a31-clock-reset";
285                         reg = <0x01c202c0 0xc>;
286                 };
287
288                 apb1_rst: reset@01c202d0 {
289                         #reset-cells = <1>;
290                         compatible = "allwinner,sun6i-a31-clock-reset";
291                         reg = <0x01c202d0 0x4>;
292                 };
293
294                 apb2_rst: reset@01c202d8 {
295                         #reset-cells = <1>;
296                         compatible = "allwinner,sun6i-a31-clock-reset";
297                         reg = <0x01c202d8 0x4>;
298                 };
299
300                 timer@01c20c00 {
301                         compatible = "allwinner,sun4i-a10-timer";
302                         reg = <0x01c20c00 0xa0>;
303                         interrupts = <0 18 4>,
304                                      <0 19 4>;
305                         clocks = <&osc24M>;
306                 };
307
308                 wdt0: watchdog@01c20ca0 {
309                         compatible = "allwinner,sun6i-a31-wdt";
310                         reg = <0x01c20ca0 0x20>;
311                         interrupts = <0 25 4>;
312                 };
313
314                 uart0: serial@01c28000 {
315                         compatible = "snps,dw-apb-uart";
316                         reg = <0x01c28000 0x400>;
317                         interrupts = <0 0 4>;
318                         reg-shift = <2>;
319                         reg-io-width = <4>;
320                         clocks = <&apb2_gates 16>;
321                         resets = <&apb2_rst 16>;
322                         status = "disabled";
323                 };
324
325                 uart1: serial@01c28400 {
326                         compatible = "snps,dw-apb-uart";
327                         reg = <0x01c28400 0x400>;
328                         interrupts = <0 1 4>;
329                         reg-shift = <2>;
330                         reg-io-width = <4>;
331                         clocks = <&apb2_gates 17>;
332                         resets = <&apb2_rst 17>;
333                         status = "disabled";
334                 };
335
336                 uart2: serial@01c28800 {
337                         compatible = "snps,dw-apb-uart";
338                         reg = <0x01c28800 0x400>;
339                         interrupts = <0 2 4>;
340                         reg-shift = <2>;
341                         reg-io-width = <4>;
342                         clocks = <&apb2_gates 18>;
343                         resets = <&apb2_rst 18>;
344                         status = "disabled";
345                 };
346
347                 uart3: serial@01c28c00 {
348                         compatible = "snps,dw-apb-uart";
349                         reg = <0x01c28c00 0x400>;
350                         interrupts = <0 3 4>;
351                         reg-shift = <2>;
352                         reg-io-width = <4>;
353                         clocks = <&apb2_gates 19>;
354                         resets = <&apb2_rst 19>;
355                         status = "disabled";
356                 };
357
358                 uart4: serial@01c29000 {
359                         compatible = "snps,dw-apb-uart";
360                         reg = <0x01c29000 0x400>;
361                         interrupts = <0 4 4>;
362                         reg-shift = <2>;
363                         reg-io-width = <4>;
364                         clocks = <&apb2_gates 20>;
365                         resets = <&apb2_rst 20>;
366                         status = "disabled";
367                 };
368
369                 gic: interrupt-controller@01c81000 {
370                         compatible = "arm,cortex-a7-gic", "arm,cortex-a15-gic";
371                         reg = <0x01c81000 0x1000>,
372                               <0x01c82000 0x1000>,
373                               <0x01c84000 0x2000>,
374                               <0x01c86000 0x2000>;
375                         interrupt-controller;
376                         #interrupt-cells = <3>;
377                         interrupts = <1 9 0xf04>;
378                 };
379
380                 rtc: rtc@01f00000 {
381                         compatible = "allwinner,sun6i-a31-rtc";
382                         reg = <0x01f00000 0x54>;
383                         interrupts = <0 40 4>, <0 41 4>;
384                 };
385
386                 prcm@01f01400 {
387                         compatible = "allwinner,sun8i-a23-prcm";
388                         reg = <0x01f01400 0x200>;
389
390                         ar100: ar100_clk {
391                                 compatible = "fixed-factor-clock";
392                                 #clock-cells = <0>;
393                                 clock-div = <1>;
394                                 clock-mult = <1>;
395                                 clocks = <&osc24M>;
396                                 clock-output-names = "ar100";
397                         };
398
399                         ahb0: ahb0_clk {
400                                 compatible = "fixed-factor-clock";
401                                 #clock-cells = <0>;
402                                 clock-div = <1>;
403                                 clock-mult = <1>;
404                                 clocks = <&ar100>;
405                                 clock-output-names = "ahb0";
406                         };
407
408                         apb0: apb0_clk {
409                                 compatible = "allwinner,sun8i-a23-apb0-clk";
410                                 #clock-cells = <0>;
411                                 clocks = <&ahb0>;
412                                 clock-output-names = "apb0";
413                         };
414
415                         apb0_gates: apb0_gates_clk {
416                                 compatible = "allwinner,sun8i-a23-apb0-gates-clk";
417                                 #clock-cells = <1>;
418                                 clocks = <&apb0>;
419                                 clock-output-names = "apb0_pio", "apb0_timer",
420                                                 "apb0_rsb", "apb0_uart",
421                                                 "apb0_i2c";
422                         };
423
424                         apb0_rst: apb0_rst {
425                                 compatible = "allwinner,sun6i-a31-clock-reset";
426                                 #reset-cells = <1>;
427                         };
428                 };
429
430                 r_uart: serial@01f02800 {
431                         compatible = "snps,dw-apb-uart";
432                         reg = <0x01f02800 0x400>;
433                         interrupts = <0 38 4>;
434                         reg-shift = <2>;
435                         reg-io-width = <4>;
436                         clocks = <&apb0_gates 4>;
437                         resets = <&apb0_rst 4>;
438                         status = "disabled";
439                 };
440
441                 r_pio: pinctrl@01f02c00 {
442                         compatible = "allwinner,sun8i-a23-r-pinctrl";
443                         reg = <0x01f02c00 0x400>;
444                         interrupts = <0 45 4>;
445                         clocks = <&apb0_gates 0>;
446                         resets = <&apb0_rst 0>;
447                         gpio-controller;
448                         interrupt-controller;
449                         #address-cells = <1>;
450                         #size-cells = <0>;
451                         #gpio-cells = <3>;
452
453                         r_uart_pins_a: r_uart@0 {
454                                 allwinner,pins = "PL2", "PL3";
455                                 allwinner,function = "s_uart";
456                                 allwinner,drive = <0>;
457                                 allwinner,pull = <0>;
458                         };
459                 };
460         };
461 };