// SPDX-License-Identifier: GPL-2.0 /* * Copyright (c) 2022 MediaTek Inc. * Author: Sam Shih */ #include #include #include #include #include #include / { compatible = "mediatek,mt7986"; interrupt-parent = <&gic>; #address-cells = <1>; #size-cells = <1>; config { u-boot,mmc-env-partition = "u-boot-env"; }; cpus { #address-cells = <1>; #size-cells = <0>; cpu0: cpu@0 { device_type = "cpu"; compatible = "arm,cortex-a53"; reg = <0x0>; mediatek,hwver = <&hwver>; }; cpu1: cpu@1 { device_type = "cpu"; compatible = "arm,cortex-a53"; reg = <0x1>; mediatek,hwver = <&hwver>; }; cpu2: cpu@2 { device_type = "cpu"; compatible = "arm,cortex-a53"; reg = <0x2>; mediatek,hwver = <&hwver>; }; cpu3: cpu@3 { device_type = "cpu"; compatible = "arm,cortex-a53"; reg = <0x3>; mediatek,hwver = <&hwver>; }; }; dummy_clk: dummy12m { compatible = "fixed-clock"; clock-frequency = <12000000>; #clock-cells = <0>; /* must need this line, or uart uanable to get dummy_clk */ bootph-all; }; hwver: hwver { compatible = "mediatek,hwver", "syscon"; reg = <0x8000000 0x1000>; }; timer { compatible = "arm,armv8-timer"; interrupt-parent = <&gic>; clock-frequency = <13000000>; interrupts = , , , ; arm,cpu-registers-not-fw-configured; }; timer0: timer@10008000 { compatible = "mediatek,mt7986-timer"; reg = <0x10008000 0x1000>; interrupts = ; clocks = <&infracfg CK_INFRA_CK_F26M>; clock-names = "gpt-clk"; bootph-all; }; watchdog: watchdog@1001c000 { compatible = "mediatek,mt7986-wdt"; reg = <0x1001c000 0x1000>; interrupts = ; #reset-cells = <1>; status = "disabled"; }; gic: interrupt-controller@c000000 { compatible = "arm,gic-v3"; #interrupt-cells = <3>; interrupt-parent = <&gic>; interrupt-controller; reg = <0x0c000000 0x40000>, /* GICD */ <0x0c080000 0x200000>; /* GICR */ interrupts = ; }; fixed_plls: apmixedsys@1001E000 { compatible = "mediatek,mt7986-fixed-plls"; reg = <0x1001E000 0x1000>; #clock-cells = <1>; }; topckgen: topckgen@1001B000 { compatible = "mediatek,mt7986-topckgen"; reg = <0x1001B000 0x1000>; clock-parent = <&fixed_plls>; #clock-cells = <1>; }; infracfg_ao: infracfg_ao@10001000 { compatible = "mediatek,mt7986-infracfg_ao"; reg = <0x10001000 0x68>; clock-parent = <&infracfg>; #clock-cells = <1>; }; infracfg: infracfg@10001040 { compatible = "mediatek,mt7986-infracfg"; reg = <0x10001000 0x1000>; clock-parent = <&topckgen>; #clock-cells = <1>; }; pinctrl: pinctrl@1001f000 { compatible = "mediatek,mt7986-pinctrl"; reg = <0x1001f000 0x1000>, <0x11c30000 0x1000>, <0x11c40000 0x1000>, <0x11e20000 0x1000>, <0x11e30000 0x1000>, <0x11f00000 0x1000>, <0x11f10000 0x1000>, <0x1000b000 0x1000>; reg-names = "gpio_base", "iocfg_rt_base", "iocfg_rb_base", "iocfg_lt_base", "iocfg_lb_base", "iocfg_tr_base", "iocfg_tl_base", "eint"; gpio: gpio-controller { gpio-controller; #gpio-cells = <2>; }; }; pwm: pwm@10048000 { compatible = "mediatek,mt7986-pwm"; reg = <0x10048000 0x1000>; #clock-cells = <1>; #pwm-cells = <2>; interrupts = ; clocks = <&infracfg CK_INFRA_PWM>, <&infracfg_ao CK_INFRA_PWM_BSEL>, <&infracfg_ao CK_INFRA_PWM1_CK>, <&infracfg_ao CK_INFRA_PWM2_CK>; assigned-clocks = <&topckgen CK_TOP_PWM_SEL>, <&infracfg CK_INFRA_PWM_BSEL>, <&infracfg CK_INFRA_PWM1_SEL>, <&infracfg CK_INFRA_PWM2_SEL>; assigned-clock-parents = <&topckgen CK_TOP_CB_M_D4>, <&infracfg CK_INFRA_PWM>, <&infracfg CK_INFRA_PWM>, <&infracfg CK_INFRA_PWM>; clock-names = "top", "main", "pwm1", "pwm2"; status = "disabled"; bootph-all; }; uart0: serial@11002000 { compatible = "mediatek,hsuart"; reg = <0x11002000 0x400>; interrupts = ; clocks = <&infracfg_ao CK_INFRA_UART0_CK>; assigned-clocks = <&topckgen CK_TOP_UART_SEL>, <&infracfg_ao CK_INFRA_UART0_SEL>; assigned-clock-parents = <&topckgen CK_TOP_CB_CKSQ_40M>, <&infracfg CK_INFRA_UART>; mediatek,force-highspeed; status = "disabled"; bootph-all; }; uart1: serial@11003000 { compatible = "mediatek,hsuart"; reg = <0x11003000 0x400>; interrupts = ; clocks = <&infracfg_ao CK_INFRA_UART1_CK>; assigned-clocks = <&infracfg CK_INFRA_UART1_SEL>; assigned-clock-parents = <&infracfg CK_INFRA_CK_F26M>; mediatek,force-highspeed; status = "disabled"; }; uart2: serial@11004000 { compatible = "mediatek,hsuart"; reg = <0x11004000 0x400>; interrupts = ; clocks = <&infracfg_ao CK_INFRA_UART2_CK>; assigned-clocks = <&infracfg CK_INFRA_UART2_SEL>; assigned-clock-parents = <&infracfg CK_INFRA_CK_F26M>; mediatek,force-highspeed; status = "disabled"; }; snand: snand@11005000 { compatible = "mediatek,mt7986-snand"; reg = <0x11005000 0x1000>, <0x11006000 0x1000>; reg-names = "nfi", "ecc"; clocks = <&infracfg_ao CK_INFRA_SPINFI1_CK>, <&infracfg_ao CK_INFRA_NFI1_CK>, <&infracfg_ao CK_INFRA_NFI_HCK_CK>; clock-names = "pad_clk", "nfi_clk", "nfi_hclk"; assigned-clocks = <&topckgen CK_TOP_SPINFI_SEL>, <&topckgen CK_TOP_NFI1X_SEL>; assigned-clock-parents = <&topckgen CK_TOP_CB_M_D8>, <&topckgen CK_TOP_CB_M_D8>; status = "disabled"; }; ethsys: syscon@15000000 { compatible = "mediatek,mt7986-ethsys", "syscon"; reg = <0x15000000 0x1000>; clock-parent = <&topckgen>; #clock-cells = <1>; #reset-cells = <1>; }; eth: ethernet@15100000 { compatible = "mediatek,mt7986-eth", "syscon"; reg = <0x15100000 0x20000>; resets = <ðsys ETHSYS_FE_RST>; reset-names = "fe"; mediatek,ethsys = <ðsys>; mediatek,sgmiisys = <&sgmiisys0>; #address-cells = <1>; #size-cells = <0>; status = "disabled"; }; sgmiisys0: syscon@10060000 { compatible = "mediatek,mt7986-sgmiisys", "syscon"; reg = <0x10060000 0x1000>; #clock-cells = <1>; }; sgmiisys1: syscon@10070000 { compatible = "mediatek,mt7986-sgmiisys", "syscon"; reg = <0x10070000 0x1000>; #clock-cells = <1>; }; spi0: spi@1100a000 { compatible = "mediatek,ipm-spi"; reg = <0x1100a000 0x100>; clocks = <&infracfg_ao CK_INFRA_SPI0_CK>, <&topckgen CK_TOP_SPI_SEL>; assigned-clocks = <&topckgen CK_TOP_SPI_SEL>, <&infracfg CK_INFRA_SPI0_SEL>; assigned-clock-parents = <&topckgen CK_TOP_CB_M_D2>, <&topckgen CK_INFRA_ISPI0>; clock-names = "sel-clk", "spi-clk"; interrupts = ; status = "disabled"; }; spi1: spi@1100b000 { compatible = "mediatek,ipm-spi"; reg = <0x1100b000 0x100>; interrupts = ; status = "disabled"; }; mmc0: mmc@11230000 { compatible = "mediatek,mt7986-mmc"; reg = <0x11230000 0x1000>, <0x11C20000 0x1000>; interrupts = ; clocks = <&topckgen CK_TOP_EMMC_416M>, <&topckgen CK_TOP_EMMC_250M>, <&infracfg_ao CK_INFRA_MSDC_CK>; assigned-clocks = <&topckgen CK_TOP_EMMC_416M_SEL>, <&topckgen CK_TOP_EMMC_250M_SEL>; assigned-clock-parents = <&topckgen CK_TOP_CB_M_416M>, <&topckgen CK_TOP_NET1_D5_D2>; clock-names = "source", "hclk", "source_cg"; status = "disabled"; }; xhci: xhci@11200000 { compatible = "mediatek,mt7986-xhci", "mediatek,mtk-xhci"; reg = <0x11200000 0x2e00>, <0x11203e00 0x0100>; reg-names = "mac", "ippc"; interrupts = ; phys = <&u2port0 PHY_TYPE_USB2>, <&u3port0 PHY_TYPE_USB3>, <&u2port1 PHY_TYPE_USB2>; clocks = <&dummy_clk>, <&dummy_clk>, <&dummy_clk>, <&dummy_clk>, <&dummy_clk>; clock-names = "sys_ck", "xhci_ck", "ref_ck", "mcu_ck", "dma_ck"; tpl-support; status = "okay"; }; usbtphy: usb-phy@11e10000 { compatible = "mediatek,mt7986", "mediatek,generic-tphy-v2"; #address-cells = <1>; #size-cells = <1>; status = "okay"; u2port0: usb-phy@11e10000 { reg = <0x11e10000 0x700>; clocks = <&dummy_clk>; clock-names = "ref"; #phy-cells = <1>; status = "okay"; }; u3port0: usb-phy@11e10700 { reg = <0x11e10700 0x900>; clocks = <&dummy_clk>; clock-names = "ref"; #phy-cells = <1>; status = "okay"; }; u2port1: usb-phy@11e11000 { reg = <0x11e11000 0x700>; clocks = <&dummy_clk>; clock-names = "ref"; #phy-cells = <1>; status = "okay"; }; }; };