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>;
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 video-codec@1c0e000 {
150 compatible = "allwinner,sun50i-h6-video-engine";
151 reg = <0x01c0e000 0x2000>;
152 clocks = <&ccu CLK_BUS_VE>, <&ccu CLK_VE>,
154 clock-names = "ahb", "mod", "ram";
155 resets = <&ccu RST_BUS_VE>;
156 interrupts = <GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>;
157 allwinner,sram = <&ve_sram 1>;
160 syscon: syscon@3000000 {
161 compatible = "allwinner,sun50i-h6-system-control",
162 "allwinner,sun50i-a64-system-control";
163 reg = <0x03000000 0x1000>;
164 #address-cells = <1>;
169 compatible = "mmio-sram";
170 reg = <0x00028000 0x1e000>;
171 #address-cells = <1>;
173 ranges = <0 0x00028000 0x1e000>;
175 de2_sram: sram-section@0 {
176 compatible = "allwinner,sun50i-h6-sram-c",
177 "allwinner,sun50i-a64-sram-c";
178 reg = <0x0000 0x1e000>;
182 sram_c1: sram@1a00000 {
183 compatible = "mmio-sram";
184 reg = <0x01a00000 0x200000>;
185 #address-cells = <1>;
187 ranges = <0 0x01a00000 0x200000>;
189 ve_sram: sram-section@0 {
190 compatible = "allwinner,sun50i-h6-sram-c1",
191 "allwinner,sun4i-a10-sram-c1";
192 reg = <0x000000 0x200000>;
198 compatible = "allwinner,sun50i-h6-ccu";
199 reg = <0x03001000 0x1000>;
200 clocks = <&osc24M>, <&osc32k>, <&iosc>;
201 clock-names = "hosc", "losc", "iosc";
206 dma: dma-controller@3002000 {
207 compatible = "allwinner,sun50i-h6-dma";
208 reg = <0x03002000 0x1000>;
209 interrupts = <GIC_SPI 43 IRQ_TYPE_LEVEL_HIGH>;
210 clocks = <&ccu CLK_BUS_DMA>, <&ccu CLK_MBUS_DMA>;
211 clock-names = "bus", "mbus";
214 resets = <&ccu RST_BUS_DMA>;
219 compatible = "allwinner,sun50i-h6-sid";
220 reg = <0x03006000 0x400>;
223 watchdog: watchdog@30090a0 {
224 compatible = "allwinner,sun50i-h6-wdt",
225 "allwinner,sun6i-a31-wdt";
226 reg = <0x030090a0 0x20>;
227 interrupts = <GIC_SPI 50 IRQ_TYPE_LEVEL_HIGH>;
228 /* Broken on some H6 boards */
232 pio: pinctrl@300b000 {
233 compatible = "allwinner,sun50i-h6-pinctrl";
234 reg = <0x0300b000 0x400>;
235 interrupts = <GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>,
236 <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>,
237 <GIC_SPI 54 IRQ_TYPE_LEVEL_HIGH>,
238 <GIC_SPI 59 IRQ_TYPE_LEVEL_HIGH>;
239 clocks = <&ccu CLK_APB1>, <&osc24M>, <&osc32k>;
240 clock-names = "apb", "hosc", "losc";
243 interrupt-controller;
244 #interrupt-cells = <3>;
246 ext_rgmii_pins: rgmii-pins {
247 pins = "PD0", "PD1", "PD2", "PD3", "PD4",
248 "PD5", "PD7", "PD8", "PD9", "PD10",
249 "PD11", "PD12", "PD13", "PD19", "PD20";
251 drive-strength = <40>;
254 hdmi_pins: hdmi-pins {
255 pins = "PH8", "PH9", "PH10";
259 mmc0_pins: mmc0-pins {
260 pins = "PF0", "PF1", "PF2", "PF3",
263 drive-strength = <30>;
268 * /omit-if-no-ref/ isn't supported by U-boot
269 * keep this comment to avoid bad sync with Linux
271 mmc1_pins: mmc1-pins {
272 pins = "PG0", "PG1", "PG2", "PG3",
275 drive-strength = <30>;
279 mmc2_pins: mmc2-pins {
280 pins = "PC1", "PC4", "PC5", "PC6",
281 "PC7", "PC8", "PC9", "PC10",
282 "PC11", "PC12", "PC13", "PC14";
284 drive-strength = <30>;
288 uart0_ph_pins: uart0-ph-pins {
294 gic: interrupt-controller@3021000 {
295 compatible = "arm,gic-400";
296 reg = <0x03021000 0x1000>,
300 interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>;
301 interrupt-controller;
302 #interrupt-cells = <3>;
306 compatible = "allwinner,sun50i-h6-mmc",
307 "allwinner,sun50i-a64-mmc";
308 reg = <0x04020000 0x1000>;
309 clocks = <&ccu CLK_BUS_MMC0>, <&ccu CLK_MMC0>;
310 clock-names = "ahb", "mmc";
311 resets = <&ccu RST_BUS_MMC0>;
313 interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>;
314 pinctrl-names = "default";
315 pinctrl-0 = <&mmc0_pins>;
317 #address-cells = <1>;
322 compatible = "allwinner,sun50i-h6-mmc",
323 "allwinner,sun50i-a64-mmc";
324 reg = <0x04021000 0x1000>;
325 clocks = <&ccu CLK_BUS_MMC1>, <&ccu CLK_MMC1>;
326 clock-names = "ahb", "mmc";
327 resets = <&ccu RST_BUS_MMC1>;
329 interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>;
330 pinctrl-names = "default";
331 pinctrl-0 = <&mmc1_pins>;
333 #address-cells = <1>;
338 compatible = "allwinner,sun50i-h6-emmc",
339 "allwinner,sun50i-a64-emmc";
340 reg = <0x04022000 0x1000>;
341 clocks = <&ccu CLK_BUS_MMC2>, <&ccu CLK_MMC2>;
342 clock-names = "ahb", "mmc";
343 resets = <&ccu RST_BUS_MMC2>;
345 interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>;
346 pinctrl-names = "default";
347 pinctrl-0 = <&mmc2_pins>;
349 #address-cells = <1>;
353 uart0: serial@5000000 {
354 compatible = "snps,dw-apb-uart";
355 reg = <0x05000000 0x400>;
356 interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>;
359 clocks = <&ccu CLK_BUS_UART0>;
360 resets = <&ccu RST_BUS_UART0>;
364 uart1: serial@5000400 {
365 compatible = "snps,dw-apb-uart";
366 reg = <0x05000400 0x400>;
367 interrupts = <GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>;
370 clocks = <&ccu CLK_BUS_UART1>;
371 resets = <&ccu RST_BUS_UART1>;
375 uart2: serial@5000800 {
376 compatible = "snps,dw-apb-uart";
377 reg = <0x05000800 0x400>;
378 interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>;
381 clocks = <&ccu CLK_BUS_UART2>;
382 resets = <&ccu RST_BUS_UART2>;
386 uart3: serial@5000c00 {
387 compatible = "snps,dw-apb-uart";
388 reg = <0x05000c00 0x400>;
389 interrupts = <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>;
392 clocks = <&ccu CLK_BUS_UART3>;
393 resets = <&ccu RST_BUS_UART3>;
397 emac: ethernet@5020000 {
398 compatible = "allwinner,sun50i-h6-emac",
399 "allwinner,sun50i-a64-emac";
401 reg = <0x05020000 0x10000>;
402 interrupts = <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>;
403 interrupt-names = "macirq";
404 resets = <&ccu RST_BUS_EMAC>;
405 reset-names = "stmmaceth";
406 clocks = <&ccu CLK_BUS_EMAC>;
407 clock-names = "stmmaceth";
411 compatible = "snps,dwmac-mdio";
412 #address-cells = <1>;
417 usb2otg: usb@5100000 {
418 compatible = "allwinner,sun50i-h6-musb",
419 "allwinner,sun8i-a33-musb";
420 reg = <0x05100000 0x0400>;
421 clocks = <&ccu CLK_BUS_OTG>;
422 resets = <&ccu RST_BUS_OTG>;
423 interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
424 interrupt-names = "mc";
427 extcon = <&usb2phy 0>;
431 usb2phy: phy@5100400 {
432 compatible = "allwinner,sun50i-h6-usb-phy";
433 reg = <0x05100400 0x24>,
436 reg-names = "phy_ctrl",
439 clocks = <&ccu CLK_USB_PHY0>,
441 clock-names = "usb0_phy",
443 resets = <&ccu RST_USB_PHY0>,
445 reset-names = "usb0_reset",
452 compatible = "allwinner,sun50i-h6-ehci", "generic-ehci";
453 reg = <0x05101000 0x100>;
454 interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
455 clocks = <&ccu CLK_BUS_OHCI0>,
456 <&ccu CLK_BUS_EHCI0>,
457 <&ccu CLK_USB_OHCI0>;
458 resets = <&ccu RST_BUS_OHCI0>,
459 <&ccu RST_BUS_EHCI0>;
464 compatible = "allwinner,sun50i-h6-ohci", "generic-ohci";
465 reg = <0x05101400 0x100>;
466 interrupts = <GIC_SPI 25 IRQ_TYPE_LEVEL_HIGH>;
467 clocks = <&ccu CLK_BUS_OHCI0>,
468 <&ccu CLK_USB_OHCI0>;
469 resets = <&ccu RST_BUS_OHCI0>;
474 compatible = "allwinner,sun50i-h6-ehci", "generic-ehci";
475 reg = <0x05311000 0x100>;
476 interrupts = <GIC_SPI 28 IRQ_TYPE_LEVEL_HIGH>;
477 clocks = <&ccu CLK_BUS_OHCI3>,
478 <&ccu CLK_BUS_EHCI3>,
479 <&ccu CLK_USB_OHCI3>;
480 resets = <&ccu RST_BUS_OHCI3>,
481 <&ccu RST_BUS_EHCI3>;
487 compatible = "allwinner,sun50i-h6-ohci", "generic-ohci";
488 reg = <0x05311400 0x100>;
489 interrupts = <GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>;
490 clocks = <&ccu CLK_BUS_OHCI3>,
491 <&ccu CLK_USB_OHCI3>;
492 resets = <&ccu RST_BUS_OHCI3>;
498 compatible = "allwinner,sun50i-h6-dw-hdmi";
499 reg = <0x06000000 0x10000>;
501 interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>;
502 clocks = <&ccu CLK_BUS_HDMI>, <&ccu CLK_HDMI_SLOW>,
503 <&ccu CLK_HDMI>, <&ccu CLK_HDMI_CEC>,
504 <&ccu CLK_HDCP>, <&ccu CLK_BUS_HDCP>;
505 clock-names = "iahb", "isfr", "tmds", "cec", "hdcp",
507 resets = <&ccu RST_BUS_HDMI_SUB>, <&ccu RST_BUS_HDCP>;
508 reset-names = "ctrl", "hdcp";
510 phy-names = "hdmi-phy";
511 pinctrl-names = "default";
512 pinctrl-0 = <&hdmi_pins>;
516 #address-cells = <1>;
522 hdmi_in_tcon_top: endpoint {
523 remote-endpoint = <&tcon_top_hdmi_out_hdmi>;
533 hdmi_phy: hdmi-phy@6010000 {
534 compatible = "allwinner,sun50i-h6-hdmi-phy";
535 reg = <0x06010000 0x10000>;
536 clocks = <&ccu CLK_BUS_HDMI>, <&ccu CLK_HDMI_SLOW>;
537 clock-names = "bus", "mod";
538 resets = <&ccu RST_BUS_HDMI>;
543 tcon_top: tcon-top@6510000 {
544 compatible = "allwinner,sun50i-h6-tcon-top";
545 reg = <0x06510000 0x1000>;
546 clocks = <&ccu CLK_BUS_TCON_TOP>,
550 clock-output-names = "tcon-top-tv0";
551 resets = <&ccu RST_BUS_TCON_TOP>;
556 #address-cells = <1>;
559 tcon_top_mixer0_in: port@0 {
560 #address-cells = <1>;
564 tcon_top_mixer0_in_mixer0: endpoint@0 {
566 remote-endpoint = <&mixer0_out_tcon_top_mixer0>;
570 tcon_top_mixer0_out: port@1 {
571 #address-cells = <1>;
575 tcon_top_mixer0_out_tcon_tv: endpoint@2 {
577 remote-endpoint = <&tcon_tv_in_tcon_top_mixer0>;
581 tcon_top_hdmi_in: port@4 {
582 #address-cells = <1>;
586 tcon_top_hdmi_in_tcon_tv: endpoint@0 {
588 remote-endpoint = <&tcon_tv_out_tcon_top>;
592 tcon_top_hdmi_out: port@5 {
595 tcon_top_hdmi_out_hdmi: endpoint {
596 remote-endpoint = <&hdmi_in_tcon_top>;
602 tcon_tv: lcd-controller@6515000 {
603 compatible = "allwinner,sun50i-h6-tcon-tv",
604 "allwinner,sun8i-r40-tcon-tv";
605 reg = <0x06515000 0x1000>;
606 interrupts = <GIC_SPI 66 IRQ_TYPE_LEVEL_HIGH>;
607 clocks = <&ccu CLK_BUS_TCON_TV0>,
608 <&tcon_top CLK_TCON_TOP_TV0>;
611 resets = <&ccu RST_BUS_TCON_TV0>;
615 #address-cells = <1>;
621 tcon_tv_in_tcon_top_mixer0: endpoint {
622 remote-endpoint = <&tcon_top_mixer0_out_tcon_tv>;
626 tcon_tv_out: port@1 {
627 #address-cells = <1>;
631 tcon_tv_out_tcon_top: endpoint@1 {
633 remote-endpoint = <&tcon_top_hdmi_in_tcon_tv>;
639 r_ccu: clock@7010000 {
640 compatible = "allwinner,sun50i-h6-r-ccu";
641 reg = <0x07010000 0x400>;
642 clocks = <&osc24M>, <&osc32k>, <&iosc>,
643 <&ccu CLK_PLL_PERIPH0>;
644 clock-names = "hosc", "losc", "iosc", "pll-periph";
649 r_watchdog: watchdog@7020400 {
650 compatible = "allwinner,sun50i-h6-wdt",
651 "allwinner,sun6i-a31-wdt";
652 reg = <0x07020400 0x20>;
653 interrupts = <GIC_SPI 103 IRQ_TYPE_LEVEL_HIGH>;
656 r_intc: interrupt-controller@7021000 {
657 compatible = "allwinner,sun50i-h6-r-intc",
658 "allwinner,sun6i-a31-r-intc";
659 interrupt-controller;
660 #interrupt-cells = <2>;
661 reg = <0x07021000 0x400>;
662 interrupts = <GIC_SPI 96 IRQ_TYPE_LEVEL_HIGH>;
665 r_pio: pinctrl@7022000 {
666 compatible = "allwinner,sun50i-h6-r-pinctrl";
667 reg = <0x07022000 0x400>;
668 interrupts = <GIC_SPI 105 IRQ_TYPE_LEVEL_HIGH>,
669 <GIC_SPI 111 IRQ_TYPE_LEVEL_HIGH>;
670 clocks = <&r_ccu CLK_R_APB1>, <&osc24M>, <&osc32k>;
671 clock-names = "apb", "hosc", "losc";
674 interrupt-controller;
675 #interrupt-cells = <3>;
677 r_i2c_pins: r-i2c-pins {
684 compatible = "allwinner,sun6i-a31-i2c";
685 reg = <0x07081400 0x400>;
686 interrupts = <GIC_SPI 107 IRQ_TYPE_LEVEL_HIGH>;
687 clocks = <&r_ccu CLK_R_APB2_I2C>;
688 resets = <&r_ccu RST_R_APB2_I2C>;
689 pinctrl-names = "default";
690 pinctrl-0 = <&r_i2c_pins>;
692 #address-cells = <1>;