xref: /OK3568_Linux_fs/kernel/arch/arm64/boot/dts/allwinner/sun50i-h6.dtsi (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
2*4882a593Smuzhiyun// Copyright (C) 2017 Icenowy Zheng <icenowy@aosc.io>
3*4882a593Smuzhiyun
4*4882a593Smuzhiyun#include <dt-bindings/interrupt-controller/arm-gic.h>
5*4882a593Smuzhiyun#include <dt-bindings/clock/sun50i-h6-ccu.h>
6*4882a593Smuzhiyun#include <dt-bindings/clock/sun50i-h6-r-ccu.h>
7*4882a593Smuzhiyun#include <dt-bindings/clock/sun8i-de2.h>
8*4882a593Smuzhiyun#include <dt-bindings/clock/sun8i-tcon-top.h>
9*4882a593Smuzhiyun#include <dt-bindings/reset/sun50i-h6-ccu.h>
10*4882a593Smuzhiyun#include <dt-bindings/reset/sun50i-h6-r-ccu.h>
11*4882a593Smuzhiyun#include <dt-bindings/reset/sun8i-de2.h>
12*4882a593Smuzhiyun#include <dt-bindings/thermal/thermal.h>
13*4882a593Smuzhiyun
14*4882a593Smuzhiyun/ {
15*4882a593Smuzhiyun	interrupt-parent = <&gic>;
16*4882a593Smuzhiyun	#address-cells = <1>;
17*4882a593Smuzhiyun	#size-cells = <1>;
18*4882a593Smuzhiyun
19*4882a593Smuzhiyun	cpus {
20*4882a593Smuzhiyun		#address-cells = <1>;
21*4882a593Smuzhiyun		#size-cells = <0>;
22*4882a593Smuzhiyun
23*4882a593Smuzhiyun		cpu0: cpu@0 {
24*4882a593Smuzhiyun			compatible = "arm,cortex-a53";
25*4882a593Smuzhiyun			device_type = "cpu";
26*4882a593Smuzhiyun			reg = <0>;
27*4882a593Smuzhiyun			enable-method = "psci";
28*4882a593Smuzhiyun			clocks = <&ccu CLK_CPUX>;
29*4882a593Smuzhiyun			clock-latency-ns = <244144>; /* 8 32k periods */
30*4882a593Smuzhiyun			#cooling-cells = <2>;
31*4882a593Smuzhiyun		};
32*4882a593Smuzhiyun
33*4882a593Smuzhiyun		cpu1: cpu@1 {
34*4882a593Smuzhiyun			compatible = "arm,cortex-a53";
35*4882a593Smuzhiyun			device_type = "cpu";
36*4882a593Smuzhiyun			reg = <1>;
37*4882a593Smuzhiyun			enable-method = "psci";
38*4882a593Smuzhiyun			clocks = <&ccu CLK_CPUX>;
39*4882a593Smuzhiyun			clock-latency-ns = <244144>; /* 8 32k periods */
40*4882a593Smuzhiyun			#cooling-cells = <2>;
41*4882a593Smuzhiyun		};
42*4882a593Smuzhiyun
43*4882a593Smuzhiyun		cpu2: cpu@2 {
44*4882a593Smuzhiyun			compatible = "arm,cortex-a53";
45*4882a593Smuzhiyun			device_type = "cpu";
46*4882a593Smuzhiyun			reg = <2>;
47*4882a593Smuzhiyun			enable-method = "psci";
48*4882a593Smuzhiyun			clocks = <&ccu CLK_CPUX>;
49*4882a593Smuzhiyun			clock-latency-ns = <244144>; /* 8 32k periods */
50*4882a593Smuzhiyun			#cooling-cells = <2>;
51*4882a593Smuzhiyun		};
52*4882a593Smuzhiyun
53*4882a593Smuzhiyun		cpu3: cpu@3 {
54*4882a593Smuzhiyun			compatible = "arm,cortex-a53";
55*4882a593Smuzhiyun			device_type = "cpu";
56*4882a593Smuzhiyun			reg = <3>;
57*4882a593Smuzhiyun			enable-method = "psci";
58*4882a593Smuzhiyun			clocks = <&ccu CLK_CPUX>;
59*4882a593Smuzhiyun			clock-latency-ns = <244144>; /* 8 32k periods */
60*4882a593Smuzhiyun			#cooling-cells = <2>;
61*4882a593Smuzhiyun		};
62*4882a593Smuzhiyun	};
63*4882a593Smuzhiyun
64*4882a593Smuzhiyun	de: display-engine {
65*4882a593Smuzhiyun		compatible = "allwinner,sun50i-h6-display-engine";
66*4882a593Smuzhiyun		allwinner,pipelines = <&mixer0>;
67*4882a593Smuzhiyun		status = "disabled";
68*4882a593Smuzhiyun	};
69*4882a593Smuzhiyun
70*4882a593Smuzhiyun	osc24M: osc24M_clk {
71*4882a593Smuzhiyun		#clock-cells = <0>;
72*4882a593Smuzhiyun		compatible = "fixed-clock";
73*4882a593Smuzhiyun		clock-frequency = <24000000>;
74*4882a593Smuzhiyun		clock-output-names = "osc24M";
75*4882a593Smuzhiyun	};
76*4882a593Smuzhiyun
77*4882a593Smuzhiyun	pmu {
78*4882a593Smuzhiyun		compatible = "arm,cortex-a53-pmu";
79*4882a593Smuzhiyun		interrupts = <GIC_SPI 140 IRQ_TYPE_LEVEL_HIGH>,
80*4882a593Smuzhiyun			     <GIC_SPI 141 IRQ_TYPE_LEVEL_HIGH>,
81*4882a593Smuzhiyun			     <GIC_SPI 142 IRQ_TYPE_LEVEL_HIGH>,
82*4882a593Smuzhiyun			     <GIC_SPI 143 IRQ_TYPE_LEVEL_HIGH>;
83*4882a593Smuzhiyun		interrupt-affinity = <&cpu0>, <&cpu1>, <&cpu2>, <&cpu3>;
84*4882a593Smuzhiyun	};
85*4882a593Smuzhiyun
86*4882a593Smuzhiyun	psci {
87*4882a593Smuzhiyun		compatible = "arm,psci-0.2";
88*4882a593Smuzhiyun		method = "smc";
89*4882a593Smuzhiyun	};
90*4882a593Smuzhiyun
91*4882a593Smuzhiyun	timer {
92*4882a593Smuzhiyun		compatible = "arm,armv8-timer";
93*4882a593Smuzhiyun		arm,no-tick-in-suspend;
94*4882a593Smuzhiyun		interrupts = <GIC_PPI 13
95*4882a593Smuzhiyun			(GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>,
96*4882a593Smuzhiyun			     <GIC_PPI 14
97*4882a593Smuzhiyun			(GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>,
98*4882a593Smuzhiyun			     <GIC_PPI 11
99*4882a593Smuzhiyun			(GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>,
100*4882a593Smuzhiyun			     <GIC_PPI 10
101*4882a593Smuzhiyun			(GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>;
102*4882a593Smuzhiyun	};
103*4882a593Smuzhiyun
104*4882a593Smuzhiyun	soc {
105*4882a593Smuzhiyun		compatible = "simple-bus";
106*4882a593Smuzhiyun		#address-cells = <1>;
107*4882a593Smuzhiyun		#size-cells = <1>;
108*4882a593Smuzhiyun		ranges;
109*4882a593Smuzhiyun
110*4882a593Smuzhiyun		bus@1000000 {
111*4882a593Smuzhiyun			compatible = "allwinner,sun50i-h6-de3",
112*4882a593Smuzhiyun				     "allwinner,sun50i-a64-de2";
113*4882a593Smuzhiyun			reg = <0x1000000 0x400000>;
114*4882a593Smuzhiyun			allwinner,sram = <&de2_sram 1>;
115*4882a593Smuzhiyun			#address-cells = <1>;
116*4882a593Smuzhiyun			#size-cells = <1>;
117*4882a593Smuzhiyun			ranges = <0 0x1000000 0x400000>;
118*4882a593Smuzhiyun
119*4882a593Smuzhiyun			display_clocks: clock@0 {
120*4882a593Smuzhiyun				compatible = "allwinner,sun50i-h6-de3-clk";
121*4882a593Smuzhiyun				reg = <0x0 0x10000>;
122*4882a593Smuzhiyun				clocks = <&ccu CLK_DE>,
123*4882a593Smuzhiyun					 <&ccu CLK_BUS_DE>;
124*4882a593Smuzhiyun				clock-names = "mod",
125*4882a593Smuzhiyun					      "bus";
126*4882a593Smuzhiyun				resets = <&ccu RST_BUS_DE>;
127*4882a593Smuzhiyun				#clock-cells = <1>;
128*4882a593Smuzhiyun				#reset-cells = <1>;
129*4882a593Smuzhiyun			};
130*4882a593Smuzhiyun
131*4882a593Smuzhiyun			mixer0: mixer@100000 {
132*4882a593Smuzhiyun				compatible = "allwinner,sun50i-h6-de3-mixer-0";
133*4882a593Smuzhiyun				reg = <0x100000 0x100000>;
134*4882a593Smuzhiyun				clocks = <&display_clocks CLK_BUS_MIXER0>,
135*4882a593Smuzhiyun					 <&display_clocks CLK_MIXER0>;
136*4882a593Smuzhiyun				clock-names = "bus",
137*4882a593Smuzhiyun					      "mod";
138*4882a593Smuzhiyun				resets = <&display_clocks RST_MIXER0>;
139*4882a593Smuzhiyun				iommus = <&iommu 0>;
140*4882a593Smuzhiyun
141*4882a593Smuzhiyun				ports {
142*4882a593Smuzhiyun					#address-cells = <1>;
143*4882a593Smuzhiyun					#size-cells = <0>;
144*4882a593Smuzhiyun
145*4882a593Smuzhiyun					mixer0_out: port@1 {
146*4882a593Smuzhiyun						reg = <1>;
147*4882a593Smuzhiyun
148*4882a593Smuzhiyun						mixer0_out_tcon_top_mixer0: endpoint {
149*4882a593Smuzhiyun							remote-endpoint = <&tcon_top_mixer0_in_mixer0>;
150*4882a593Smuzhiyun						};
151*4882a593Smuzhiyun					};
152*4882a593Smuzhiyun				};
153*4882a593Smuzhiyun			};
154*4882a593Smuzhiyun		};
155*4882a593Smuzhiyun
156*4882a593Smuzhiyun		video-codec@1c0e000 {
157*4882a593Smuzhiyun			compatible = "allwinner,sun50i-h6-video-engine";
158*4882a593Smuzhiyun			reg = <0x01c0e000 0x2000>;
159*4882a593Smuzhiyun			clocks = <&ccu CLK_BUS_VE>, <&ccu CLK_VE>,
160*4882a593Smuzhiyun				 <&ccu CLK_MBUS_VE>;
161*4882a593Smuzhiyun			clock-names = "ahb", "mod", "ram";
162*4882a593Smuzhiyun			resets = <&ccu RST_BUS_VE>;
163*4882a593Smuzhiyun			interrupts = <GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>;
164*4882a593Smuzhiyun			allwinner,sram = <&ve_sram 1>;
165*4882a593Smuzhiyun			iommus = <&iommu 3>;
166*4882a593Smuzhiyun		};
167*4882a593Smuzhiyun
168*4882a593Smuzhiyun		gpu: gpu@1800000 {
169*4882a593Smuzhiyun			compatible = "allwinner,sun50i-h6-mali",
170*4882a593Smuzhiyun				     "arm,mali-t720";
171*4882a593Smuzhiyun			reg = <0x01800000 0x4000>;
172*4882a593Smuzhiyun			interrupts = <GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>,
173*4882a593Smuzhiyun				     <GIC_SPI 85 IRQ_TYPE_LEVEL_HIGH>,
174*4882a593Smuzhiyun				     <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>;
175*4882a593Smuzhiyun			interrupt-names = "job", "mmu", "gpu";
176*4882a593Smuzhiyun			clocks = <&ccu CLK_GPU>, <&ccu CLK_BUS_GPU>;
177*4882a593Smuzhiyun			clock-names = "core", "bus";
178*4882a593Smuzhiyun			resets = <&ccu RST_BUS_GPU>;
179*4882a593Smuzhiyun			status = "disabled";
180*4882a593Smuzhiyun		};
181*4882a593Smuzhiyun
182*4882a593Smuzhiyun		crypto: crypto@1904000 {
183*4882a593Smuzhiyun			compatible = "allwinner,sun50i-h6-crypto";
184*4882a593Smuzhiyun			reg = <0x01904000 0x1000>;
185*4882a593Smuzhiyun			interrupts = <GIC_SPI 87 IRQ_TYPE_LEVEL_HIGH>;
186*4882a593Smuzhiyun			clocks = <&ccu CLK_BUS_CE>, <&ccu CLK_CE>, <&ccu CLK_MBUS_CE>;
187*4882a593Smuzhiyun			clock-names = "bus", "mod", "ram";
188*4882a593Smuzhiyun			resets = <&ccu RST_BUS_CE>;
189*4882a593Smuzhiyun		};
190*4882a593Smuzhiyun
191*4882a593Smuzhiyun		syscon: syscon@3000000 {
192*4882a593Smuzhiyun			compatible = "allwinner,sun50i-h6-system-control",
193*4882a593Smuzhiyun				     "allwinner,sun50i-a64-system-control";
194*4882a593Smuzhiyun			reg = <0x03000000 0x1000>;
195*4882a593Smuzhiyun			#address-cells = <1>;
196*4882a593Smuzhiyun			#size-cells = <1>;
197*4882a593Smuzhiyun			ranges;
198*4882a593Smuzhiyun
199*4882a593Smuzhiyun			sram_c: sram@28000 {
200*4882a593Smuzhiyun				compatible = "mmio-sram";
201*4882a593Smuzhiyun				reg = <0x00028000 0x1e000>;
202*4882a593Smuzhiyun				#address-cells = <1>;
203*4882a593Smuzhiyun				#size-cells = <1>;
204*4882a593Smuzhiyun				ranges = <0 0x00028000 0x1e000>;
205*4882a593Smuzhiyun
206*4882a593Smuzhiyun				de2_sram: sram-section@0 {
207*4882a593Smuzhiyun					compatible = "allwinner,sun50i-h6-sram-c",
208*4882a593Smuzhiyun						     "allwinner,sun50i-a64-sram-c";
209*4882a593Smuzhiyun					reg = <0x0000 0x1e000>;
210*4882a593Smuzhiyun				};
211*4882a593Smuzhiyun			};
212*4882a593Smuzhiyun
213*4882a593Smuzhiyun			sram_c1: sram@1a00000 {
214*4882a593Smuzhiyun				compatible = "mmio-sram";
215*4882a593Smuzhiyun				reg = <0x01a00000 0x200000>;
216*4882a593Smuzhiyun				#address-cells = <1>;
217*4882a593Smuzhiyun				#size-cells = <1>;
218*4882a593Smuzhiyun				ranges = <0 0x01a00000 0x200000>;
219*4882a593Smuzhiyun
220*4882a593Smuzhiyun				ve_sram: sram-section@0 {
221*4882a593Smuzhiyun					compatible = "allwinner,sun50i-h6-sram-c1",
222*4882a593Smuzhiyun						     "allwinner,sun4i-a10-sram-c1";
223*4882a593Smuzhiyun					reg = <0x000000 0x200000>;
224*4882a593Smuzhiyun				};
225*4882a593Smuzhiyun			};
226*4882a593Smuzhiyun		};
227*4882a593Smuzhiyun
228*4882a593Smuzhiyun		ccu: clock@3001000 {
229*4882a593Smuzhiyun			compatible = "allwinner,sun50i-h6-ccu";
230*4882a593Smuzhiyun			reg = <0x03001000 0x1000>;
231*4882a593Smuzhiyun			clocks = <&osc24M>, <&rtc 0>, <&rtc 2>;
232*4882a593Smuzhiyun			clock-names = "hosc", "losc", "iosc";
233*4882a593Smuzhiyun			#clock-cells = <1>;
234*4882a593Smuzhiyun			#reset-cells = <1>;
235*4882a593Smuzhiyun		};
236*4882a593Smuzhiyun
237*4882a593Smuzhiyun		dma: dma-controller@3002000 {
238*4882a593Smuzhiyun			compatible = "allwinner,sun50i-h6-dma";
239*4882a593Smuzhiyun			reg = <0x03002000 0x1000>;
240*4882a593Smuzhiyun			interrupts = <GIC_SPI 43 IRQ_TYPE_LEVEL_HIGH>;
241*4882a593Smuzhiyun			clocks = <&ccu CLK_BUS_DMA>, <&ccu CLK_MBUS_DMA>;
242*4882a593Smuzhiyun			clock-names = "bus", "mbus";
243*4882a593Smuzhiyun			dma-channels = <16>;
244*4882a593Smuzhiyun			dma-requests = <46>;
245*4882a593Smuzhiyun			resets = <&ccu RST_BUS_DMA>;
246*4882a593Smuzhiyun			#dma-cells = <1>;
247*4882a593Smuzhiyun		};
248*4882a593Smuzhiyun
249*4882a593Smuzhiyun		msgbox: mailbox@3003000 {
250*4882a593Smuzhiyun			compatible = "allwinner,sun50i-h6-msgbox",
251*4882a593Smuzhiyun				     "allwinner,sun6i-a31-msgbox";
252*4882a593Smuzhiyun			reg = <0x03003000 0x1000>;
253*4882a593Smuzhiyun			clocks = <&ccu CLK_BUS_MSGBOX>;
254*4882a593Smuzhiyun			resets = <&ccu RST_BUS_MSGBOX>;
255*4882a593Smuzhiyun			interrupts = <GIC_SPI 44 IRQ_TYPE_LEVEL_HIGH>;
256*4882a593Smuzhiyun			#mbox-cells = <1>;
257*4882a593Smuzhiyun		};
258*4882a593Smuzhiyun
259*4882a593Smuzhiyun		sid: efuse@3006000 {
260*4882a593Smuzhiyun			compatible = "allwinner,sun50i-h6-sid";
261*4882a593Smuzhiyun			reg = <0x03006000 0x400>;
262*4882a593Smuzhiyun			#address-cells = <1>;
263*4882a593Smuzhiyun			#size-cells = <1>;
264*4882a593Smuzhiyun
265*4882a593Smuzhiyun			ths_calibration: thermal-sensor-calibration@14 {
266*4882a593Smuzhiyun				reg = <0x14 0x8>;
267*4882a593Smuzhiyun			};
268*4882a593Smuzhiyun
269*4882a593Smuzhiyun			cpu_speed_grade: cpu-speed-grade@1c {
270*4882a593Smuzhiyun				reg = <0x1c 0x4>;
271*4882a593Smuzhiyun			};
272*4882a593Smuzhiyun		};
273*4882a593Smuzhiyun
274*4882a593Smuzhiyun		watchdog: watchdog@30090a0 {
275*4882a593Smuzhiyun			compatible = "allwinner,sun50i-h6-wdt",
276*4882a593Smuzhiyun				     "allwinner,sun6i-a31-wdt";
277*4882a593Smuzhiyun			reg = <0x030090a0 0x20>;
278*4882a593Smuzhiyun			interrupts = <GIC_SPI 50 IRQ_TYPE_LEVEL_HIGH>;
279*4882a593Smuzhiyun			clocks = <&osc24M>;
280*4882a593Smuzhiyun			/* Broken on some H6 boards */
281*4882a593Smuzhiyun			status = "disabled";
282*4882a593Smuzhiyun		};
283*4882a593Smuzhiyun
284*4882a593Smuzhiyun		pwm: pwm@300a000 {
285*4882a593Smuzhiyun			compatible = "allwinner,sun50i-h6-pwm";
286*4882a593Smuzhiyun			reg = <0x0300a000 0x400>;
287*4882a593Smuzhiyun			clocks = <&osc24M>, <&ccu CLK_BUS_PWM>;
288*4882a593Smuzhiyun			clock-names = "mod", "bus";
289*4882a593Smuzhiyun			resets = <&ccu RST_BUS_PWM>;
290*4882a593Smuzhiyun			#pwm-cells = <3>;
291*4882a593Smuzhiyun			status = "disabled";
292*4882a593Smuzhiyun		};
293*4882a593Smuzhiyun
294*4882a593Smuzhiyun		pio: pinctrl@300b000 {
295*4882a593Smuzhiyun			compatible = "allwinner,sun50i-h6-pinctrl";
296*4882a593Smuzhiyun			reg = <0x0300b000 0x400>;
297*4882a593Smuzhiyun			interrupts = <GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>,
298*4882a593Smuzhiyun				     <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>,
299*4882a593Smuzhiyun				     <GIC_SPI 54 IRQ_TYPE_LEVEL_HIGH>,
300*4882a593Smuzhiyun				     <GIC_SPI 59 IRQ_TYPE_LEVEL_HIGH>;
301*4882a593Smuzhiyun			clocks = <&ccu CLK_APB1>, <&osc24M>, <&rtc 0>;
302*4882a593Smuzhiyun			clock-names = "apb", "hosc", "losc";
303*4882a593Smuzhiyun			gpio-controller;
304*4882a593Smuzhiyun			#gpio-cells = <3>;
305*4882a593Smuzhiyun			interrupt-controller;
306*4882a593Smuzhiyun			#interrupt-cells = <3>;
307*4882a593Smuzhiyun
308*4882a593Smuzhiyun			ext_rgmii_pins: rgmii-pins {
309*4882a593Smuzhiyun				pins = "PD0", "PD1", "PD2", "PD3", "PD4",
310*4882a593Smuzhiyun				       "PD5", "PD7", "PD8", "PD9", "PD10",
311*4882a593Smuzhiyun				       "PD11", "PD12", "PD13", "PD19", "PD20";
312*4882a593Smuzhiyun				function = "emac";
313*4882a593Smuzhiyun				drive-strength = <40>;
314*4882a593Smuzhiyun			};
315*4882a593Smuzhiyun
316*4882a593Smuzhiyun			hdmi_pins: hdmi-pins {
317*4882a593Smuzhiyun				pins = "PH8", "PH9", "PH10";
318*4882a593Smuzhiyun				function = "hdmi";
319*4882a593Smuzhiyun			};
320*4882a593Smuzhiyun
321*4882a593Smuzhiyun			i2c0_pins: i2c0-pins {
322*4882a593Smuzhiyun				pins = "PD25", "PD26";
323*4882a593Smuzhiyun				function = "i2c0";
324*4882a593Smuzhiyun			};
325*4882a593Smuzhiyun
326*4882a593Smuzhiyun			i2c1_pins: i2c1-pins {
327*4882a593Smuzhiyun				pins = "PH5", "PH6";
328*4882a593Smuzhiyun				function = "i2c1";
329*4882a593Smuzhiyun			};
330*4882a593Smuzhiyun
331*4882a593Smuzhiyun			i2c2_pins: i2c2-pins {
332*4882a593Smuzhiyun				pins = "PD23", "PD24";
333*4882a593Smuzhiyun				function = "i2c2";
334*4882a593Smuzhiyun			};
335*4882a593Smuzhiyun
336*4882a593Smuzhiyun			mmc0_pins: mmc0-pins {
337*4882a593Smuzhiyun				pins = "PF0", "PF1", "PF2", "PF3",
338*4882a593Smuzhiyun				       "PF4", "PF5";
339*4882a593Smuzhiyun				function = "mmc0";
340*4882a593Smuzhiyun				drive-strength = <30>;
341*4882a593Smuzhiyun				bias-pull-up;
342*4882a593Smuzhiyun			};
343*4882a593Smuzhiyun
344*4882a593Smuzhiyun			/omit-if-no-ref/
345*4882a593Smuzhiyun			mmc1_pins: mmc1-pins {
346*4882a593Smuzhiyun				pins = "PG0", "PG1", "PG2", "PG3",
347*4882a593Smuzhiyun				       "PG4", "PG5";
348*4882a593Smuzhiyun				function = "mmc1";
349*4882a593Smuzhiyun				drive-strength = <30>;
350*4882a593Smuzhiyun				bias-pull-up;
351*4882a593Smuzhiyun			};
352*4882a593Smuzhiyun
353*4882a593Smuzhiyun			mmc2_pins: mmc2-pins {
354*4882a593Smuzhiyun				pins = "PC1", "PC4", "PC5", "PC6",
355*4882a593Smuzhiyun				       "PC7", "PC8", "PC9", "PC10",
356*4882a593Smuzhiyun				       "PC11", "PC12", "PC13", "PC14";
357*4882a593Smuzhiyun				function = "mmc2";
358*4882a593Smuzhiyun				drive-strength = <30>;
359*4882a593Smuzhiyun				bias-pull-up;
360*4882a593Smuzhiyun			};
361*4882a593Smuzhiyun
362*4882a593Smuzhiyun			/omit-if-no-ref/
363*4882a593Smuzhiyun			spi0_pins: spi0-pins {
364*4882a593Smuzhiyun				pins = "PC0", "PC2", "PC3";
365*4882a593Smuzhiyun				function = "spi0";
366*4882a593Smuzhiyun			};
367*4882a593Smuzhiyun
368*4882a593Smuzhiyun			/* pin shared with MMC2-CMD (eMMC) */
369*4882a593Smuzhiyun			/omit-if-no-ref/
370*4882a593Smuzhiyun			spi0_cs_pin: spi0-cs-pin {
371*4882a593Smuzhiyun				pins = "PC5";
372*4882a593Smuzhiyun				function = "spi0";
373*4882a593Smuzhiyun			};
374*4882a593Smuzhiyun
375*4882a593Smuzhiyun			/omit-if-no-ref/
376*4882a593Smuzhiyun			spi1_pins: spi1-pins {
377*4882a593Smuzhiyun				pins = "PH4", "PH5", "PH6";
378*4882a593Smuzhiyun				function = "spi1";
379*4882a593Smuzhiyun			};
380*4882a593Smuzhiyun
381*4882a593Smuzhiyun			/omit-if-no-ref/
382*4882a593Smuzhiyun			spi1_cs_pin: spi1-cs-pin {
383*4882a593Smuzhiyun				pins = "PH3";
384*4882a593Smuzhiyun				function = "spi1";
385*4882a593Smuzhiyun			};
386*4882a593Smuzhiyun
387*4882a593Smuzhiyun			spdif_tx_pin: spdif-tx-pin {
388*4882a593Smuzhiyun				pins = "PH7";
389*4882a593Smuzhiyun				function = "spdif";
390*4882a593Smuzhiyun			};
391*4882a593Smuzhiyun
392*4882a593Smuzhiyun			uart0_ph_pins: uart0-ph-pins {
393*4882a593Smuzhiyun				pins = "PH0", "PH1";
394*4882a593Smuzhiyun				function = "uart0";
395*4882a593Smuzhiyun			};
396*4882a593Smuzhiyun
397*4882a593Smuzhiyun			uart1_pins: uart1-pins {
398*4882a593Smuzhiyun				pins = "PG6", "PG7";
399*4882a593Smuzhiyun				function = "uart1";
400*4882a593Smuzhiyun			};
401*4882a593Smuzhiyun
402*4882a593Smuzhiyun			uart1_rts_cts_pins: uart1-rts-cts-pins {
403*4882a593Smuzhiyun				pins = "PG8", "PG9";
404*4882a593Smuzhiyun				function = "uart1";
405*4882a593Smuzhiyun			};
406*4882a593Smuzhiyun		};
407*4882a593Smuzhiyun
408*4882a593Smuzhiyun		gic: interrupt-controller@3021000 {
409*4882a593Smuzhiyun			compatible = "arm,gic-400";
410*4882a593Smuzhiyun			reg = <0x03021000 0x1000>,
411*4882a593Smuzhiyun			      <0x03022000 0x2000>,
412*4882a593Smuzhiyun			      <0x03024000 0x2000>,
413*4882a593Smuzhiyun			      <0x03026000 0x2000>;
414*4882a593Smuzhiyun			interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>;
415*4882a593Smuzhiyun			interrupt-controller;
416*4882a593Smuzhiyun			#interrupt-cells = <3>;
417*4882a593Smuzhiyun		};
418*4882a593Smuzhiyun
419*4882a593Smuzhiyun		iommu: iommu@30f0000 {
420*4882a593Smuzhiyun			compatible = "allwinner,sun50i-h6-iommu";
421*4882a593Smuzhiyun			reg = <0x030f0000 0x10000>;
422*4882a593Smuzhiyun			interrupts = <GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>;
423*4882a593Smuzhiyun			clocks = <&ccu CLK_BUS_IOMMU>;
424*4882a593Smuzhiyun			resets = <&ccu RST_BUS_IOMMU>;
425*4882a593Smuzhiyun			#iommu-cells = <1>;
426*4882a593Smuzhiyun		};
427*4882a593Smuzhiyun
428*4882a593Smuzhiyun		mmc0: mmc@4020000 {
429*4882a593Smuzhiyun			compatible = "allwinner,sun50i-h6-mmc",
430*4882a593Smuzhiyun				     "allwinner,sun50i-a64-mmc";
431*4882a593Smuzhiyun			reg = <0x04020000 0x1000>;
432*4882a593Smuzhiyun			clocks = <&ccu CLK_BUS_MMC0>, <&ccu CLK_MMC0>;
433*4882a593Smuzhiyun			clock-names = "ahb", "mmc";
434*4882a593Smuzhiyun			resets = <&ccu RST_BUS_MMC0>;
435*4882a593Smuzhiyun			reset-names = "ahb";
436*4882a593Smuzhiyun			interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>;
437*4882a593Smuzhiyun			pinctrl-names = "default";
438*4882a593Smuzhiyun			pinctrl-0 = <&mmc0_pins>;
439*4882a593Smuzhiyun			max-frequency = <150000000>;
440*4882a593Smuzhiyun			status = "disabled";
441*4882a593Smuzhiyun			#address-cells = <1>;
442*4882a593Smuzhiyun			#size-cells = <0>;
443*4882a593Smuzhiyun		};
444*4882a593Smuzhiyun
445*4882a593Smuzhiyun		mmc1: mmc@4021000 {
446*4882a593Smuzhiyun			compatible = "allwinner,sun50i-h6-mmc",
447*4882a593Smuzhiyun				     "allwinner,sun50i-a64-mmc";
448*4882a593Smuzhiyun			reg = <0x04021000 0x1000>;
449*4882a593Smuzhiyun			clocks = <&ccu CLK_BUS_MMC1>, <&ccu CLK_MMC1>;
450*4882a593Smuzhiyun			clock-names = "ahb", "mmc";
451*4882a593Smuzhiyun			resets = <&ccu RST_BUS_MMC1>;
452*4882a593Smuzhiyun			reset-names = "ahb";
453*4882a593Smuzhiyun			interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>;
454*4882a593Smuzhiyun			pinctrl-names = "default";
455*4882a593Smuzhiyun			pinctrl-0 = <&mmc1_pins>;
456*4882a593Smuzhiyun			max-frequency = <150000000>;
457*4882a593Smuzhiyun			status = "disabled";
458*4882a593Smuzhiyun			#address-cells = <1>;
459*4882a593Smuzhiyun			#size-cells = <0>;
460*4882a593Smuzhiyun		};
461*4882a593Smuzhiyun
462*4882a593Smuzhiyun		mmc2: mmc@4022000 {
463*4882a593Smuzhiyun			compatible = "allwinner,sun50i-h6-emmc",
464*4882a593Smuzhiyun				     "allwinner,sun50i-a64-emmc";
465*4882a593Smuzhiyun			reg = <0x04022000 0x1000>;
466*4882a593Smuzhiyun			clocks = <&ccu CLK_BUS_MMC2>, <&ccu CLK_MMC2>;
467*4882a593Smuzhiyun			clock-names = "ahb", "mmc";
468*4882a593Smuzhiyun			resets = <&ccu RST_BUS_MMC2>;
469*4882a593Smuzhiyun			reset-names = "ahb";
470*4882a593Smuzhiyun			interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>;
471*4882a593Smuzhiyun			pinctrl-names = "default";
472*4882a593Smuzhiyun			pinctrl-0 = <&mmc2_pins>;
473*4882a593Smuzhiyun			max-frequency = <150000000>;
474*4882a593Smuzhiyun			status = "disabled";
475*4882a593Smuzhiyun			#address-cells = <1>;
476*4882a593Smuzhiyun			#size-cells = <0>;
477*4882a593Smuzhiyun		};
478*4882a593Smuzhiyun
479*4882a593Smuzhiyun		uart0: serial@5000000 {
480*4882a593Smuzhiyun			compatible = "snps,dw-apb-uart";
481*4882a593Smuzhiyun			reg = <0x05000000 0x400>;
482*4882a593Smuzhiyun			interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>;
483*4882a593Smuzhiyun			reg-shift = <2>;
484*4882a593Smuzhiyun			reg-io-width = <4>;
485*4882a593Smuzhiyun			clocks = <&ccu CLK_BUS_UART0>;
486*4882a593Smuzhiyun			resets = <&ccu RST_BUS_UART0>;
487*4882a593Smuzhiyun			status = "disabled";
488*4882a593Smuzhiyun		};
489*4882a593Smuzhiyun
490*4882a593Smuzhiyun		uart1: serial@5000400 {
491*4882a593Smuzhiyun			compatible = "snps,dw-apb-uart";
492*4882a593Smuzhiyun			reg = <0x05000400 0x400>;
493*4882a593Smuzhiyun			interrupts = <GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>;
494*4882a593Smuzhiyun			reg-shift = <2>;
495*4882a593Smuzhiyun			reg-io-width = <4>;
496*4882a593Smuzhiyun			clocks = <&ccu CLK_BUS_UART1>;
497*4882a593Smuzhiyun			resets = <&ccu RST_BUS_UART1>;
498*4882a593Smuzhiyun			status = "disabled";
499*4882a593Smuzhiyun		};
500*4882a593Smuzhiyun
501*4882a593Smuzhiyun		uart2: serial@5000800 {
502*4882a593Smuzhiyun			compatible = "snps,dw-apb-uart";
503*4882a593Smuzhiyun			reg = <0x05000800 0x400>;
504*4882a593Smuzhiyun			interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>;
505*4882a593Smuzhiyun			reg-shift = <2>;
506*4882a593Smuzhiyun			reg-io-width = <4>;
507*4882a593Smuzhiyun			clocks = <&ccu CLK_BUS_UART2>;
508*4882a593Smuzhiyun			resets = <&ccu RST_BUS_UART2>;
509*4882a593Smuzhiyun			status = "disabled";
510*4882a593Smuzhiyun		};
511*4882a593Smuzhiyun
512*4882a593Smuzhiyun		uart3: serial@5000c00 {
513*4882a593Smuzhiyun			compatible = "snps,dw-apb-uart";
514*4882a593Smuzhiyun			reg = <0x05000c00 0x400>;
515*4882a593Smuzhiyun			interrupts = <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>;
516*4882a593Smuzhiyun			reg-shift = <2>;
517*4882a593Smuzhiyun			reg-io-width = <4>;
518*4882a593Smuzhiyun			clocks = <&ccu CLK_BUS_UART3>;
519*4882a593Smuzhiyun			resets = <&ccu RST_BUS_UART3>;
520*4882a593Smuzhiyun			status = "disabled";
521*4882a593Smuzhiyun		};
522*4882a593Smuzhiyun
523*4882a593Smuzhiyun		i2c0: i2c@5002000 {
524*4882a593Smuzhiyun			compatible = "allwinner,sun50i-h6-i2c",
525*4882a593Smuzhiyun				     "allwinner,sun6i-a31-i2c";
526*4882a593Smuzhiyun			reg = <0x05002000 0x400>;
527*4882a593Smuzhiyun			interrupts = <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>;
528*4882a593Smuzhiyun			clocks = <&ccu CLK_BUS_I2C0>;
529*4882a593Smuzhiyun			resets = <&ccu RST_BUS_I2C0>;
530*4882a593Smuzhiyun			pinctrl-names = "default";
531*4882a593Smuzhiyun			pinctrl-0 = <&i2c0_pins>;
532*4882a593Smuzhiyun			status = "disabled";
533*4882a593Smuzhiyun			#address-cells = <1>;
534*4882a593Smuzhiyun			#size-cells = <0>;
535*4882a593Smuzhiyun		};
536*4882a593Smuzhiyun
537*4882a593Smuzhiyun		i2c1: i2c@5002400 {
538*4882a593Smuzhiyun			compatible = "allwinner,sun50i-h6-i2c",
539*4882a593Smuzhiyun				     "allwinner,sun6i-a31-i2c";
540*4882a593Smuzhiyun			reg = <0x05002400 0x400>;
541*4882a593Smuzhiyun			interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>;
542*4882a593Smuzhiyun			clocks = <&ccu CLK_BUS_I2C1>;
543*4882a593Smuzhiyun			resets = <&ccu RST_BUS_I2C1>;
544*4882a593Smuzhiyun			pinctrl-names = "default";
545*4882a593Smuzhiyun			pinctrl-0 = <&i2c1_pins>;
546*4882a593Smuzhiyun			status = "disabled";
547*4882a593Smuzhiyun			#address-cells = <1>;
548*4882a593Smuzhiyun			#size-cells = <0>;
549*4882a593Smuzhiyun		};
550*4882a593Smuzhiyun
551*4882a593Smuzhiyun		i2c2: i2c@5002800 {
552*4882a593Smuzhiyun			compatible = "allwinner,sun50i-h6-i2c",
553*4882a593Smuzhiyun				     "allwinner,sun6i-a31-i2c";
554*4882a593Smuzhiyun			reg = <0x05002800 0x400>;
555*4882a593Smuzhiyun			interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>;
556*4882a593Smuzhiyun			clocks = <&ccu CLK_BUS_I2C2>;
557*4882a593Smuzhiyun			resets = <&ccu RST_BUS_I2C2>;
558*4882a593Smuzhiyun			pinctrl-names = "default";
559*4882a593Smuzhiyun			pinctrl-0 = <&i2c2_pins>;
560*4882a593Smuzhiyun			status = "disabled";
561*4882a593Smuzhiyun			#address-cells = <1>;
562*4882a593Smuzhiyun			#size-cells = <0>;
563*4882a593Smuzhiyun		};
564*4882a593Smuzhiyun
565*4882a593Smuzhiyun		spi0: spi@5010000 {
566*4882a593Smuzhiyun			compatible = "allwinner,sun50i-h6-spi",
567*4882a593Smuzhiyun				     "allwinner,sun8i-h3-spi";
568*4882a593Smuzhiyun			reg = <0x05010000 0x1000>;
569*4882a593Smuzhiyun			interrupts = <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>;
570*4882a593Smuzhiyun			clocks = <&ccu CLK_BUS_SPI0>, <&ccu CLK_SPI0>;
571*4882a593Smuzhiyun			clock-names = "ahb", "mod";
572*4882a593Smuzhiyun			dmas = <&dma 22>, <&dma 22>;
573*4882a593Smuzhiyun			dma-names = "rx", "tx";
574*4882a593Smuzhiyun			resets = <&ccu RST_BUS_SPI0>;
575*4882a593Smuzhiyun			status = "disabled";
576*4882a593Smuzhiyun			#address-cells = <1>;
577*4882a593Smuzhiyun			#size-cells = <0>;
578*4882a593Smuzhiyun		};
579*4882a593Smuzhiyun
580*4882a593Smuzhiyun		spi1: spi@5011000 {
581*4882a593Smuzhiyun			compatible = "allwinner,sun50i-h6-spi",
582*4882a593Smuzhiyun				     "allwinner,sun8i-h3-spi";
583*4882a593Smuzhiyun			reg = <0x05011000 0x1000>;
584*4882a593Smuzhiyun			interrupts = <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>;
585*4882a593Smuzhiyun			clocks = <&ccu CLK_BUS_SPI1>, <&ccu CLK_SPI1>;
586*4882a593Smuzhiyun			clock-names = "ahb", "mod";
587*4882a593Smuzhiyun			dmas = <&dma 23>, <&dma 23>;
588*4882a593Smuzhiyun			dma-names = "rx", "tx";
589*4882a593Smuzhiyun			resets = <&ccu RST_BUS_SPI1>;
590*4882a593Smuzhiyun			status = "disabled";
591*4882a593Smuzhiyun			#address-cells = <1>;
592*4882a593Smuzhiyun			#size-cells = <0>;
593*4882a593Smuzhiyun		};
594*4882a593Smuzhiyun
595*4882a593Smuzhiyun		emac: ethernet@5020000 {
596*4882a593Smuzhiyun			compatible = "allwinner,sun50i-h6-emac",
597*4882a593Smuzhiyun				     "allwinner,sun50i-a64-emac";
598*4882a593Smuzhiyun			syscon = <&syscon>;
599*4882a593Smuzhiyun			reg = <0x05020000 0x10000>;
600*4882a593Smuzhiyun			interrupts = <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>;
601*4882a593Smuzhiyun			interrupt-names = "macirq";
602*4882a593Smuzhiyun			resets = <&ccu RST_BUS_EMAC>;
603*4882a593Smuzhiyun			reset-names = "stmmaceth";
604*4882a593Smuzhiyun			clocks = <&ccu CLK_BUS_EMAC>;
605*4882a593Smuzhiyun			clock-names = "stmmaceth";
606*4882a593Smuzhiyun			status = "disabled";
607*4882a593Smuzhiyun
608*4882a593Smuzhiyun			mdio: mdio {
609*4882a593Smuzhiyun				compatible = "snps,dwmac-mdio";
610*4882a593Smuzhiyun				#address-cells = <1>;
611*4882a593Smuzhiyun				#size-cells = <0>;
612*4882a593Smuzhiyun			};
613*4882a593Smuzhiyun		};
614*4882a593Smuzhiyun
615*4882a593Smuzhiyun		spdif: spdif@5093000 {
616*4882a593Smuzhiyun			#sound-dai-cells = <0>;
617*4882a593Smuzhiyun			compatible = "allwinner,sun50i-h6-spdif";
618*4882a593Smuzhiyun			reg = <0x05093000 0x400>;
619*4882a593Smuzhiyun			interrupts = <GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH>;
620*4882a593Smuzhiyun			clocks = <&ccu CLK_BUS_SPDIF>, <&ccu CLK_SPDIF>;
621*4882a593Smuzhiyun			clock-names = "apb", "spdif";
622*4882a593Smuzhiyun			resets = <&ccu RST_BUS_SPDIF>;
623*4882a593Smuzhiyun			dmas = <&dma 2>;
624*4882a593Smuzhiyun			dma-names = "tx";
625*4882a593Smuzhiyun			pinctrl-names = "default";
626*4882a593Smuzhiyun			pinctrl-0 = <&spdif_tx_pin>;
627*4882a593Smuzhiyun			status = "disabled";
628*4882a593Smuzhiyun		};
629*4882a593Smuzhiyun
630*4882a593Smuzhiyun		usb2otg: usb@5100000 {
631*4882a593Smuzhiyun			compatible = "allwinner,sun50i-h6-musb",
632*4882a593Smuzhiyun				     "allwinner,sun8i-a33-musb";
633*4882a593Smuzhiyun			reg = <0x05100000 0x0400>;
634*4882a593Smuzhiyun			clocks = <&ccu CLK_BUS_OTG>;
635*4882a593Smuzhiyun			resets = <&ccu RST_BUS_OTG>;
636*4882a593Smuzhiyun			interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
637*4882a593Smuzhiyun			interrupt-names = "mc";
638*4882a593Smuzhiyun			phys = <&usb2phy 0>;
639*4882a593Smuzhiyun			phy-names = "usb";
640*4882a593Smuzhiyun			extcon = <&usb2phy 0>;
641*4882a593Smuzhiyun			status = "disabled";
642*4882a593Smuzhiyun		};
643*4882a593Smuzhiyun
644*4882a593Smuzhiyun		usb2phy: phy@5100400 {
645*4882a593Smuzhiyun			compatible = "allwinner,sun50i-h6-usb-phy";
646*4882a593Smuzhiyun			reg = <0x05100400 0x24>,
647*4882a593Smuzhiyun			      <0x05101800 0x4>,
648*4882a593Smuzhiyun			      <0x05311800 0x4>;
649*4882a593Smuzhiyun			reg-names = "phy_ctrl",
650*4882a593Smuzhiyun				    "pmu0",
651*4882a593Smuzhiyun				    "pmu3";
652*4882a593Smuzhiyun			clocks = <&ccu CLK_USB_PHY0>,
653*4882a593Smuzhiyun				 <&ccu CLK_USB_PHY3>;
654*4882a593Smuzhiyun			clock-names = "usb0_phy",
655*4882a593Smuzhiyun				      "usb3_phy";
656*4882a593Smuzhiyun			resets = <&ccu RST_USB_PHY0>,
657*4882a593Smuzhiyun				 <&ccu RST_USB_PHY3>;
658*4882a593Smuzhiyun			reset-names = "usb0_reset",
659*4882a593Smuzhiyun				      "usb3_reset";
660*4882a593Smuzhiyun			status = "disabled";
661*4882a593Smuzhiyun			#phy-cells = <1>;
662*4882a593Smuzhiyun		};
663*4882a593Smuzhiyun
664*4882a593Smuzhiyun		ehci0: usb@5101000 {
665*4882a593Smuzhiyun			compatible = "allwinner,sun50i-h6-ehci", "generic-ehci";
666*4882a593Smuzhiyun			reg = <0x05101000 0x100>;
667*4882a593Smuzhiyun			interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
668*4882a593Smuzhiyun			clocks = <&ccu CLK_BUS_OHCI0>,
669*4882a593Smuzhiyun				 <&ccu CLK_BUS_EHCI0>,
670*4882a593Smuzhiyun				 <&ccu CLK_USB_OHCI0>;
671*4882a593Smuzhiyun			resets = <&ccu RST_BUS_OHCI0>,
672*4882a593Smuzhiyun				 <&ccu RST_BUS_EHCI0>;
673*4882a593Smuzhiyun			phys = <&usb2phy 0>;
674*4882a593Smuzhiyun			phy-names = "usb";
675*4882a593Smuzhiyun			status = "disabled";
676*4882a593Smuzhiyun		};
677*4882a593Smuzhiyun
678*4882a593Smuzhiyun		ohci0: usb@5101400 {
679*4882a593Smuzhiyun			compatible = "allwinner,sun50i-h6-ohci", "generic-ohci";
680*4882a593Smuzhiyun			reg = <0x05101400 0x100>;
681*4882a593Smuzhiyun			interrupts = <GIC_SPI 25 IRQ_TYPE_LEVEL_HIGH>;
682*4882a593Smuzhiyun			clocks = <&ccu CLK_BUS_OHCI0>,
683*4882a593Smuzhiyun				 <&ccu CLK_USB_OHCI0>;
684*4882a593Smuzhiyun			resets = <&ccu RST_BUS_OHCI0>;
685*4882a593Smuzhiyun			phys = <&usb2phy 0>;
686*4882a593Smuzhiyun			phy-names = "usb";
687*4882a593Smuzhiyun			status = "disabled";
688*4882a593Smuzhiyun		};
689*4882a593Smuzhiyun
690*4882a593Smuzhiyun		dwc3: dwc3@5200000 {
691*4882a593Smuzhiyun			compatible = "snps,dwc3";
692*4882a593Smuzhiyun			reg = <0x05200000 0x10000>;
693*4882a593Smuzhiyun			interrupts = <GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH>;
694*4882a593Smuzhiyun			clocks = <&ccu CLK_BUS_XHCI>,
695*4882a593Smuzhiyun				 <&ccu CLK_BUS_XHCI>,
696*4882a593Smuzhiyun				 <&rtc 0>;
697*4882a593Smuzhiyun			clock-names = "ref", "bus_early", "suspend";
698*4882a593Smuzhiyun			resets = <&ccu RST_BUS_XHCI>;
699*4882a593Smuzhiyun			/*
700*4882a593Smuzhiyun			 * The datasheet of the chip doesn't declare the
701*4882a593Smuzhiyun			 * peripheral function, and there's no boards known
702*4882a593Smuzhiyun			 * to have a USB Type-B port routed to the port.
703*4882a593Smuzhiyun			 * In addition, no one has tested the peripheral
704*4882a593Smuzhiyun			 * function yet.
705*4882a593Smuzhiyun			 * So set the dr_mode to "host" in the DTSI file.
706*4882a593Smuzhiyun			 */
707*4882a593Smuzhiyun			dr_mode = "host";
708*4882a593Smuzhiyun			phys = <&usb3phy>;
709*4882a593Smuzhiyun			phy-names = "usb3-phy";
710*4882a593Smuzhiyun			status = "disabled";
711*4882a593Smuzhiyun		};
712*4882a593Smuzhiyun
713*4882a593Smuzhiyun		usb3phy: phy@5210000 {
714*4882a593Smuzhiyun			compatible = "allwinner,sun50i-h6-usb3-phy";
715*4882a593Smuzhiyun			reg = <0x5210000 0x10000>;
716*4882a593Smuzhiyun			clocks = <&ccu CLK_USB_PHY1>;
717*4882a593Smuzhiyun			resets = <&ccu RST_USB_PHY1>;
718*4882a593Smuzhiyun			#phy-cells = <0>;
719*4882a593Smuzhiyun			status = "disabled";
720*4882a593Smuzhiyun		};
721*4882a593Smuzhiyun
722*4882a593Smuzhiyun		ehci3: usb@5311000 {
723*4882a593Smuzhiyun			compatible = "allwinner,sun50i-h6-ehci", "generic-ehci";
724*4882a593Smuzhiyun			reg = <0x05311000 0x100>;
725*4882a593Smuzhiyun			interrupts = <GIC_SPI 28 IRQ_TYPE_LEVEL_HIGH>;
726*4882a593Smuzhiyun			clocks = <&ccu CLK_BUS_OHCI3>,
727*4882a593Smuzhiyun				 <&ccu CLK_BUS_EHCI3>,
728*4882a593Smuzhiyun				 <&ccu CLK_USB_OHCI3>;
729*4882a593Smuzhiyun			resets = <&ccu RST_BUS_OHCI3>,
730*4882a593Smuzhiyun				 <&ccu RST_BUS_EHCI3>;
731*4882a593Smuzhiyun			phys = <&usb2phy 3>;
732*4882a593Smuzhiyun			phy-names = "usb";
733*4882a593Smuzhiyun			status = "disabled";
734*4882a593Smuzhiyun		};
735*4882a593Smuzhiyun
736*4882a593Smuzhiyun		ohci3: usb@5311400 {
737*4882a593Smuzhiyun			compatible = "allwinner,sun50i-h6-ohci", "generic-ohci";
738*4882a593Smuzhiyun			reg = <0x05311400 0x100>;
739*4882a593Smuzhiyun			interrupts = <GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>;
740*4882a593Smuzhiyun			clocks = <&ccu CLK_BUS_OHCI3>,
741*4882a593Smuzhiyun				 <&ccu CLK_USB_OHCI3>;
742*4882a593Smuzhiyun			resets = <&ccu RST_BUS_OHCI3>;
743*4882a593Smuzhiyun			phys = <&usb2phy 3>;
744*4882a593Smuzhiyun			phy-names = "usb";
745*4882a593Smuzhiyun			status = "disabled";
746*4882a593Smuzhiyun		};
747*4882a593Smuzhiyun
748*4882a593Smuzhiyun		hdmi: hdmi@6000000 {
749*4882a593Smuzhiyun			compatible = "allwinner,sun50i-h6-dw-hdmi";
750*4882a593Smuzhiyun			reg = <0x06000000 0x10000>;
751*4882a593Smuzhiyun			reg-io-width = <1>;
752*4882a593Smuzhiyun			interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>;
753*4882a593Smuzhiyun			clocks = <&ccu CLK_BUS_HDMI>, <&ccu CLK_HDMI_SLOW>,
754*4882a593Smuzhiyun				 <&ccu CLK_HDMI>, <&ccu CLK_HDMI_CEC>,
755*4882a593Smuzhiyun				 <&ccu CLK_HDCP>, <&ccu CLK_BUS_HDCP>;
756*4882a593Smuzhiyun			clock-names = "iahb", "isfr", "tmds", "cec", "hdcp",
757*4882a593Smuzhiyun				      "hdcp-bus";
758*4882a593Smuzhiyun			resets = <&ccu RST_BUS_HDMI_SUB>, <&ccu RST_BUS_HDCP>;
759*4882a593Smuzhiyun			reset-names = "ctrl", "hdcp";
760*4882a593Smuzhiyun			phys = <&hdmi_phy>;
761*4882a593Smuzhiyun			phy-names = "phy";
762*4882a593Smuzhiyun			pinctrl-names = "default";
763*4882a593Smuzhiyun			pinctrl-0 = <&hdmi_pins>;
764*4882a593Smuzhiyun			status = "disabled";
765*4882a593Smuzhiyun
766*4882a593Smuzhiyun			ports {
767*4882a593Smuzhiyun				#address-cells = <1>;
768*4882a593Smuzhiyun				#size-cells = <0>;
769*4882a593Smuzhiyun
770*4882a593Smuzhiyun				hdmi_in: port@0 {
771*4882a593Smuzhiyun					reg = <0>;
772*4882a593Smuzhiyun
773*4882a593Smuzhiyun					hdmi_in_tcon_top: endpoint {
774*4882a593Smuzhiyun						remote-endpoint = <&tcon_top_hdmi_out_hdmi>;
775*4882a593Smuzhiyun					};
776*4882a593Smuzhiyun				};
777*4882a593Smuzhiyun
778*4882a593Smuzhiyun				hdmi_out: port@1 {
779*4882a593Smuzhiyun					reg = <1>;
780*4882a593Smuzhiyun				};
781*4882a593Smuzhiyun			};
782*4882a593Smuzhiyun		};
783*4882a593Smuzhiyun
784*4882a593Smuzhiyun		hdmi_phy: hdmi-phy@6010000 {
785*4882a593Smuzhiyun			compatible = "allwinner,sun50i-h6-hdmi-phy";
786*4882a593Smuzhiyun			reg = <0x06010000 0x10000>;
787*4882a593Smuzhiyun			clocks = <&ccu CLK_BUS_HDMI>, <&ccu CLK_HDMI_SLOW>;
788*4882a593Smuzhiyun			clock-names = "bus", "mod";
789*4882a593Smuzhiyun			resets = <&ccu RST_BUS_HDMI>;
790*4882a593Smuzhiyun			reset-names = "phy";
791*4882a593Smuzhiyun			#phy-cells = <0>;
792*4882a593Smuzhiyun		};
793*4882a593Smuzhiyun
794*4882a593Smuzhiyun		tcon_top: tcon-top@6510000 {
795*4882a593Smuzhiyun			compatible = "allwinner,sun50i-h6-tcon-top";
796*4882a593Smuzhiyun			reg = <0x06510000 0x1000>;
797*4882a593Smuzhiyun			clocks = <&ccu CLK_BUS_TCON_TOP>,
798*4882a593Smuzhiyun				 <&ccu CLK_TCON_TV0>;
799*4882a593Smuzhiyun			clock-names = "bus",
800*4882a593Smuzhiyun				      "tcon-tv0";
801*4882a593Smuzhiyun			clock-output-names = "tcon-top-tv0";
802*4882a593Smuzhiyun			resets = <&ccu RST_BUS_TCON_TOP>;
803*4882a593Smuzhiyun			#clock-cells = <1>;
804*4882a593Smuzhiyun
805*4882a593Smuzhiyun			ports {
806*4882a593Smuzhiyun				#address-cells = <1>;
807*4882a593Smuzhiyun				#size-cells = <0>;
808*4882a593Smuzhiyun
809*4882a593Smuzhiyun				tcon_top_mixer0_in: port@0 {
810*4882a593Smuzhiyun					#address-cells = <1>;
811*4882a593Smuzhiyun					#size-cells = <0>;
812*4882a593Smuzhiyun					reg = <0>;
813*4882a593Smuzhiyun
814*4882a593Smuzhiyun					tcon_top_mixer0_in_mixer0: endpoint@0 {
815*4882a593Smuzhiyun						reg = <0>;
816*4882a593Smuzhiyun						remote-endpoint = <&mixer0_out_tcon_top_mixer0>;
817*4882a593Smuzhiyun					};
818*4882a593Smuzhiyun				};
819*4882a593Smuzhiyun
820*4882a593Smuzhiyun				tcon_top_mixer0_out: port@1 {
821*4882a593Smuzhiyun					#address-cells = <1>;
822*4882a593Smuzhiyun					#size-cells = <0>;
823*4882a593Smuzhiyun					reg = <1>;
824*4882a593Smuzhiyun
825*4882a593Smuzhiyun					tcon_top_mixer0_out_tcon_tv: endpoint@2 {
826*4882a593Smuzhiyun						reg = <2>;
827*4882a593Smuzhiyun						remote-endpoint = <&tcon_tv_in_tcon_top_mixer0>;
828*4882a593Smuzhiyun					};
829*4882a593Smuzhiyun				};
830*4882a593Smuzhiyun
831*4882a593Smuzhiyun				tcon_top_hdmi_in: port@4 {
832*4882a593Smuzhiyun					#address-cells = <1>;
833*4882a593Smuzhiyun					#size-cells = <0>;
834*4882a593Smuzhiyun					reg = <4>;
835*4882a593Smuzhiyun
836*4882a593Smuzhiyun					tcon_top_hdmi_in_tcon_tv: endpoint@0 {
837*4882a593Smuzhiyun						reg = <0>;
838*4882a593Smuzhiyun						remote-endpoint = <&tcon_tv_out_tcon_top>;
839*4882a593Smuzhiyun					};
840*4882a593Smuzhiyun				};
841*4882a593Smuzhiyun
842*4882a593Smuzhiyun				tcon_top_hdmi_out: port@5 {
843*4882a593Smuzhiyun					reg = <5>;
844*4882a593Smuzhiyun
845*4882a593Smuzhiyun					tcon_top_hdmi_out_hdmi: endpoint {
846*4882a593Smuzhiyun						remote-endpoint = <&hdmi_in_tcon_top>;
847*4882a593Smuzhiyun					};
848*4882a593Smuzhiyun				};
849*4882a593Smuzhiyun			};
850*4882a593Smuzhiyun		};
851*4882a593Smuzhiyun
852*4882a593Smuzhiyun		tcon_tv: lcd-controller@6515000 {
853*4882a593Smuzhiyun			compatible = "allwinner,sun50i-h6-tcon-tv",
854*4882a593Smuzhiyun				     "allwinner,sun8i-r40-tcon-tv";
855*4882a593Smuzhiyun			reg = <0x06515000 0x1000>;
856*4882a593Smuzhiyun			interrupts = <GIC_SPI 66 IRQ_TYPE_LEVEL_HIGH>;
857*4882a593Smuzhiyun			clocks = <&ccu CLK_BUS_TCON_TV0>,
858*4882a593Smuzhiyun				 <&tcon_top CLK_TCON_TOP_TV0>;
859*4882a593Smuzhiyun			clock-names = "ahb",
860*4882a593Smuzhiyun				      "tcon-ch1";
861*4882a593Smuzhiyun			resets = <&ccu RST_BUS_TCON_TV0>;
862*4882a593Smuzhiyun			reset-names = "lcd";
863*4882a593Smuzhiyun
864*4882a593Smuzhiyun			ports {
865*4882a593Smuzhiyun				#address-cells = <1>;
866*4882a593Smuzhiyun				#size-cells = <0>;
867*4882a593Smuzhiyun
868*4882a593Smuzhiyun				tcon_tv_in: port@0 {
869*4882a593Smuzhiyun					reg = <0>;
870*4882a593Smuzhiyun
871*4882a593Smuzhiyun					tcon_tv_in_tcon_top_mixer0: endpoint {
872*4882a593Smuzhiyun						remote-endpoint = <&tcon_top_mixer0_out_tcon_tv>;
873*4882a593Smuzhiyun					};
874*4882a593Smuzhiyun				};
875*4882a593Smuzhiyun
876*4882a593Smuzhiyun				tcon_tv_out: port@1 {
877*4882a593Smuzhiyun					#address-cells = <1>;
878*4882a593Smuzhiyun					#size-cells = <0>;
879*4882a593Smuzhiyun					reg = <1>;
880*4882a593Smuzhiyun
881*4882a593Smuzhiyun					tcon_tv_out_tcon_top: endpoint@1 {
882*4882a593Smuzhiyun						reg = <1>;
883*4882a593Smuzhiyun						remote-endpoint = <&tcon_top_hdmi_in_tcon_tv>;
884*4882a593Smuzhiyun					};
885*4882a593Smuzhiyun				};
886*4882a593Smuzhiyun			};
887*4882a593Smuzhiyun		};
888*4882a593Smuzhiyun
889*4882a593Smuzhiyun		rtc: rtc@7000000 {
890*4882a593Smuzhiyun			compatible = "allwinner,sun50i-h6-rtc";
891*4882a593Smuzhiyun			reg = <0x07000000 0x400>;
892*4882a593Smuzhiyun			interrupts = <GIC_SPI 101 IRQ_TYPE_LEVEL_HIGH>,
893*4882a593Smuzhiyun				     <GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH>;
894*4882a593Smuzhiyun			clock-output-names = "osc32k", "osc32k-out", "iosc";
895*4882a593Smuzhiyun			#clock-cells = <1>;
896*4882a593Smuzhiyun		};
897*4882a593Smuzhiyun
898*4882a593Smuzhiyun		r_ccu: clock@7010000 {
899*4882a593Smuzhiyun			compatible = "allwinner,sun50i-h6-r-ccu";
900*4882a593Smuzhiyun			reg = <0x07010000 0x400>;
901*4882a593Smuzhiyun			clocks = <&osc24M>, <&rtc 0>, <&rtc 2>,
902*4882a593Smuzhiyun				 <&ccu CLK_PLL_PERIPH0>;
903*4882a593Smuzhiyun			clock-names = "hosc", "losc", "iosc", "pll-periph";
904*4882a593Smuzhiyun			#clock-cells = <1>;
905*4882a593Smuzhiyun			#reset-cells = <1>;
906*4882a593Smuzhiyun		};
907*4882a593Smuzhiyun
908*4882a593Smuzhiyun		r_watchdog: watchdog@7020400 {
909*4882a593Smuzhiyun			compatible = "allwinner,sun50i-h6-wdt",
910*4882a593Smuzhiyun				     "allwinner,sun6i-a31-wdt";
911*4882a593Smuzhiyun			reg = <0x07020400 0x20>;
912*4882a593Smuzhiyun			interrupts = <GIC_SPI 103 IRQ_TYPE_LEVEL_HIGH>;
913*4882a593Smuzhiyun			clocks = <&osc24M>;
914*4882a593Smuzhiyun		};
915*4882a593Smuzhiyun
916*4882a593Smuzhiyun		r_intc: interrupt-controller@7021000 {
917*4882a593Smuzhiyun			compatible = "allwinner,sun50i-h6-r-intc",
918*4882a593Smuzhiyun				     "allwinner,sun6i-a31-r-intc";
919*4882a593Smuzhiyun			interrupt-controller;
920*4882a593Smuzhiyun			#interrupt-cells = <2>;
921*4882a593Smuzhiyun			reg = <0x07021000 0x400>;
922*4882a593Smuzhiyun			interrupts = <GIC_SPI 96 IRQ_TYPE_LEVEL_HIGH>;
923*4882a593Smuzhiyun		};
924*4882a593Smuzhiyun
925*4882a593Smuzhiyun		r_pio: pinctrl@7022000 {
926*4882a593Smuzhiyun			compatible = "allwinner,sun50i-h6-r-pinctrl";
927*4882a593Smuzhiyun			reg = <0x07022000 0x400>;
928*4882a593Smuzhiyun			interrupts = <GIC_SPI 105 IRQ_TYPE_LEVEL_HIGH>,
929*4882a593Smuzhiyun				     <GIC_SPI 111 IRQ_TYPE_LEVEL_HIGH>;
930*4882a593Smuzhiyun			clocks = <&r_ccu CLK_R_APB1>, <&osc24M>, <&rtc 0>;
931*4882a593Smuzhiyun			clock-names = "apb", "hosc", "losc";
932*4882a593Smuzhiyun			gpio-controller;
933*4882a593Smuzhiyun			#gpio-cells = <3>;
934*4882a593Smuzhiyun			interrupt-controller;
935*4882a593Smuzhiyun			#interrupt-cells = <3>;
936*4882a593Smuzhiyun
937*4882a593Smuzhiyun			r_i2c_pins: r-i2c-pins {
938*4882a593Smuzhiyun				pins = "PL0", "PL1";
939*4882a593Smuzhiyun				function = "s_i2c";
940*4882a593Smuzhiyun			};
941*4882a593Smuzhiyun
942*4882a593Smuzhiyun			r_ir_rx_pin: r-ir-rx-pin {
943*4882a593Smuzhiyun				pins = "PL9";
944*4882a593Smuzhiyun				function = "s_cir_rx";
945*4882a593Smuzhiyun			};
946*4882a593Smuzhiyun		};
947*4882a593Smuzhiyun
948*4882a593Smuzhiyun		r_ir: ir@7040000 {
949*4882a593Smuzhiyun				compatible = "allwinner,sun50i-h6-ir",
950*4882a593Smuzhiyun					     "allwinner,sun6i-a31-ir";
951*4882a593Smuzhiyun				reg = <0x07040000 0x400>;
952*4882a593Smuzhiyun				interrupts = <GIC_SPI 109 IRQ_TYPE_LEVEL_HIGH>;
953*4882a593Smuzhiyun				clocks = <&r_ccu CLK_R_APB1_IR>,
954*4882a593Smuzhiyun					 <&r_ccu CLK_IR>;
955*4882a593Smuzhiyun				clock-names = "apb", "ir";
956*4882a593Smuzhiyun				resets = <&r_ccu RST_R_APB1_IR>;
957*4882a593Smuzhiyun				pinctrl-names = "default";
958*4882a593Smuzhiyun				pinctrl-0 = <&r_ir_rx_pin>;
959*4882a593Smuzhiyun				status = "disabled";
960*4882a593Smuzhiyun		};
961*4882a593Smuzhiyun
962*4882a593Smuzhiyun		r_i2c: i2c@7081400 {
963*4882a593Smuzhiyun			compatible = "allwinner,sun50i-h6-i2c",
964*4882a593Smuzhiyun				     "allwinner,sun6i-a31-i2c";
965*4882a593Smuzhiyun			reg = <0x07081400 0x400>;
966*4882a593Smuzhiyun			interrupts = <GIC_SPI 107 IRQ_TYPE_LEVEL_HIGH>;
967*4882a593Smuzhiyun			clocks = <&r_ccu CLK_R_APB2_I2C>;
968*4882a593Smuzhiyun			resets = <&r_ccu RST_R_APB2_I2C>;
969*4882a593Smuzhiyun			pinctrl-names = "default";
970*4882a593Smuzhiyun			pinctrl-0 = <&r_i2c_pins>;
971*4882a593Smuzhiyun			status = "disabled";
972*4882a593Smuzhiyun			#address-cells = <1>;
973*4882a593Smuzhiyun			#size-cells = <0>;
974*4882a593Smuzhiyun		};
975*4882a593Smuzhiyun
976*4882a593Smuzhiyun		ths: thermal-sensor@5070400 {
977*4882a593Smuzhiyun			compatible = "allwinner,sun50i-h6-ths";
978*4882a593Smuzhiyun			reg = <0x05070400 0x100>;
979*4882a593Smuzhiyun			interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>;
980*4882a593Smuzhiyun			clocks = <&ccu CLK_BUS_THS>;
981*4882a593Smuzhiyun			clock-names = "bus";
982*4882a593Smuzhiyun			resets = <&ccu RST_BUS_THS>;
983*4882a593Smuzhiyun			nvmem-cells = <&ths_calibration>;
984*4882a593Smuzhiyun			nvmem-cell-names = "calibration";
985*4882a593Smuzhiyun			#thermal-sensor-cells = <1>;
986*4882a593Smuzhiyun		};
987*4882a593Smuzhiyun	};
988*4882a593Smuzhiyun
989*4882a593Smuzhiyun	thermal-zones {
990*4882a593Smuzhiyun		cpu-thermal {
991*4882a593Smuzhiyun			polling-delay-passive = <0>;
992*4882a593Smuzhiyun			polling-delay = <0>;
993*4882a593Smuzhiyun			thermal-sensors = <&ths 0>;
994*4882a593Smuzhiyun
995*4882a593Smuzhiyun			trips {
996*4882a593Smuzhiyun				cpu_alert: cpu-alert {
997*4882a593Smuzhiyun					temperature = <85000>;
998*4882a593Smuzhiyun					hysteresis = <2000>;
999*4882a593Smuzhiyun					type = "passive";
1000*4882a593Smuzhiyun				};
1001*4882a593Smuzhiyun
1002*4882a593Smuzhiyun				cpu-crit {
1003*4882a593Smuzhiyun					temperature = <100000>;
1004*4882a593Smuzhiyun					hysteresis = <0>;
1005*4882a593Smuzhiyun					type = "critical";
1006*4882a593Smuzhiyun				};
1007*4882a593Smuzhiyun			};
1008*4882a593Smuzhiyun
1009*4882a593Smuzhiyun			cooling-maps {
1010*4882a593Smuzhiyun				map0 {
1011*4882a593Smuzhiyun					trip = <&cpu_alert>;
1012*4882a593Smuzhiyun					cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
1013*4882a593Smuzhiyun							 <&cpu1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
1014*4882a593Smuzhiyun							 <&cpu2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
1015*4882a593Smuzhiyun							 <&cpu3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
1016*4882a593Smuzhiyun				};
1017*4882a593Smuzhiyun			};
1018*4882a593Smuzhiyun		};
1019*4882a593Smuzhiyun
1020*4882a593Smuzhiyun		gpu-thermal {
1021*4882a593Smuzhiyun			polling-delay-passive = <0>;
1022*4882a593Smuzhiyun			polling-delay = <0>;
1023*4882a593Smuzhiyun			thermal-sensors = <&ths 1>;
1024*4882a593Smuzhiyun		};
1025*4882a593Smuzhiyun	};
1026*4882a593Smuzhiyun};
1027