1 // SPDX-License-Identifier: GPL-2.0 OR MIT
3 * Copyright (C) 2022 StarFive Technology Co., Ltd.
4 * Copyright (C) 2022 Emil Renner Berthing <kernel@esmil.dk>
8 #include <dt-bindings/clock/starfive,jh7110-crg.h>
9 #include <dt-bindings/power/starfive,jh7110-pmu.h>
10 #include <dt-bindings/reset/starfive,jh7110-crg.h>
13 compatible = "starfive,jh7110";
22 compatible = "sifive,s7", "riscv";
24 d-cache-block-size = <64>;
26 d-cache-size = <8192>;
30 i-cache-block-size = <64>;
32 i-cache-size = <16384>;
35 mmu-type = "riscv,sv39";
36 next-level-cache = <&ccache>;
37 riscv,isa = "rv64imac_zba_zbb";
41 cpu0_intc: interrupt-controller {
42 compatible = "riscv,cpu-intc";
44 #interrupt-cells = <1>;
49 compatible = "sifive,u74-mc", "riscv";
51 d-cache-block-size = <64>;
53 d-cache-size = <32768>;
57 i-cache-block-size = <64>;
59 i-cache-size = <32768>;
62 mmu-type = "riscv,sv39";
63 next-level-cache = <&ccache>;
64 riscv,isa = "rv64imafdc_zba_zbb";
67 cpu1_intc: interrupt-controller {
68 compatible = "riscv,cpu-intc";
70 #interrupt-cells = <1>;
75 compatible = "sifive,u74-mc", "riscv";
77 d-cache-block-size = <64>;
79 d-cache-size = <32768>;
83 i-cache-block-size = <64>;
85 i-cache-size = <32768>;
88 mmu-type = "riscv,sv39";
89 next-level-cache = <&ccache>;
90 riscv,isa = "rv64imafdc_zba_zbb";
93 cpu2_intc: interrupt-controller {
94 compatible = "riscv,cpu-intc";
96 #interrupt-cells = <1>;
101 compatible = "sifive,u74-mc", "riscv";
103 d-cache-block-size = <64>;
105 d-cache-size = <32768>;
109 i-cache-block-size = <64>;
111 i-cache-size = <32768>;
114 mmu-type = "riscv,sv39";
115 next-level-cache = <&ccache>;
116 riscv,isa = "rv64imafdc_zba_zbb";
119 cpu3_intc: interrupt-controller {
120 compatible = "riscv,cpu-intc";
121 interrupt-controller;
122 #interrupt-cells = <1>;
127 compatible = "sifive,u74-mc", "riscv";
129 d-cache-block-size = <64>;
131 d-cache-size = <32768>;
135 i-cache-block-size = <64>;
137 i-cache-size = <32768>;
140 mmu-type = "riscv,sv39";
141 next-level-cache = <&ccache>;
142 riscv,isa = "rv64imafdc_zba_zbb";
145 cpu4_intc: interrupt-controller {
146 compatible = "riscv,cpu-intc";
147 interrupt-controller;
148 #interrupt-cells = <1>;
178 compatible = "fixed-clock";
179 clock-output-names = "dvp_clk";
183 gmac0_rgmii_rxin: gmac0-rgmii-rxin-clock {
184 compatible = "fixed-clock";
185 clock-output-names = "gmac0_rgmii_rxin";
189 gmac0_rmii_refin: gmac0-rmii-refin-clock {
190 compatible = "fixed-clock";
191 clock-output-names = "gmac0_rmii_refin";
195 gmac1_rgmii_rxin: gmac1-rgmii-rxin-clock {
196 compatible = "fixed-clock";
197 clock-output-names = "gmac1_rgmii_rxin";
201 gmac1_rmii_refin: gmac1-rmii-refin-clock {
202 compatible = "fixed-clock";
203 clock-output-names = "gmac1_rmii_refin";
207 hdmitx0_pixelclk: hdmitx0-pixel-clock {
208 compatible = "fixed-clock";
209 clock-output-names = "hdmitx0_pixelclk";
213 i2srx_bclk_ext: i2srx-bclk-ext-clock {
214 compatible = "fixed-clock";
215 clock-output-names = "i2srx_bclk_ext";
219 i2srx_lrck_ext: i2srx-lrck-ext-clock {
220 compatible = "fixed-clock";
221 clock-output-names = "i2srx_lrck_ext";
225 i2stx_bclk_ext: i2stx-bclk-ext-clock {
226 compatible = "fixed-clock";
227 clock-output-names = "i2stx_bclk_ext";
231 i2stx_lrck_ext: i2stx-lrck-ext-clock {
232 compatible = "fixed-clock";
233 clock-output-names = "i2stx_lrck_ext";
237 mclk_ext: mclk-ext-clock {
238 compatible = "fixed-clock";
239 clock-output-names = "mclk_ext";
244 compatible = "fixed-clock";
245 clock-output-names = "osc";
249 rtc_osc: rtc-oscillator {
250 compatible = "fixed-clock";
251 clock-output-names = "rtc_osc";
255 stmmac_axi_setup: stmmac-axi-config {
257 snps,wr_osr_lmt = <4>;
258 snps,rd_osr_lmt = <4>;
259 snps,blen = <256 128 64 32 0 0 0>;
262 tdm_ext: tdm-ext-clock {
263 compatible = "fixed-clock";
264 clock-output-names = "tdm_ext";
269 compatible = "simple-bus";
270 interrupt-parent = <&plic>;
271 #address-cells = <2>;
275 clint: timer@2000000 {
276 compatible = "starfive,jh7110-clint", "sifive,clint0";
277 reg = <0x0 0x2000000 0x0 0x10000>;
278 interrupts-extended = <&cpu0_intc 3>, <&cpu0_intc 7>,
279 <&cpu1_intc 3>, <&cpu1_intc 7>,
280 <&cpu2_intc 3>, <&cpu2_intc 7>,
281 <&cpu3_intc 3>, <&cpu3_intc 7>,
282 <&cpu4_intc 3>, <&cpu4_intc 7>;
285 ccache: cache-controller@2010000 {
286 compatible = "starfive,jh7110-ccache", "sifive,ccache0", "cache";
287 reg = <0x0 0x2010000 0x0 0x4000>;
288 interrupts = <1>, <3>, <4>, <2>;
289 cache-block-size = <64>;
292 cache-size = <2097152>;
296 plic: interrupt-controller@c000000 {
297 compatible = "starfive,jh7110-plic", "sifive,plic-1.0.0";
298 reg = <0x0 0xc000000 0x0 0x4000000>;
299 interrupts-extended = <&cpu0_intc 11>,
300 <&cpu1_intc 11>, <&cpu1_intc 9>,
301 <&cpu2_intc 11>, <&cpu2_intc 9>,
302 <&cpu3_intc 11>, <&cpu3_intc 9>,
303 <&cpu4_intc 11>, <&cpu4_intc 9>;
304 interrupt-controller;
305 #interrupt-cells = <1>;
306 #address-cells = <0>;
310 uart0: serial@10000000 {
311 compatible = "snps,dw-apb-uart";
312 reg = <0x0 0x10000000 0x0 0x10000>;
313 clocks = <&syscrg JH7110_SYSCLK_UART0_CORE>,
314 <&syscrg JH7110_SYSCLK_UART0_APB>;
315 clock-names = "baudclk", "apb_pclk";
316 resets = <&syscrg JH7110_SYSRST_UART0_APB>;
323 uart1: serial@10010000 {
324 compatible = "snps,dw-apb-uart";
325 reg = <0x0 0x10010000 0x0 0x10000>;
326 clocks = <&syscrg JH7110_SYSCLK_UART1_CORE>,
327 <&syscrg JH7110_SYSCLK_UART1_APB>;
328 clock-names = "baudclk", "apb_pclk";
329 resets = <&syscrg JH7110_SYSRST_UART1_APB>;
336 uart2: serial@10020000 {
337 compatible = "snps,dw-apb-uart";
338 reg = <0x0 0x10020000 0x0 0x10000>;
339 clocks = <&syscrg JH7110_SYSCLK_UART2_CORE>,
340 <&syscrg JH7110_SYSCLK_UART2_APB>;
341 clock-names = "baudclk", "apb_pclk";
342 resets = <&syscrg JH7110_SYSRST_UART2_APB>;
350 compatible = "snps,designware-i2c";
351 reg = <0x0 0x10030000 0x0 0x10000>;
352 clocks = <&syscrg JH7110_SYSCLK_I2C0_APB>;
354 resets = <&syscrg JH7110_SYSRST_I2C0_APB>;
356 #address-cells = <1>;
362 compatible = "snps,designware-i2c";
363 reg = <0x0 0x10040000 0x0 0x10000>;
364 clocks = <&syscrg JH7110_SYSCLK_I2C1_APB>;
366 resets = <&syscrg JH7110_SYSRST_I2C1_APB>;
368 #address-cells = <1>;
374 compatible = "snps,designware-i2c";
375 reg = <0x0 0x10050000 0x0 0x10000>;
376 clocks = <&syscrg JH7110_SYSCLK_I2C2_APB>;
378 resets = <&syscrg JH7110_SYSRST_I2C2_APB>;
380 #address-cells = <1>;
385 stgcrg: clock-controller@10230000 {
386 compatible = "starfive,jh7110-stgcrg";
387 reg = <0x0 0x10230000 0x0 0x10000>;
389 <&syscrg JH7110_SYSCLK_HIFI4_CORE>,
390 <&syscrg JH7110_SYSCLK_STG_AXIAHB>,
391 <&syscrg JH7110_SYSCLK_USB_125M>,
392 <&syscrg JH7110_SYSCLK_CPU_BUS>,
393 <&syscrg JH7110_SYSCLK_HIFI4_AXI>,
394 <&syscrg JH7110_SYSCLK_NOCSTG_BUS>,
395 <&syscrg JH7110_SYSCLK_APB_BUS>;
396 clock-names = "osc", "hifi4_core",
397 "stg_axiahb", "usb_125m",
398 "cpu_bus", "hifi4_axi",
399 "nocstg_bus", "apb_bus";
404 stg_syscon: syscon@10240000 {
405 compatible = "starfive,jh7110-stg-syscon", "syscon";
406 reg = <0x0 0x10240000 0x0 0x1000>;
409 uart3: serial@12000000 {
410 compatible = "snps,dw-apb-uart";
411 reg = <0x0 0x12000000 0x0 0x10000>;
412 clocks = <&syscrg JH7110_SYSCLK_UART3_CORE>,
413 <&syscrg JH7110_SYSCLK_UART3_APB>;
414 clock-names = "baudclk", "apb_pclk";
415 resets = <&syscrg JH7110_SYSRST_UART3_APB>;
422 uart4: serial@12010000 {
423 compatible = "snps,dw-apb-uart";
424 reg = <0x0 0x12010000 0x0 0x10000>;
425 clocks = <&syscrg JH7110_SYSCLK_UART4_CORE>,
426 <&syscrg JH7110_SYSCLK_UART4_APB>;
427 clock-names = "baudclk", "apb_pclk";
428 resets = <&syscrg JH7110_SYSRST_UART4_APB>;
435 uart5: serial@12020000 {
436 compatible = "snps,dw-apb-uart";
437 reg = <0x0 0x12020000 0x0 0x10000>;
438 clocks = <&syscrg JH7110_SYSCLK_UART5_CORE>,
439 <&syscrg JH7110_SYSCLK_UART5_APB>;
440 clock-names = "baudclk", "apb_pclk";
441 resets = <&syscrg JH7110_SYSRST_UART5_APB>;
449 compatible = "snps,designware-i2c";
450 reg = <0x0 0x12030000 0x0 0x10000>;
451 clocks = <&syscrg JH7110_SYSCLK_I2C3_APB>;
453 resets = <&syscrg JH7110_SYSRST_I2C3_APB>;
455 #address-cells = <1>;
461 compatible = "snps,designware-i2c";
462 reg = <0x0 0x12040000 0x0 0x10000>;
463 clocks = <&syscrg JH7110_SYSCLK_I2C4_APB>;
465 resets = <&syscrg JH7110_SYSRST_I2C4_APB>;
467 #address-cells = <1>;
473 compatible = "snps,designware-i2c";
474 reg = <0x0 0x12050000 0x0 0x10000>;
475 clocks = <&syscrg JH7110_SYSCLK_I2C5_APB>;
477 resets = <&syscrg JH7110_SYSRST_I2C5_APB>;
479 #address-cells = <1>;
485 compatible = "snps,designware-i2c";
486 reg = <0x0 0x12060000 0x0 0x10000>;
487 clocks = <&syscrg JH7110_SYSCLK_I2C6_APB>;
489 resets = <&syscrg JH7110_SYSRST_I2C6_APB>;
491 #address-cells = <1>;
497 compatible = "starfive,jh7110-pwm";
498 reg = <0x0 0x120d0000 0x0 0x10000>;
499 clocks = <&syscrg JH7110_SYSCLK_PWM_APB>;
500 resets = <&syscrg JH7110_SYSRST_PWM_APB>;
506 compatible = "starfive,jh7110-qspi", "cdns,qspi-nor";
507 #address-cells = <1>;
509 reg = <0x0 0x13010000 0x0 0x10000
510 0x0 0x21000000 0x0 0x400000>;
512 clocks = <&syscrg JH7110_SYSCLK_QSPI_REF>;
513 resets = <&syscrg JH7110_SYSRST_QSPI_APB>,
514 <&syscrg JH7110_SYSRST_QSPI_AHB>,
515 <&syscrg JH7110_SYSRST_QSPI_REF>;
516 reset-names = "qspi", "qspi-ocp", "rstc_ref";
517 cdns,fifo-depth = <256>;
518 cdns,fifo-width = <4>;
519 cdns,trigger-address = <0x0>;
521 nor_flash: nor-flash@0 {
522 compatible = "jedec,spi-nor";
524 cdns,read-delay = <5>;
525 spi-max-frequency = <12000000>;
532 compatible = "fixed-partitions";
533 #address-cells = <1>;
540 reg = <0x100000 0x300000>;
543 reg = <0xf00000 0x100000>;
549 syscrg: clock-controller@13020000 {
550 compatible = "starfive,jh7110-syscrg";
551 reg = <0x0 0x13020000 0x0 0x10000>;
552 clocks = <&osc>, <&gmac1_rmii_refin>,
554 <&i2stx_bclk_ext>, <&i2stx_lrck_ext>,
555 <&i2srx_bclk_ext>, <&i2srx_lrck_ext>,
556 <&tdm_ext>, <&mclk_ext>,
557 <&pllclk JH7110_CLK_PLL0_OUT>,
558 <&pllclk JH7110_CLK_PLL1_OUT>,
559 <&pllclk JH7110_CLK_PLL2_OUT>;
560 clock-names = "osc", "gmac1_rmii_refin",
562 "i2stx_bclk_ext", "i2stx_lrck_ext",
563 "i2srx_bclk_ext", "i2srx_lrck_ext",
564 "tdm_ext", "mclk_ext",
565 "pll0_out", "pll1_out", "pll2_out";
570 sys_syscon: syscon@13030000 {
571 compatible = "starfive,jh7110-sys-syscon", "syscon", "simple-mfd";
572 reg = <0x0 0x13030000 0x0 0x1000>;
574 pllclk: pll-clock-controller {
575 compatible = "starfive,jh7110-pll";
581 sysgpio: pinctrl@13040000 {
582 compatible = "starfive,jh7110-sys-pinctrl";
583 reg = <0x0 0x13040000 0x0 0x10000>;
584 clocks = <&syscrg JH7110_SYSCLK_IOMUX_APB>;
585 resets = <&syscrg JH7110_SYSRST_IOMUX_APB>;
587 interrupt-controller;
588 #interrupt-cells = <2>;
594 compatible = "starfive,jh7110-timer";
595 reg = <0x0 0x13050000 0x0 0x10000>;
596 interrupts = <69>, <70>, <71> ,<72>;
597 clocks = <&syscrg JH7110_SYSCLK_TIMER_APB>,
598 <&syscrg JH7110_SYSCLK_TIMER0>,
599 <&syscrg JH7110_SYSCLK_TIMER1>,
600 <&syscrg JH7110_SYSCLK_TIMER2>,
601 <&syscrg JH7110_SYSCLK_TIMER3>;
602 clock-names = "apb", "ch0", "ch1",
604 resets = <&syscrg JH7110_SYSRST_TIMER_APB>,
605 <&syscrg JH7110_SYSRST_TIMER0>,
606 <&syscrg JH7110_SYSRST_TIMER1>,
607 <&syscrg JH7110_SYSRST_TIMER2>,
608 <&syscrg JH7110_SYSRST_TIMER3>;
609 reset-names = "apb", "ch0", "ch1",
613 wdog: watchdog@13070000 {
614 compatible = "starfive,jh7110-wdt";
615 reg = <0x0 0x13070000 0x0 0x10000>;
616 clocks = <&syscrg JH7110_SYSCLK_WDT_APB>,
617 <&syscrg JH7110_SYSCLK_WDT_CORE>;
618 clock-names = "apb", "core";
619 resets = <&syscrg JH7110_SYSRST_WDT_APB>,
620 <&syscrg JH7110_SYSRST_WDT_CORE>;
624 compatible = "starfive,jh7110-mmc";
625 reg = <0x0 0x16010000 0x0 0x10000>;
626 clocks = <&syscrg JH7110_SYSCLK_SDIO0_AHB>,
627 <&syscrg JH7110_SYSCLK_SDIO0_SDCARD>;
628 clock-names = "biu","ciu";
629 resets = <&syscrg JH7110_SYSRST_SDIO0_AHB>;
630 reset-names = "reset";
633 fifo-watermark-aligned;
635 starfive,sysreg = <&sys_syscon 0x14 0x1a 0x7c000000>;
640 compatible = "starfive,jh7110-mmc";
641 reg = <0x0 0x16020000 0x0 0x10000>;
642 clocks = <&syscrg JH7110_SYSCLK_SDIO1_AHB>,
643 <&syscrg JH7110_SYSCLK_SDIO1_SDCARD>;
644 clock-names = "biu","ciu";
645 resets = <&syscrg JH7110_SYSRST_SDIO1_AHB>;
646 reset-names = "reset";
649 fifo-watermark-aligned;
651 starfive,sysreg = <&sys_syscon 0x9c 0x1 0x3e>;
655 gmac0: ethernet@16030000 {
656 compatible = "starfive,jh7110-dwmac", "snps,dwmac-5.20";
657 reg = <0x0 0x16030000 0x0 0x10000>;
658 clocks = <&aoncrg JH7110_AONCLK_GMAC0_AXI>,
659 <&aoncrg JH7110_AONCLK_GMAC0_AHB>,
660 <&syscrg JH7110_SYSCLK_GMAC0_PTP>,
661 <&aoncrg JH7110_AONCLK_GMAC0_TX_INV>,
662 <&syscrg JH7110_SYSCLK_GMAC0_GTXC>;
663 clock-names = "stmmaceth", "pclk", "ptp_ref",
665 resets = <&aoncrg JH7110_AONRST_GMAC0_AXI>,
666 <&aoncrg JH7110_AONRST_GMAC0_AHB>;
667 reset-names = "stmmaceth", "ahb";
668 interrupts = <7>, <6>, <5>;
669 interrupt-names = "macirq", "eth_wake_irq", "eth_lpi";
670 snps,multicast-filter-bins = <64>;
671 snps,perfect-filter-entries = <8>;
672 rx-fifo-depth = <2048>;
673 tx-fifo-depth = <2048>;
676 snps,force_thresh_dma_mode;
677 snps,axi-config = <&stmmac_axi_setup>;
679 snps,en-tx-lpi-clockgating;
682 starfive,syscon = <&aon_syscon 0xc 0x12>;
686 gmac1: ethernet@16040000 {
687 compatible = "starfive,jh7110-dwmac", "snps,dwmac-5.20";
688 reg = <0x0 0x16040000 0x0 0x10000>;
689 clocks = <&syscrg JH7110_SYSCLK_GMAC1_AXI>,
690 <&syscrg JH7110_SYSCLK_GMAC1_AHB>,
691 <&syscrg JH7110_SYSCLK_GMAC1_PTP>,
692 <&syscrg JH7110_SYSCLK_GMAC1_TX_INV>,
693 <&syscrg JH7110_SYSCLK_GMAC1_GTXC>;
694 clock-names = "stmmaceth", "pclk", "ptp_ref",
696 resets = <&syscrg JH7110_SYSRST_GMAC1_AXI>,
697 <&syscrg JH7110_SYSRST_GMAC1_AHB>;
698 reset-names = "stmmaceth", "ahb";
699 interrupts = <78>, <77>, <76>;
700 interrupt-names = "macirq", "eth_wake_irq", "eth_lpi";
701 snps,multicast-filter-bins = <64>;
702 snps,perfect-filter-entries = <8>;
703 rx-fifo-depth = <2048>;
704 tx-fifo-depth = <2048>;
707 snps,force_thresh_dma_mode;
708 snps,axi-config = <&stmmac_axi_setup>;
710 snps,en-tx-lpi-clockgating;
713 starfive,syscon = <&sys_syscon 0x90 0x2>;
717 aoncrg: clock-controller@17000000 {
718 compatible = "starfive,jh7110-aoncrg";
719 reg = <0x0 0x17000000 0x0 0x10000>;
720 clocks = <&osc>, <&gmac0_rmii_refin>,
722 <&syscrg JH7110_SYSCLK_STG_AXIAHB>,
723 <&syscrg JH7110_SYSCLK_APB_BUS>,
724 <&syscrg JH7110_SYSCLK_GMAC0_GTXCLK>,
726 clock-names = "osc", "gmac0_rmii_refin",
727 "gmac0_rgmii_rxin", "stg_axiahb",
728 "apb_bus", "gmac0_gtxclk",
734 aon_syscon: syscon@17010000 {
735 compatible = "starfive,jh7110-aon-syscon", "syscon";
736 reg = <0x0 0x17010000 0x0 0x1000>;
739 aongpio: pinctrl@17020000 {
740 compatible = "starfive,jh7110-aon-pinctrl";
741 reg = <0x0 0x17020000 0x0 0x10000>;
742 resets = <&aoncrg JH7110_AONRST_IOMUX>;
744 interrupt-controller;
745 #interrupt-cells = <2>;
750 pwrc: power-controller@17030000 {
751 compatible = "starfive,jh7110-pmu";
752 reg = <0x0 0x17030000 0x0 0x10000>;
754 #power-domain-cells = <1>;
757 ispcrg: clock-controller@19810000 {
758 compatible = "starfive,jh7110-ispcrg";
759 reg = <0x0 0x19810000 0x0 0x10000>;
760 clocks = <&syscrg JH7110_SYSCLK_ISP_TOP_CORE>,
761 <&syscrg JH7110_SYSCLK_ISP_TOP_AXI>,
762 <&syscrg JH7110_SYSCLK_NOC_BUS_ISP_AXI>,
764 clock-names = "isp_top_core", "isp_top_axi",
765 "noc_bus_isp_axi", "dvp_clk";
766 resets = <&syscrg JH7110_SYSRST_ISP_TOP>,
767 <&syscrg JH7110_SYSRST_ISP_TOP_AXI>,
768 <&syscrg JH7110_SYSRST_NOC_BUS_ISP_AXI>;
771 power-domains = <&pwrc JH7110_PD_ISP>;
774 voutcrg: clock-controller@295c0000 {
775 compatible = "starfive,jh7110-voutcrg";
776 reg = <0x0 0x295c0000 0x0 0x10000>;
777 clocks = <&syscrg JH7110_SYSCLK_VOUT_SRC>,
778 <&syscrg JH7110_SYSCLK_VOUT_TOP_AHB>,
779 <&syscrg JH7110_SYSCLK_VOUT_TOP_AXI>,
780 <&syscrg JH7110_SYSCLK_VOUT_TOP_HDMITX0_MCLK>,
781 <&syscrg JH7110_SYSCLK_I2STX0_BCLK>,
783 clock-names = "vout_src", "vout_top_ahb",
784 "vout_top_axi", "vout_top_hdmitx0_mclk",
785 "i2stx0_bclk", "hdmitx0_pixelclk";
786 resets = <&syscrg JH7110_SYSRST_VOUT_TOP_SRC>;
789 power-domains = <&pwrc JH7110_PD_VOUT>;