1/*
2 * Copyright 2015 Vishnu Patekar
3 *
4 * Vishnu Patekar <vishnupatekar0510@gmail.com>
5 *
6 * This file is dual-licensed: you can use it either under the terms
7 * of the GPL or the X11 license, at your option. Note that this dual
8 * licensing only applies to this file, and not this project as a
9 * whole.
10 *
11 *  a) This file is free software; you can redistribute it and/or
12 *     modify it under the terms of the GNU General Public License as
13 *     published by the Free Software Foundation; either version 2 of the
14 *     License, or (at your option) any later version.
15 *
16 *     This file is distributed in the hope that it will be useful,
17 *     but WITHOUT ANY WARRANTY; without even the implied warranty of
18 *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19 *     GNU General Public License for more details.
20 *
21 * Or, alternatively,
22 *
23 *  b) Permission is hereby granted, free of charge, to any person
24 *     obtaining a copy of this software and associated documentation
25 *     files (the "Software"), to deal in the Software without
26 *     restriction, including without limitation the rights to use,
27 *     copy, modify, merge, publish, distribute, sublicense, and/or
28 *     sell copies of the Software, and to permit persons to whom the
29 *     Software is furnished to do so, subject to the following
30 *     conditions:
31 *
32 *     The above copyright notice and this permission notice shall be
33 *     included in all copies or substantial portions of the Software.
34 *
35 *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
36 *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
37 *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
38 *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
39 *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
40 *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
41 *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
42 *     OTHER DEALINGS IN THE SOFTWARE.
43 */
44
45#include <dt-bindings/interrupt-controller/arm-gic.h>
46
47#include <dt-bindings/clock/sun8i-a83t-ccu.h>
48#include <dt-bindings/clock/sun8i-de2.h>
49#include <dt-bindings/clock/sun8i-r-ccu.h>
50#include <dt-bindings/reset/sun8i-a83t-ccu.h>
51#include <dt-bindings/reset/sun8i-de2.h>
52#include <dt-bindings/reset/sun8i-r-ccu.h>
53
54/ {
55	interrupt-parent = <&gic>;
56	#address-cells = <1>;
57	#size-cells = <1>;
58
59	cpus {
60		#address-cells = <1>;
61		#size-cells = <0>;
62
63		cpu0: cpu@0 {
64			compatible = "arm,cortex-a7";
65			device_type = "cpu";
66			clocks = <&ccu CLK_C0CPUX>;
67			operating-points-v2 = <&cpu0_opp_table>;
68			cci-control-port = <&cci_control0>;
69			enable-method = "allwinner,sun8i-a83t-smp";
70			reg = <0>;
71			#cooling-cells = <2>;
72		};
73
74		cpu@1 {
75			compatible = "arm,cortex-a7";
76			device_type = "cpu";
77			clocks = <&ccu CLK_C0CPUX>;
78			operating-points-v2 = <&cpu0_opp_table>;
79			cci-control-port = <&cci_control0>;
80			enable-method = "allwinner,sun8i-a83t-smp";
81			reg = <1>;
82			#cooling-cells = <2>;
83		};
84
85		cpu@2 {
86			compatible = "arm,cortex-a7";
87			device_type = "cpu";
88			clocks = <&ccu CLK_C0CPUX>;
89			operating-points-v2 = <&cpu0_opp_table>;
90			cci-control-port = <&cci_control0>;
91			enable-method = "allwinner,sun8i-a83t-smp";
92			reg = <2>;
93			#cooling-cells = <2>;
94		};
95
96		cpu@3 {
97			compatible = "arm,cortex-a7";
98			device_type = "cpu";
99			clocks = <&ccu CLK_C0CPUX>;
100			operating-points-v2 = <&cpu0_opp_table>;
101			cci-control-port = <&cci_control0>;
102			enable-method = "allwinner,sun8i-a83t-smp";
103			reg = <3>;
104			#cooling-cells = <2>;
105		};
106
107		cpu100: cpu@100 {
108			compatible = "arm,cortex-a7";
109			device_type = "cpu";
110			clocks = <&ccu CLK_C1CPUX>;
111			operating-points-v2 = <&cpu1_opp_table>;
112			cci-control-port = <&cci_control1>;
113			enable-method = "allwinner,sun8i-a83t-smp";
114			reg = <0x100>;
115			#cooling-cells = <2>;
116		};
117
118		cpu@101 {
119			compatible = "arm,cortex-a7";
120			device_type = "cpu";
121			clocks = <&ccu CLK_C1CPUX>;
122			operating-points-v2 = <&cpu1_opp_table>;
123			cci-control-port = <&cci_control1>;
124			enable-method = "allwinner,sun8i-a83t-smp";
125			reg = <0x101>;
126			#cooling-cells = <2>;
127		};
128
129		cpu@102 {
130			compatible = "arm,cortex-a7";
131			device_type = "cpu";
132			clocks = <&ccu CLK_C1CPUX>;
133			operating-points-v2 = <&cpu1_opp_table>;
134			cci-control-port = <&cci_control1>;
135			enable-method = "allwinner,sun8i-a83t-smp";
136			reg = <0x102>;
137			#cooling-cells = <2>;
138		};
139
140		cpu@103 {
141			compatible = "arm,cortex-a7";
142			device_type = "cpu";
143			clocks = <&ccu CLK_C1CPUX>;
144			operating-points-v2 = <&cpu1_opp_table>;
145			cci-control-port = <&cci_control1>;
146			enable-method = "allwinner,sun8i-a83t-smp";
147			reg = <0x103>;
148			#cooling-cells = <2>;
149		};
150	};
151
152	timer {
153		compatible = "arm,armv7-timer";
154		interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_LOW)>,
155			     <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_LOW)>,
156			     <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_LOW)>,
157			     <GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_LOW)>;
158	};
159
160	clocks {
161		#address-cells = <1>;
162		#size-cells = <1>;
163		ranges;
164
165		/* TODO: PRCM block has a mux for this. */
166		osc24M: osc24M_clk {
167			#clock-cells = <0>;
168			compatible = "fixed-clock";
169			clock-frequency = <24000000>;
170			clock-accuracy = <50000>;
171			clock-output-names = "osc24M";
172		};
173
174		/*
175		 * This is called "internal OSC" in some places.
176		 * It is an internal RC-based oscillator.
177		 * TODO: Its controls are in the PRCM block.
178		 */
179		osc16M: osc16M_clk {
180			#clock-cells = <0>;
181			compatible = "fixed-clock";
182			clock-frequency = <16000000>;
183			clock-output-names = "osc16M";
184		};
185
186		osc16Md512: osc16Md512_clk {
187			#clock-cells = <0>;
188			compatible = "fixed-factor-clock";
189			clock-div = <512>;
190			clock-mult = <1>;
191			clocks = <&osc16M>;
192			clock-output-names = "osc16M-d512";
193		};
194	};
195
196	de: display-engine {
197		compatible = "allwinner,sun8i-a83t-display-engine";
198		allwinner,pipelines = <&mixer0>, <&mixer1>;
199		status = "disabled";
200	};
201
202	cpu0_opp_table: opp_table0 {
203		compatible = "operating-points-v2";
204		opp-shared;
205
206		opp-480000000 {
207			opp-hz = /bits/ 64 <480000000>;
208			opp-microvolt = <840000>;
209			clock-latency-ns = <244144>; /* 8 32k periods */
210		};
211
212		opp-600000000 {
213			opp-hz = /bits/ 64 <600000000>;
214			opp-microvolt = <840000>;
215			clock-latency-ns = <244144>; /* 8 32k periods */
216		};
217
218		opp-720000000 {
219			opp-hz = /bits/ 64 <720000000>;
220			opp-microvolt = <840000>;
221			clock-latency-ns = <244144>; /* 8 32k periods */
222		};
223
224		opp-864000000 {
225			opp-hz = /bits/ 64 <864000000>;
226			opp-microvolt = <840000>;
227			clock-latency-ns = <244144>; /* 8 32k periods */
228		};
229
230		opp-912000000 {
231			opp-hz = /bits/ 64 <912000000>;
232			opp-microvolt = <840000>;
233			clock-latency-ns = <244144>; /* 8 32k periods */
234		};
235
236		opp-1008000000 {
237			opp-hz = /bits/ 64 <1008000000>;
238			opp-microvolt = <840000>;
239			clock-latency-ns = <244144>; /* 8 32k periods */
240		};
241
242		opp-1128000000 {
243			opp-hz = /bits/ 64 <1128000000>;
244			opp-microvolt = <840000>;
245			clock-latency-ns = <244144>; /* 8 32k periods */
246		};
247
248		opp-1200000000 {
249			opp-hz = /bits/ 64 <1200000000>;
250			opp-microvolt = <840000>;
251			clock-latency-ns = <244144>; /* 8 32k periods */
252		};
253	};
254
255	cpu1_opp_table: opp_table1 {
256		compatible = "operating-points-v2";
257		opp-shared;
258
259		opp-480000000 {
260			opp-hz = /bits/ 64 <480000000>;
261			opp-microvolt = <840000>;
262			clock-latency-ns = <244144>; /* 8 32k periods */
263		};
264
265		opp-600000000 {
266			opp-hz = /bits/ 64 <600000000>;
267			opp-microvolt = <840000>;
268			clock-latency-ns = <244144>; /* 8 32k periods */
269		};
270
271		opp-720000000 {
272			opp-hz = /bits/ 64 <720000000>;
273			opp-microvolt = <840000>;
274			clock-latency-ns = <244144>; /* 8 32k periods */
275		};
276
277		opp-864000000 {
278			opp-hz = /bits/ 64 <864000000>;
279			opp-microvolt = <840000>;
280			clock-latency-ns = <244144>; /* 8 32k periods */
281		};
282
283		opp-912000000 {
284			opp-hz = /bits/ 64 <912000000>;
285			opp-microvolt = <840000>;
286			clock-latency-ns = <244144>; /* 8 32k periods */
287		};
288
289		opp-1008000000 {
290			opp-hz = /bits/ 64 <1008000000>;
291			opp-microvolt = <840000>;
292			clock-latency-ns = <244144>; /* 8 32k periods */
293		};
294
295		opp-1128000000 {
296			opp-hz = /bits/ 64 <1128000000>;
297			opp-microvolt = <840000>;
298			clock-latency-ns = <244144>; /* 8 32k periods */
299		};
300
301		opp-1200000000 {
302			opp-hz = /bits/ 64 <1200000000>;
303			opp-microvolt = <840000>;
304			clock-latency-ns = <244144>; /* 8 32k periods */
305		};
306	};
307
308	soc {
309		compatible = "simple-bus";
310		#address-cells = <1>;
311		#size-cells = <1>;
312		ranges;
313
314		display_clocks: clock@1000000 {
315			compatible = "allwinner,sun8i-a83t-de2-clk";
316			reg = <0x01000000 0x100000>;
317			clocks = <&ccu CLK_BUS_DE>,
318				 <&ccu CLK_PLL_DE>;
319			clock-names = "bus",
320				      "mod";
321			resets = <&ccu RST_BUS_DE>;
322			#clock-cells = <1>;
323			#reset-cells = <1>;
324		};
325
326		mixer0: mixer@1100000 {
327			compatible = "allwinner,sun8i-a83t-de2-mixer-0";
328			reg = <0x01100000 0x100000>;
329			clocks = <&display_clocks CLK_BUS_MIXER0>,
330				 <&display_clocks CLK_MIXER0>;
331			clock-names = "bus",
332				      "mod";
333			resets = <&display_clocks RST_MIXER0>;
334
335			ports {
336				#address-cells = <1>;
337				#size-cells = <0>;
338
339				mixer0_out: port@1 {
340					#address-cells = <1>;
341					#size-cells = <0>;
342					reg = <1>;
343
344					mixer0_out_tcon0: endpoint@0 {
345						reg = <0>;
346						remote-endpoint = <&tcon0_in_mixer0>;
347					};
348
349					mixer0_out_tcon1: endpoint@1 {
350						reg = <1>;
351						remote-endpoint = <&tcon1_in_mixer0>;
352					};
353				};
354			};
355		};
356
357		mixer1: mixer@1200000 {
358			compatible = "allwinner,sun8i-a83t-de2-mixer-1";
359			reg = <0x01200000 0x100000>;
360			clocks = <&display_clocks CLK_BUS_MIXER1>,
361				 <&display_clocks CLK_MIXER1>;
362			clock-names = "bus",
363				      "mod";
364			resets = <&display_clocks RST_WB>;
365
366			ports {
367				#address-cells = <1>;
368				#size-cells = <0>;
369
370				mixer1_out: port@1 {
371					#address-cells = <1>;
372					#size-cells = <0>;
373					reg = <1>;
374
375					mixer1_out_tcon0: endpoint@0 {
376						reg = <0>;
377						remote-endpoint = <&tcon0_in_mixer1>;
378					};
379
380					mixer1_out_tcon1: endpoint@1 {
381						reg = <1>;
382						remote-endpoint = <&tcon1_in_mixer1>;
383					};
384				};
385			};
386		};
387
388		cpucfg@1700000 {
389			compatible = "allwinner,sun8i-a83t-cpucfg";
390			reg = <0x01700000 0x400>;
391		};
392
393		cci@1790000 {
394			compatible = "arm,cci-400";
395			#address-cells = <1>;
396			#size-cells = <1>;
397			reg = <0x01790000 0x10000>;
398			ranges = <0x0 0x01790000 0x10000>;
399
400			cci_control0: slave-if@4000 {
401				compatible = "arm,cci-400-ctrl-if";
402				interface-type = "ace";
403				reg = <0x4000 0x1000>;
404			};
405
406			cci_control1: slave-if@5000 {
407				compatible = "arm,cci-400-ctrl-if";
408				interface-type = "ace";
409				reg = <0x5000 0x1000>;
410			};
411
412			pmu@9000 {
413				compatible = "arm,cci-400-pmu,r1";
414				reg = <0x9000 0x5000>;
415				interrupts = <GIC_SPI 132 IRQ_TYPE_LEVEL_HIGH>,
416					     <GIC_SPI 133 IRQ_TYPE_LEVEL_HIGH>,
417					     <GIC_SPI 134 IRQ_TYPE_LEVEL_HIGH>,
418					     <GIC_SPI 135 IRQ_TYPE_LEVEL_HIGH>,
419					     <GIC_SPI 151 IRQ_TYPE_LEVEL_HIGH>,
420					     <GIC_SPI 152 IRQ_TYPE_LEVEL_HIGH>,
421					     <GIC_SPI 153 IRQ_TYPE_LEVEL_HIGH>,
422					     <GIC_SPI 154 IRQ_TYPE_LEVEL_HIGH>;
423			};
424		};
425
426		syscon: syscon@1c00000 {
427			compatible = "allwinner,sun8i-a83t-system-controller",
428				"syscon";
429			reg = <0x01c00000 0x1000>;
430		};
431
432		dma: dma-controller@1c02000 {
433			compatible = "allwinner,sun8i-a83t-dma";
434			reg = <0x01c02000 0x1000>;
435			interrupts = <GIC_SPI 50 IRQ_TYPE_LEVEL_HIGH>;
436			clocks = <&ccu CLK_BUS_DMA>;
437			resets = <&ccu RST_BUS_DMA>;
438			#dma-cells = <1>;
439		};
440
441		tcon0: lcd-controller@1c0c000 {
442			compatible = "allwinner,sun8i-a83t-tcon-lcd";
443			reg = <0x01c0c000 0x1000>;
444			interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>;
445			clocks = <&ccu CLK_BUS_TCON0>, <&ccu CLK_TCON0>;
446			clock-names = "ahb", "tcon-ch0";
447			clock-output-names = "tcon-pixel-clock";
448			#clock-cells = <0>;
449			resets = <&ccu RST_BUS_TCON0>, <&ccu RST_BUS_LVDS>;
450			reset-names = "lcd", "lvds";
451
452			ports {
453				#address-cells = <1>;
454				#size-cells = <0>;
455
456				tcon0_in: port@0 {
457					#address-cells = <1>;
458					#size-cells = <0>;
459					reg = <0>;
460
461					tcon0_in_mixer0: endpoint@0 {
462						reg = <0>;
463						remote-endpoint = <&mixer0_out_tcon0>;
464					};
465
466					tcon0_in_mixer1: endpoint@1 {
467						reg = <1>;
468						remote-endpoint = <&mixer1_out_tcon0>;
469					};
470				};
471
472				tcon0_out: port@1 {
473					reg = <1>;
474				};
475			};
476		};
477
478		tcon1: lcd-controller@1c0d000 {
479			compatible = "allwinner,sun8i-a83t-tcon-tv";
480			reg = <0x01c0d000 0x1000>;
481			interrupts = <GIC_SPI 87 IRQ_TYPE_LEVEL_HIGH>;
482			clocks = <&ccu CLK_BUS_TCON1>, <&ccu CLK_TCON1>;
483			clock-names = "ahb", "tcon-ch1";
484			resets = <&ccu RST_BUS_TCON1>;
485			reset-names = "lcd";
486
487			ports {
488				#address-cells = <1>;
489				#size-cells = <0>;
490
491				tcon1_in: port@0 {
492					#address-cells = <1>;
493					#size-cells = <0>;
494					reg = <0>;
495
496					tcon1_in_mixer0: endpoint@0 {
497						reg = <0>;
498						remote-endpoint = <&mixer0_out_tcon1>;
499					};
500
501					tcon1_in_mixer1: endpoint@1 {
502						reg = <1>;
503						remote-endpoint = <&mixer1_out_tcon1>;
504					};
505				};
506
507				tcon1_out: port@1 {
508					#address-cells = <1>;
509					#size-cells = <0>;
510					reg = <1>;
511
512					tcon1_out_hdmi: endpoint@1 {
513						reg = <1>;
514						remote-endpoint = <&hdmi_in_tcon1>;
515					};
516				};
517			};
518		};
519
520		mmc0: mmc@1c0f000 {
521			compatible = "allwinner,sun8i-a83t-mmc",
522				     "allwinner,sun7i-a20-mmc";
523			reg = <0x01c0f000 0x1000>;
524			clocks = <&ccu CLK_BUS_MMC0>,
525				 <&ccu CLK_MMC0>,
526				 <&ccu CLK_MMC0_OUTPUT>,
527				 <&ccu CLK_MMC0_SAMPLE>;
528			clock-names = "ahb",
529				      "mmc",
530				      "output",
531				      "sample";
532			resets = <&ccu RST_BUS_MMC0>;
533			reset-names = "ahb";
534			interrupts = <GIC_SPI 60 IRQ_TYPE_LEVEL_HIGH>;
535			status = "disabled";
536			#address-cells = <1>;
537			#size-cells = <0>;
538		};
539
540		mmc1: mmc@1c10000 {
541			compatible = "allwinner,sun8i-a83t-mmc",
542				     "allwinner,sun7i-a20-mmc";
543			reg = <0x01c10000 0x1000>;
544			clocks = <&ccu CLK_BUS_MMC1>,
545				 <&ccu CLK_MMC1>,
546				 <&ccu CLK_MMC1_OUTPUT>,
547				 <&ccu CLK_MMC1_SAMPLE>;
548			clock-names = "ahb",
549				      "mmc",
550				      "output",
551				      "sample";
552			resets = <&ccu RST_BUS_MMC1>;
553			reset-names = "ahb";
554			interrupts = <GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH>;
555			pinctrl-names = "default";
556			pinctrl-0 = <&mmc1_pins>;
557			status = "disabled";
558			#address-cells = <1>;
559			#size-cells = <0>;
560		};
561
562		mmc2: mmc@1c11000 {
563			compatible = "allwinner,sun8i-a83t-emmc";
564			reg = <0x01c11000 0x1000>;
565			clocks = <&ccu CLK_BUS_MMC2>,
566				 <&ccu CLK_MMC2>,
567				 <&ccu CLK_MMC2_OUTPUT>,
568				 <&ccu CLK_MMC2_SAMPLE>;
569			clock-names = "ahb",
570				      "mmc",
571				      "output",
572				      "sample";
573			resets = <&ccu RST_BUS_MMC2>;
574			reset-names = "ahb";
575			interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>;
576			status = "disabled";
577			#address-cells = <1>;
578			#size-cells = <0>;
579		};
580
581		sid: eeprom@1c14000 {
582			compatible = "allwinner,sun8i-a83t-sid";
583			reg = <0x1c14000 0x400>;
584		};
585
586		usb_otg: usb@1c19000 {
587			compatible = "allwinner,sun8i-a83t-musb",
588				     "allwinner,sun8i-a33-musb";
589			reg = <0x01c19000 0x0400>;
590			clocks = <&ccu CLK_BUS_OTG>;
591			resets = <&ccu RST_BUS_OTG>;
592			interrupts = <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>;
593			interrupt-names = "mc";
594			phys = <&usbphy 0>;
595			phy-names = "usb";
596			extcon = <&usbphy 0>;
597			dr_mode = "otg";
598			status = "disabled";
599		};
600
601		usbphy: phy@1c19400 {
602			compatible = "allwinner,sun8i-a83t-usb-phy";
603			reg = <0x01c19400 0x10>,
604			      <0x01c1a800 0x14>,
605			      <0x01c1b800 0x14>;
606			reg-names = "phy_ctrl",
607				    "pmu1",
608				    "pmu2";
609			clocks = <&ccu CLK_USB_PHY0>,
610				 <&ccu CLK_USB_PHY1>,
611				 <&ccu CLK_USB_HSIC>,
612				 <&ccu CLK_USB_HSIC_12M>;
613			clock-names = "usb0_phy",
614				      "usb1_phy",
615				      "usb2_phy",
616				      "usb2_hsic_12M";
617			resets = <&ccu RST_USB_PHY0>,
618				 <&ccu RST_USB_PHY1>,
619				 <&ccu RST_USB_HSIC>;
620			reset-names = "usb0_reset",
621				      "usb1_reset",
622				      "usb2_reset";
623			status = "disabled";
624			#phy-cells = <1>;
625		};
626
627		ehci0: usb@1c1a000 {
628			compatible = "allwinner,sun8i-a83t-ehci",
629				     "generic-ehci";
630			reg = <0x01c1a000 0x100>;
631			interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>;
632			clocks = <&ccu CLK_BUS_EHCI0>;
633			resets = <&ccu RST_BUS_EHCI0>;
634			phys = <&usbphy 1>;
635			phy-names = "usb";
636			status = "disabled";
637		};
638
639		ohci0: usb@1c1a400 {
640			compatible = "allwinner,sun8i-a83t-ohci",
641				     "generic-ohci";
642			reg = <0x01c1a400 0x100>;
643			interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
644			clocks = <&ccu CLK_BUS_OHCI0>, <&ccu CLK_USB_OHCI0>;
645			resets = <&ccu RST_BUS_OHCI0>;
646			phys = <&usbphy 1>;
647			phy-names = "usb";
648			status = "disabled";
649		};
650
651		ehci1: usb@1c1b000 {
652			compatible = "allwinner,sun8i-a83t-ehci",
653				     "generic-ehci";
654			reg = <0x01c1b000 0x100>;
655			interrupts = <GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>;
656			clocks = <&ccu CLK_BUS_EHCI1>;
657			resets = <&ccu RST_BUS_EHCI1>;
658			phys = <&usbphy 2>;
659			phy-names = "usb";
660			status = "disabled";
661		};
662
663		ccu: clock@1c20000 {
664			compatible = "allwinner,sun8i-a83t-ccu";
665			reg = <0x01c20000 0x400>;
666			clocks = <&osc24M>, <&osc16Md512>;
667			clock-names = "hosc", "losc";
668			#clock-cells = <1>;
669			#reset-cells = <1>;
670		};
671
672		pio: pinctrl@1c20800 {
673			compatible = "allwinner,sun8i-a83t-pinctrl";
674			interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>,
675				     <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>,
676				     <GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH>;
677			reg = <0x01c20800 0x400>;
678			clocks = <&ccu CLK_BUS_PIO>, <&osc24M>, <&osc16Md512>;
679			clock-names = "apb", "hosc", "losc";
680			gpio-controller;
681			interrupt-controller;
682			#interrupt-cells = <3>;
683			#gpio-cells = <3>;
684
685			/omit-if-no-ref/
686			csi_8bit_parallel_pins: csi-8bit-parallel-pins {
687				pins = "PE0", "PE2", "PE3", "PE6", "PE7",
688				       "PE8", "PE9", "PE10", "PE11",
689				       "PE12", "PE13";
690				function = "csi";
691			};
692
693			/omit-if-no-ref/
694			csi_mclk_pin: csi-mclk-pin {
695				pins = "PE1";
696				function = "csi";
697			};
698
699			emac_rgmii_pins: emac-rgmii-pins {
700				pins = "PD2", "PD3", "PD4", "PD5", "PD6", "PD7",
701				       "PD11", "PD12", "PD13", "PD14", "PD18",
702				       "PD19", "PD21", "PD22", "PD23";
703				function = "gmac";
704				/*
705				 * data lines in RGMII mode use DDR mode
706				 * and need a higher signal drive strength
707				 */
708				drive-strength = <40>;
709			};
710
711			hdmi_pins: hdmi-pins {
712				pins = "PH6", "PH7", "PH8";
713				function = "hdmi";
714			};
715
716			i2c0_pins: i2c0-pins {
717				pins = "PH0", "PH1";
718				function = "i2c0";
719			};
720
721			i2c1_pins: i2c1-pins {
722				pins = "PH2", "PH3";
723				function = "i2c1";
724			};
725
726			/omit-if-no-ref/
727			i2c2_pe_pins: i2c2-pe-pins {
728				pins = "PE14", "PE15";
729				function = "i2c2";
730			};
731
732			i2c2_ph_pins: i2c2-ph-pins {
733				pins = "PH4", "PH5";
734				function = "i2c2";
735			};
736
737			i2s1_pins: i2s1-pins {
738				/* I2S1 does not have external MCLK pin */
739				pins = "PG10", "PG11", "PG12", "PG13";
740				function = "i2s1";
741			};
742
743			lcd_lvds_pins: lcd-lvds-pins {
744				pins = "PD18", "PD19", "PD20", "PD21", "PD22",
745				       "PD23", "PD24", "PD25", "PD26", "PD27";
746				function = "lvds0";
747			};
748
749			mmc0_pins: mmc0-pins {
750				pins = "PF0", "PF1", "PF2",
751				       "PF3", "PF4", "PF5";
752				function = "mmc0";
753				drive-strength = <30>;
754				bias-pull-up;
755			};
756
757			mmc1_pins: mmc1-pins {
758				pins = "PG0", "PG1", "PG2",
759				       "PG3", "PG4", "PG5";
760				function = "mmc1";
761				drive-strength = <30>;
762				bias-pull-up;
763			};
764
765			mmc2_8bit_emmc_pins: mmc2-8bit-emmc-pins {
766				pins = "PC5", "PC6", "PC8", "PC9",
767				       "PC10", "PC11", "PC12", "PC13",
768				       "PC14", "PC15", "PC16";
769				function = "mmc2";
770				drive-strength = <30>;
771				bias-pull-up;
772			};
773
774			pwm_pin: pwm-pin {
775				pins = "PD28";
776				function = "pwm";
777			};
778
779			spdif_tx_pin: spdif-tx-pin {
780				pins = "PE18";
781				function = "spdif";
782			};
783
784			uart0_pb_pins: uart0-pb-pins {
785				pins = "PB9", "PB10";
786				function = "uart0";
787			};
788
789			uart0_pf_pins: uart0-pf-pins {
790				pins = "PF2", "PF4";
791				function = "uart0";
792			};
793
794			uart1_pins: uart1-pins {
795				pins = "PG6", "PG7";
796				function = "uart1";
797			};
798
799			uart1_rts_cts_pins: uart1-rts-cts-pins {
800				pins = "PG8", "PG9";
801				function = "uart1";
802			};
803
804			/omit-if-no-ref/
805			uart2_pb_pins: uart2-pb-pins {
806				pins = "PB0", "PB1";
807				function = "uart2";
808			};
809		};
810
811		timer@1c20c00 {
812			compatible = "allwinner,sun8i-a23-timer";
813			reg = <0x01c20c00 0xa0>;
814			interrupts = <GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH>,
815				     <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
816			clocks = <&osc24M>;
817		};
818
819		watchdog@1c20ca0 {
820			compatible = "allwinner,sun6i-a31-wdt";
821			reg = <0x01c20ca0 0x20>;
822			interrupts = <GIC_SPI 25 IRQ_TYPE_LEVEL_HIGH>;
823			clocks = <&osc24M>;
824		};
825
826		spdif: spdif@1c21000 {
827			#sound-dai-cells = <0>;
828			compatible = "allwinner,sun8i-a83t-spdif",
829				     "allwinner,sun8i-h3-spdif";
830			reg = <0x01c21000 0x400>;
831			interrupts = <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>;
832			clocks = <&ccu CLK_BUS_SPDIF>, <&ccu CLK_SPDIF>;
833			resets = <&ccu RST_BUS_SPDIF>;
834			clock-names = "apb", "spdif";
835			dmas = <&dma 2>;
836			dma-names = "tx";
837			pinctrl-names = "default";
838			pinctrl-0 = <&spdif_tx_pin>;
839			status = "disabled";
840		};
841
842		i2s0: i2s@1c22000 {
843			#sound-dai-cells = <0>;
844			compatible = "allwinner,sun8i-a83t-i2s";
845			reg = <0x01c22000 0x400>;
846			interrupts = <GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>;
847			clocks = <&ccu CLK_BUS_I2S0>, <&ccu CLK_I2S0>;
848			clock-names = "apb", "mod";
849			dmas = <&dma 3>, <&dma 3>;
850			resets = <&ccu RST_BUS_I2S0>;
851			dma-names = "rx", "tx";
852			status = "disabled";
853		};
854
855		i2s1: i2s@1c22400 {
856			#sound-dai-cells = <0>;
857			compatible = "allwinner,sun8i-a83t-i2s";
858			reg = <0x01c22400 0x400>;
859			interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
860			clocks = <&ccu CLK_BUS_I2S1>, <&ccu CLK_I2S1>;
861			clock-names = "apb", "mod";
862			dmas = <&dma 4>, <&dma 4>;
863			resets = <&ccu RST_BUS_I2S1>;
864			dma-names = "rx", "tx";
865			pinctrl-names = "default";
866			pinctrl-0 = <&i2s1_pins>;
867			status = "disabled";
868		};
869
870		i2s2: i2s@1c22800 {
871			#sound-dai-cells = <0>;
872			compatible = "allwinner,sun8i-a83t-i2s";
873			reg = <0x01c22800 0x400>;
874			interrupts = <GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>;
875			clocks = <&ccu CLK_BUS_I2S2>, <&ccu CLK_I2S2>;
876			clock-names = "apb", "mod";
877			dmas = <&dma 27>;
878			resets = <&ccu RST_BUS_I2S2>;
879			dma-names = "tx";
880			status = "disabled";
881		};
882
883		pwm: pwm@1c21400 {
884			compatible = "allwinner,sun8i-a83t-pwm",
885				     "allwinner,sun8i-h3-pwm";
886			reg = <0x01c21400 0x400>;
887			clocks = <&osc24M>;
888			#pwm-cells = <3>;
889			status = "disabled";
890		};
891
892		uart0: serial@1c28000 {
893			compatible = "snps,dw-apb-uart";
894			reg = <0x01c28000 0x400>;
895			interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>;
896			reg-shift = <2>;
897			reg-io-width = <4>;
898			clocks = <&ccu CLK_BUS_UART0>;
899			resets = <&ccu RST_BUS_UART0>;
900			status = "disabled";
901		};
902
903		uart1: serial@1c28400 {
904			compatible = "snps,dw-apb-uart";
905			reg = <0x01c28400 0x400>;
906			interrupts = <GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>;
907			reg-shift = <2>;
908			reg-io-width = <4>;
909			clocks = <&ccu CLK_BUS_UART1>;
910			resets = <&ccu RST_BUS_UART1>;
911			status = "disabled";
912		};
913
914		uart2: serial@1c28800 {
915			compatible = "snps,dw-apb-uart";
916			reg = <0x01c28800 0x400>;
917			interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>;
918			reg-shift = <2>;
919			reg-io-width = <4>;
920			clocks = <&ccu CLK_BUS_UART2>;
921			resets = <&ccu RST_BUS_UART2>;
922			status = "disabled";
923		};
924
925		uart3: serial@1c28c00 {
926			compatible = "snps,dw-apb-uart";
927			reg = <0x01c28c00 0x400>;
928			interrupts = <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>;
929			reg-shift = <2>;
930			reg-io-width = <4>;
931			clocks = <&ccu CLK_BUS_UART3>;
932			resets = <&ccu RST_BUS_UART3>;
933			status = "disabled";
934		};
935
936		uart4: serial@1c29000 {
937			compatible = "snps,dw-apb-uart";
938			reg = <0x01c29000 0x400>;
939			interrupts = <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>;
940			reg-shift = <2>;
941			reg-io-width = <4>;
942			clocks = <&ccu CLK_BUS_UART4>;
943			resets = <&ccu RST_BUS_UART4>;
944			status = "disabled";
945		};
946
947		i2c0: i2c@1c2ac00 {
948			compatible = "allwinner,sun8i-a83t-i2c",
949				     "allwinner,sun6i-a31-i2c";
950			reg = <0x01c2ac00 0x400>;
951			interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>;
952			clocks = <&ccu CLK_BUS_I2C0>;
953			resets = <&ccu RST_BUS_I2C0>;
954			pinctrl-names = "default";
955			pinctrl-0 = <&i2c0_pins>;
956			status = "disabled";
957			#address-cells = <1>;
958			#size-cells = <0>;
959		};
960
961		i2c1: i2c@1c2b000 {
962			compatible = "allwinner,sun8i-a83t-i2c",
963				     "allwinner,sun6i-a31-i2c";
964			reg = <0x01c2b000 0x400>;
965			interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
966			clocks = <&ccu CLK_BUS_I2C1>;
967			resets = <&ccu RST_BUS_I2C1>;
968			pinctrl-names = "default";
969			pinctrl-0 = <&i2c1_pins>;
970			status = "disabled";
971			#address-cells = <1>;
972			#size-cells = <0>;
973		};
974
975		i2c2: i2c@1c2b400 {
976			compatible = "allwinner,sun8i-a83t-i2c",
977				     "allwinner,sun6i-a31-i2c";
978			reg = <0x01c2b400 0x400>;
979			interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>;
980			clocks = <&ccu CLK_BUS_I2C2>;
981			resets = <&ccu RST_BUS_I2C2>;
982			status = "disabled";
983			#address-cells = <1>;
984			#size-cells = <0>;
985		};
986
987		emac: ethernet@1c30000 {
988			compatible = "allwinner,sun8i-a83t-emac";
989			syscon = <&syscon>;
990			reg = <0x01c30000 0x104>;
991			interrupts = <GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>;
992			interrupt-names = "macirq";
993			resets = <&ccu 13>;
994			reset-names = "stmmaceth";
995			clocks = <&ccu 27>;
996			clock-names = "stmmaceth";
997			status = "disabled";
998
999			mdio: mdio {
1000				compatible = "snps,dwmac-mdio";
1001				#address-cells = <1>;
1002				#size-cells = <0>;
1003			};
1004		};
1005
1006		gic: interrupt-controller@1c81000 {
1007			compatible = "arm,gic-400";
1008			reg = <0x01c81000 0x1000>,
1009			      <0x01c82000 0x2000>,
1010			      <0x01c84000 0x2000>,
1011			      <0x01c86000 0x2000>;
1012			interrupt-controller;
1013			#interrupt-cells = <3>;
1014			interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_HIGH)>;
1015		};
1016
1017		csi: camera@1cb0000 {
1018			compatible = "allwinner,sun8i-a83t-csi";
1019			reg = <0x01cb0000 0x1000>;
1020			interrupts = <GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>;
1021			clocks = <&ccu CLK_BUS_CSI>,
1022				 <&ccu CLK_CSI_SCLK>,
1023				 <&ccu CLK_DRAM_CSI>;
1024			clock-names = "bus", "mod", "ram";
1025			resets = <&ccu RST_BUS_CSI>;
1026			status = "disabled";
1027
1028			csi_in: port {
1029			};
1030		};
1031
1032		hdmi: hdmi@1ee0000 {
1033			compatible = "allwinner,sun8i-a83t-dw-hdmi";
1034			reg = <0x01ee0000 0x10000>;
1035			reg-io-width = <1>;
1036			interrupts = <GIC_SPI 88 IRQ_TYPE_LEVEL_HIGH>;
1037			clocks = <&ccu CLK_BUS_HDMI>, <&ccu CLK_HDMI_SLOW>,
1038				 <&ccu CLK_HDMI>;
1039			clock-names = "iahb", "isfr", "tmds";
1040			resets = <&ccu RST_BUS_HDMI1>;
1041			reset-names = "ctrl";
1042			phys = <&hdmi_phy>;
1043			phy-names = "phy";
1044			pinctrl-names = "default";
1045			pinctrl-0 = <&hdmi_pins>;
1046			status = "disabled";
1047
1048			ports {
1049				#address-cells = <1>;
1050				#size-cells = <0>;
1051
1052				hdmi_in: port@0 {
1053					reg = <0>;
1054
1055					hdmi_in_tcon1: endpoint {
1056						remote-endpoint = <&tcon1_out_hdmi>;
1057					};
1058				};
1059
1060				hdmi_out: port@1 {
1061					reg = <1>;
1062				};
1063			};
1064		};
1065
1066		hdmi_phy: hdmi-phy@1ef0000 {
1067			compatible = "allwinner,sun8i-a83t-hdmi-phy";
1068			reg = <0x01ef0000 0x10000>;
1069			clocks = <&ccu CLK_BUS_HDMI>, <&ccu CLK_HDMI_SLOW>;
1070			clock-names = "bus", "mod";
1071			resets = <&ccu RST_BUS_HDMI0>;
1072			reset-names = "phy";
1073			#phy-cells = <0>;
1074		};
1075
1076		r_intc: interrupt-controller@1f00c00 {
1077			compatible = "allwinner,sun8i-a83t-r-intc",
1078				     "allwinner,sun6i-a31-r-intc";
1079			interrupt-controller;
1080			#interrupt-cells = <2>;
1081			reg = <0x01f00c00 0x400>;
1082			interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH>;
1083		};
1084
1085		r_ccu: clock@1f01400 {
1086			compatible = "allwinner,sun8i-a83t-r-ccu";
1087			reg = <0x01f01400 0x400>;
1088			clocks = <&osc24M>, <&osc16Md512>, <&osc16M>,
1089				 <&ccu 6>;
1090			clock-names = "hosc", "losc", "iosc", "pll-periph";
1091			#clock-cells = <1>;
1092			#reset-cells = <1>;
1093		};
1094
1095		r_cpucfg@1f01c00 {
1096			compatible = "allwinner,sun8i-a83t-r-cpucfg";
1097			reg = <0x1f01c00 0x400>;
1098		};
1099
1100		r_cir: ir@1f02000 {
1101			compatible = "allwinner,sun8i-a83t-ir",
1102				"allwinner,sun6i-a31-ir";
1103			clocks = <&r_ccu CLK_APB0_IR>, <&r_ccu CLK_IR>;
1104			clock-names = "apb", "ir";
1105			resets = <&r_ccu RST_APB0_IR>;
1106			interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>;
1107			reg = <0x01f02000 0x400>;
1108			pinctrl-names = "default";
1109			pinctrl-0 = <&r_cir_pin>;
1110			status = "disabled";
1111		};
1112
1113		r_lradc: lradc@1f03c00 {
1114			compatible = "allwinner,sun8i-a83t-r-lradc";
1115			reg = <0x01f03c00 0x100>;
1116			interrupts = <GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>;
1117			status = "disabled";
1118		};
1119
1120		r_pio: pinctrl@1f02c00 {
1121			compatible = "allwinner,sun8i-a83t-r-pinctrl";
1122			reg = <0x01f02c00 0x400>;
1123			interrupts = <GIC_SPI 45 IRQ_TYPE_LEVEL_HIGH>;
1124			clocks = <&r_ccu CLK_APB0_PIO>, <&osc24M>,
1125				 <&osc16Md512>;
1126			clock-names = "apb", "hosc", "losc";
1127			gpio-controller;
1128			#gpio-cells = <3>;
1129			interrupt-controller;
1130			#interrupt-cells = <3>;
1131
1132			r_cir_pin: r-cir-pin {
1133				pins = "PL12";
1134				function = "s_cir_rx";
1135			};
1136
1137			r_rsb_pins: r-rsb-pins {
1138				pins = "PL0", "PL1";
1139				function = "s_rsb";
1140				drive-strength = <20>;
1141				bias-pull-up;
1142			};
1143		};
1144
1145		r_rsb: rsb@1f03400 {
1146			compatible = "allwinner,sun8i-a83t-rsb",
1147				     "allwinner,sun8i-a23-rsb";
1148			reg = <0x01f03400 0x400>;
1149			interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>;
1150			clocks = <&r_ccu CLK_APB0_RSB>;
1151			clock-frequency = <3000000>;
1152			resets = <&r_ccu RST_APB0_RSB>;
1153			pinctrl-names = "default";
1154			pinctrl-0 = <&r_rsb_pins>;
1155			status = "disabled";
1156			#address-cells = <1>;
1157			#size-cells = <0>;
1158		};
1159	};
1160};
1161