1 // SPDX-License-Identifier: (GPL-2.0+ or MIT)
3 * Copyright (C) 2017 Icenowy Zheng <icenowy@aosc.io>
6 #include <dt-bindings/interrupt-controller/arm-gic.h>
7 #include <dt-bindings/clock/sun50i-h6-ccu.h>
8 #include <dt-bindings/clock/sun50i-h6-r-ccu.h>
9 #include <dt-bindings/clock/sun8i-de2.h>
10 #include <dt-bindings/clock/sun8i-tcon-top.h>
11 #include <dt-bindings/reset/sun50i-h6-ccu.h>
12 #include <dt-bindings/reset/sun50i-h6-r-ccu.h>
13 #include <dt-bindings/reset/sun8i-de2.h>
16 interrupt-parent = <&gic>;
25 compatible = "arm,cortex-a53";
28 enable-method = "psci";
32 compatible = "arm,cortex-a53";
35 enable-method = "psci";
39 compatible = "arm,cortex-a53";
42 enable-method = "psci";
46 compatible = "arm,cortex-a53";
49 enable-method = "psci";
54 compatible = "allwinner,sun50i-h6-display-engine";
55 allwinner,pipelines = <&mixer0>;
59 iosc: internal-osc-clk {
61 compatible = "fixed-clock";
62 clock-frequency = <16000000>;
63 clock-accuracy = <300000000>;
64 clock-output-names = "iosc";
69 compatible = "fixed-clock";
70 clock-frequency = <24000000>;
71 clock-output-names = "osc24M";
76 compatible = "fixed-clock";
77 clock-frequency = <32768>;
78 clock-output-names = "osc32k";
82 compatible = "arm,psci-0.2";
87 compatible = "arm,armv8-timer";
88 interrupts = <GIC_PPI 13
89 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>,
91 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>,
93 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>,
95 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>;
99 compatible = "simple-bus";
100 #address-cells = <1>;
104 display-engine@1000000 {
105 compatible = "allwinner,sun50i-h6-de3",
106 "allwinner,sun50i-a64-de2";
107 reg = <0x1000000 0x400000>;
108 allwinner,sram = <&de2_sram 1>;
109 #address-cells = <1>;
111 ranges = <0 0x1000000 0x400000>;
113 display_clocks: clock@0 {
114 compatible = "allwinner,sun50i-h6-de3-clk";
116 clocks = <&ccu CLK_DE>,
120 resets = <&ccu RST_BUS_DE>;
125 mixer0: mixer@100000 {
126 compatible = "allwinner,sun50i-h6-de3-mixer-0";
127 reg = <0x100000 0x100000>;
128 clocks = <&display_clocks CLK_BUS_MIXER0>,
129 <&display_clocks CLK_MIXER0>;
132 resets = <&display_clocks RST_MIXER0>;
135 #address-cells = <1>;
141 mixer0_out_tcon_top_mixer0: endpoint {
142 remote-endpoint = <&tcon_top_mixer0_in_mixer0>;
149 syscon: syscon@3000000 {
150 compatible = "allwinner,sun50i-h6-system-control",
151 "allwinner,sun50i-a64-system-control";
152 reg = <0x03000000 0x1000>;
153 #address-cells = <1>;
158 compatible = "mmio-sram";
159 reg = <0x00028000 0x1e000>;
160 #address-cells = <1>;
162 ranges = <0 0x00028000 0x1e000>;
164 de2_sram: sram-section@0 {
165 compatible = "allwinner,sun50i-h6-sram-c",
166 "allwinner,sun50i-a64-sram-c";
167 reg = <0x0000 0x1e000>;
171 sram_c1: sram@1a00000 {
172 compatible = "mmio-sram";
173 reg = <0x01a00000 0x200000>;
174 #address-cells = <1>;
176 ranges = <0 0x01a00000 0x200000>;
178 ve_sram: sram-section@0 {
179 compatible = "allwinner,sun50i-h6-sram-c1",
180 "allwinner,sun4i-a10-sram-c1";
181 reg = <0x000000 0x200000>;
187 compatible = "allwinner,sun50i-h6-ccu";
188 reg = <0x03001000 0x1000>;
189 clocks = <&osc24M>, <&osc32k>, <&iosc>;
190 clock-names = "hosc", "losc", "iosc";
195 pio: pinctrl@300b000 {
196 compatible = "allwinner,sun50i-h6-pinctrl";
197 reg = <0x0300b000 0x400>;
198 interrupts = <GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>,
199 <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>,
200 <GIC_SPI 54 IRQ_TYPE_LEVEL_HIGH>,
201 <GIC_SPI 59 IRQ_TYPE_LEVEL_HIGH>;
202 clocks = <&ccu CLK_APB1>, <&osc24M>, <&osc32k>;
203 clock-names = "apb", "hosc", "losc";
206 interrupt-controller;
207 #interrupt-cells = <3>;
209 ext_rgmii_pins: rgmii_pins {
210 pins = "PD0", "PD1", "PD2", "PD3", "PD4",
211 "PD5", "PD7", "PD8", "PD9", "PD10",
212 "PD11", "PD12", "PD13", "PD19", "PD20";
214 drive-strength = <40>;
217 hdmi_pins: hdmi-pins {
218 pins = "PH8", "PH9", "PH10";
222 mmc0_pins: mmc0-pins {
223 pins = "PF0", "PF1", "PF2", "PF3",
226 drive-strength = <30>;
230 mmc2_pins: mmc2-pins {
231 pins = "PC1", "PC4", "PC5", "PC6",
232 "PC7", "PC8", "PC9", "PC10",
233 "PC11", "PC12", "PC13", "PC14";
235 drive-strength = <30>;
239 uart0_ph_pins: uart0-ph {
245 gic: interrupt-controller@3021000 {
246 compatible = "arm,gic-400";
247 reg = <0x03021000 0x1000>,
251 interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>;
252 interrupt-controller;
253 #interrupt-cells = <3>;
257 compatible = "allwinner,sun50i-h6-mmc",
258 "allwinner,sun50i-a64-mmc";
259 reg = <0x04020000 0x1000>;
260 clocks = <&ccu CLK_BUS_MMC0>, <&ccu CLK_MMC0>;
261 clock-names = "ahb", "mmc";
262 resets = <&ccu RST_BUS_MMC0>;
264 interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>;
266 #address-cells = <1>;
271 compatible = "allwinner,sun50i-h6-mmc",
272 "allwinner,sun50i-a64-mmc";
273 reg = <0x04021000 0x1000>;
274 clocks = <&ccu CLK_BUS_MMC1>, <&ccu CLK_MMC1>;
275 clock-names = "ahb", "mmc";
276 resets = <&ccu RST_BUS_MMC1>;
278 interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>;
280 #address-cells = <1>;
285 compatible = "allwinner,sun50i-h6-emmc",
286 "allwinner,sun50i-a64-emmc";
287 reg = <0x04022000 0x1000>;
288 clocks = <&ccu CLK_BUS_MMC2>, <&ccu CLK_MMC2>;
289 clock-names = "ahb", "mmc";
290 resets = <&ccu RST_BUS_MMC2>;
292 interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>;
294 #address-cells = <1>;
298 uart0: serial@5000000 {
299 compatible = "snps,dw-apb-uart";
300 reg = <0x05000000 0x400>;
301 interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>;
304 clocks = <&ccu CLK_BUS_UART0>;
305 resets = <&ccu RST_BUS_UART0>;
309 uart1: serial@5000400 {
310 compatible = "snps,dw-apb-uart";
311 reg = <0x05000400 0x400>;
312 interrupts = <GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>;
315 clocks = <&ccu CLK_BUS_UART1>;
316 resets = <&ccu RST_BUS_UART1>;
320 uart2: serial@5000800 {
321 compatible = "snps,dw-apb-uart";
322 reg = <0x05000800 0x400>;
323 interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>;
326 clocks = <&ccu CLK_BUS_UART2>;
327 resets = <&ccu RST_BUS_UART2>;
331 uart3: serial@5000c00 {
332 compatible = "snps,dw-apb-uart";
333 reg = <0x05000c00 0x400>;
334 interrupts = <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>;
337 clocks = <&ccu CLK_BUS_UART3>;
338 resets = <&ccu RST_BUS_UART3>;
342 emac: ethernet@5020000 {
343 compatible = "allwinner,sun50i-h6-emac",
344 "allwinner,sun50i-a64-emac";
346 reg = <0x05020000 0x10000>;
347 interrupts = <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>;
348 interrupt-names = "macirq";
349 resets = <&ccu RST_BUS_EMAC>;
350 reset-names = "stmmaceth";
351 clocks = <&ccu CLK_BUS_EMAC>;
352 clock-names = "stmmaceth";
356 compatible = "snps,dwmac-mdio";
357 #address-cells = <1>;
362 usb2otg: usb@5100000 {
363 compatible = "allwinner,sun50i-h6-musb",
364 "allwinner,sun8i-a33-musb";
365 reg = <0x05100000 0x0400>;
366 clocks = <&ccu CLK_BUS_OTG>;
367 resets = <&ccu RST_BUS_OTG>;
368 interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
369 interrupt-names = "mc";
372 extcon = <&usb2phy 0>;
376 usb2phy: phy@5100400 {
377 compatible = "allwinner,sun50i-h6-usb-phy";
378 reg = <0x05100400 0x24>,
381 reg-names = "phy_ctrl",
384 clocks = <&ccu CLK_USB_PHY0>,
386 clock-names = "usb0_phy",
388 resets = <&ccu RST_USB_PHY0>,
390 reset-names = "usb0_reset",
397 compatible = "allwinner,sun50i-h6-ehci", "generic-ehci";
398 reg = <0x05101000 0x100>;
399 interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
400 clocks = <&ccu CLK_BUS_OHCI0>,
401 <&ccu CLK_BUS_EHCI0>,
402 <&ccu CLK_USB_OHCI0>;
403 resets = <&ccu RST_BUS_OHCI0>,
404 <&ccu RST_BUS_EHCI0>;
409 compatible = "allwinner,sun50i-h6-ohci", "generic-ohci";
410 reg = <0x05101400 0x100>;
411 interrupts = <GIC_SPI 25 IRQ_TYPE_LEVEL_HIGH>;
412 clocks = <&ccu CLK_BUS_OHCI0>,
413 <&ccu CLK_USB_OHCI0>;
414 resets = <&ccu RST_BUS_OHCI0>;
419 compatible = "allwinner,sun50i-h6-ehci", "generic-ehci";
420 reg = <0x05311000 0x100>;
421 interrupts = <GIC_SPI 28 IRQ_TYPE_LEVEL_HIGH>;
422 clocks = <&ccu CLK_BUS_OHCI3>,
423 <&ccu CLK_BUS_EHCI3>,
424 <&ccu CLK_USB_OHCI3>;
425 resets = <&ccu RST_BUS_OHCI3>,
426 <&ccu RST_BUS_EHCI3>;
433 compatible = "allwinner,sun50i-h6-ohci", "generic-ohci";
434 reg = <0x05311400 0x100>;
435 interrupts = <GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>;
436 clocks = <&ccu CLK_BUS_OHCI3>,
437 <&ccu CLK_USB_OHCI3>;
438 resets = <&ccu RST_BUS_OHCI3>;
445 compatible = "allwinner,sun50i-h6-dw-hdmi";
446 reg = <0x06000000 0x10000>;
448 interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>;
449 clocks = <&ccu CLK_BUS_HDMI>, <&ccu CLK_HDMI_SLOW>,
450 <&ccu CLK_HDMI>, <&ccu CLK_HDMI_CEC>,
451 <&ccu CLK_HDCP>, <&ccu CLK_BUS_HDCP>;
452 clock-names = "iahb", "isfr", "tmds", "cec", "hdcp",
454 resets = <&ccu RST_BUS_HDMI_SUB>, <&ccu RST_BUS_HDCP>;
455 reset-names = "ctrl", "hdcp";
457 phy-names = "hdmi-phy";
458 pinctrl-names = "default";
459 pinctrl-0 = <&hdmi_pins>;
463 #address-cells = <1>;
469 hdmi_in_tcon_top: endpoint {
470 remote-endpoint = <&tcon_top_hdmi_out_hdmi>;
480 hdmi_phy: hdmi-phy@6010000 {
481 compatible = "allwinner,sun50i-h6-hdmi-phy";
482 reg = <0x06010000 0x10000>;
483 clocks = <&ccu CLK_BUS_HDMI>, <&ccu CLK_HDMI_SLOW>;
484 clock-names = "bus", "mod";
485 resets = <&ccu RST_BUS_HDMI>;
490 tcon_top: tcon-top@6510000 {
491 compatible = "allwinner,sun50i-h6-tcon-top";
492 reg = <0x06510000 0x1000>;
493 clocks = <&ccu CLK_BUS_TCON_TOP>,
497 clock-output-names = "tcon-top-tv0";
498 resets = <&ccu RST_BUS_TCON_TOP>;
503 #address-cells = <1>;
506 tcon_top_mixer0_in: port@0 {
507 #address-cells = <1>;
511 tcon_top_mixer0_in_mixer0: endpoint@0 {
513 remote-endpoint = <&mixer0_out_tcon_top_mixer0>;
517 tcon_top_mixer0_out: port@1 {
518 #address-cells = <1>;
522 tcon_top_mixer0_out_tcon_tv: endpoint@2 {
524 remote-endpoint = <&tcon_tv_in_tcon_top_mixer0>;
528 tcon_top_hdmi_in: port@4 {
529 #address-cells = <1>;
533 tcon_top_hdmi_in_tcon_tv: endpoint@0 {
535 remote-endpoint = <&tcon_tv_out_tcon_top>;
539 tcon_top_hdmi_out: port@5 {
542 tcon_top_hdmi_out_hdmi: endpoint {
543 remote-endpoint = <&hdmi_in_tcon_top>;
549 tcon_tv: lcd-controller@6515000 {
550 compatible = "allwinner,sun50i-h6-tcon-tv",
551 "allwinner,sun8i-r40-tcon-tv";
552 reg = <0x06515000 0x1000>;
553 interrupts = <GIC_SPI 66 IRQ_TYPE_LEVEL_HIGH>;
554 clocks = <&ccu CLK_BUS_TCON_TV0>,
555 <&tcon_top CLK_TCON_TOP_TV0>;
558 resets = <&ccu RST_BUS_TCON_TV0>;
562 #address-cells = <1>;
568 tcon_tv_in_tcon_top_mixer0: endpoint {
569 remote-endpoint = <&tcon_top_mixer0_out_tcon_tv>;
573 tcon_tv_out: port@1 {
574 #address-cells = <1>;
578 tcon_tv_out_tcon_top: endpoint@1 {
580 remote-endpoint = <&tcon_top_hdmi_in_tcon_tv>;
586 r_ccu: clock@7010000 {
587 compatible = "allwinner,sun50i-h6-r-ccu";
588 reg = <0x07010000 0x400>;
589 clocks = <&osc24M>, <&osc32k>, <&iosc>,
590 <&ccu CLK_PLL_PERIPH0>;
591 clock-names = "hosc", "losc", "iosc", "pll-periph";
596 r_intc: interrupt-controller@7021000 {
597 compatible = "allwinner,sun50i-h6-r-intc",
598 "allwinner,sun6i-a31-r-intc";
599 interrupt-controller;
600 #interrupt-cells = <2>;
601 reg = <0x07021000 0x400>;
602 interrupts = <GIC_SPI 96 IRQ_TYPE_LEVEL_HIGH>;
605 r_pio: pinctrl@7022000 {
606 compatible = "allwinner,sun50i-h6-r-pinctrl";
607 reg = <0x07022000 0x400>;
608 interrupts = <GIC_SPI 105 IRQ_TYPE_LEVEL_HIGH>,
609 <GIC_SPI 111 IRQ_TYPE_LEVEL_HIGH>;
610 clocks = <&r_ccu CLK_R_APB1>, <&osc24M>, <&osc32k>;
611 clock-names = "apb", "hosc", "losc";
614 interrupt-controller;
615 #interrupt-cells = <3>;
624 compatible = "allwinner,sun6i-a31-i2c";
625 reg = <0x07081400 0x400>;
626 interrupts = <GIC_SPI 107 IRQ_TYPE_LEVEL_HIGH>;
627 clocks = <&r_ccu CLK_R_APB2_I2C>;
628 resets = <&r_ccu RST_R_APB2_I2C>;
629 pinctrl-names = "default";
630 pinctrl-0 = <&r_i2c_pins>;
632 #address-cells = <1>;