mediatek: copy files-6.1 to files-6.6
authorDaniel Golle <daniel@makrotopia.org>
Fri, 1 Mar 2024 01:56:31 +0000 (01:56 +0000)
committerDaniel Golle <daniel@makrotopia.org>
Mon, 11 Mar 2024 21:22:12 +0000 (21:22 +0000)
Copy files from files-6.1 to files-6.6. No changes.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
29 files changed:
target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7981-rfb-mxl-2p5g-phy-eth1.dtso [new file with mode: 0644]
target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7981-rfb-mxl-2p5g-phy-swp5.dtso [new file with mode: 0644]
target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7981-rfb-spim-nand.dtso [new file with mode: 0644]
target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7981-rfb.dts [new file with mode: 0644]
target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7981.dtsi [new file with mode: 0644]
target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7986a-rfb-spim-nand.dts [new file with mode: 0644]
target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7986a-rfb-spim-nor.dts [new file with mode: 0644]
target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7986a-rfb.dtsi [new file with mode: 0644]
target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-bananapi-bpi-r4-emmc.dtso [new file with mode: 0644]
target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-bananapi-bpi-r4-rtc.dtso [new file with mode: 0644]
target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-bananapi-bpi-r4-sd.dtso [new file with mode: 0644]
target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-bananapi-bpi-r4-wifi-mt7996a.dtso [new file with mode: 0644]
target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-bananapi-bpi-r4.dts [new file with mode: 0644]
target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-rfb-emmc.dtso [new file with mode: 0644]
target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-rfb-eth1-aqr.dtso [new file with mode: 0644]
target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-rfb-eth1-i2p5g-phy.dtso [new file with mode: 0644]
target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-rfb-eth1-mxl.dtso [new file with mode: 0644]
target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-rfb-eth1-sfp.dtso [new file with mode: 0644]
target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-rfb-eth2-aqr.dtso [new file with mode: 0644]
target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-rfb-eth2-mxl.dtso [new file with mode: 0644]
target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-rfb-eth2-sfp.dtso [new file with mode: 0644]
target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-rfb-sd.dtso [new file with mode: 0644]
target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-rfb-snfi-nand.dtso [new file with mode: 0644]
target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-rfb-spim-nand.dtso [new file with mode: 0644]
target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-rfb-spim-nor.dtso [new file with mode: 0644]
target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-rfb.dts [new file with mode: 0644]
target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a.dtsi [new file with mode: 0644]
target/linux/mediatek/files-6.6/drivers/net/phy/mediatek-2p5ge.c [new file with mode: 0644]
target/linux/mediatek/files-6.6/drivers/pinctrl/mediatek/pinctrl-mt7988.c [new file with mode: 0644]

diff --git a/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7981-rfb-mxl-2p5g-phy-eth1.dtso b/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7981-rfb-mxl-2p5g-phy-eth1.dtso
new file mode 100644 (file)
index 0000000..4d0e5c0
--- /dev/null
@@ -0,0 +1,32 @@
+/* SPDX-License-Identifier: (GPL-2.0-only OR MIT) */
+/dts-v1/;
+/plugin/;
+
+#include <dt-bindings/gpio/gpio.h>
+
+/ {
+       compatible = "mediatek,mt7981-rfb", "mediatek,mt7981";
+
+       fragment@0 {
+               target = <&gmac1>;
+               __overlay__ {
+                       phy-mode = "2500base-x";
+                       phy-handle = <&phy5>;
+               };
+       };
+
+       fragment@1 {
+               target = <&mdio_bus>;
+               __overlay__ {
+                       reset-gpios = <&pio 14 GPIO_ACTIVE_LOW>;
+                       reset-delay-us = <600>;
+                       reset-post-delay-us = <20000>;
+
+                       phy5: ethernet-phy@5 {
+                               reg = <5>;
+                               compatible = "ethernet-phy-ieee802.3-c45";
+                               phy-mode = "2500base-x";
+                       };
+               };
+       };
+};
diff --git a/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7981-rfb-mxl-2p5g-phy-swp5.dtso b/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7981-rfb-mxl-2p5g-phy-swp5.dtso
new file mode 100644 (file)
index 0000000..710e6c0
--- /dev/null
@@ -0,0 +1,33 @@
+/* SPDX-License-Identifier: (GPL-2.0-only OR MIT) */
+/dts-v1/;
+/plugin/;
+
+#include <dt-bindings/gpio/gpio.h>
+
+/ {
+       compatible = "mediatek,mt7981-rfb", "mediatek,mt7981";
+
+       fragment@0 {
+               target = <&sw_p5>;
+               __overlay__ {
+                       phy-mode = "2500base-x";
+                       phy-handle = <&phy5>;
+                       status = "okay";
+               };
+       };
+
+       fragment@1 {
+               target = <&mdio_bus>;
+               __overlay__ {
+                       reset-gpios = <&pio 14 GPIO_ACTIVE_LOW>;
+                       reset-delay-us = <600>;
+                       reset-post-delay-us = <20000>;
+
+                       phy5: ethernet-phy@5 {
+                               reg = <5>;
+                               compatible = "ethernet-phy-ieee802.3-c45";
+                               phy-mode = "2500base-x";
+                       };
+               };
+       };
+};
diff --git a/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7981-rfb-spim-nand.dtso b/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7981-rfb-spim-nand.dtso
new file mode 100644 (file)
index 0000000..5b51dfd
--- /dev/null
@@ -0,0 +1,66 @@
+/* SPDX-License-Identifier: (GPL-2.0-only OR MIT) */
+/dts-v1/;
+/plugin/;
+
+/ {
+       compatible = "mediatek,mt7981-rfb", "mediatek,mt7981";
+
+       fragment@0 {
+               target = <&spi0>;
+               __overlay__ {
+                       status = "okay";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       spi_nand: spi_nand@0 {
+                               #address-cells = <1>;
+                               #size-cells = <1>;
+                               compatible = "spi-nand";
+                               reg = <1>;
+                               spi-max-frequency = <10000000>;
+                               spi-tx-bus-width = <4>;
+                               spi-rx-bus-width = <4>;
+
+                               partitions {
+                                       compatible = "fixed-partitions";
+                                       #address-cells = <1>;
+                                       #size-cells = <1>;
+
+                                       partition@0 {
+                                               label = "BL2";
+                                               reg = <0x00000 0x0100000>;
+                                               read-only;
+                                       };
+
+                                       partition@100000 {
+                                               label = "u-boot-env";
+                                               reg = <0x0100000 0x0080000>;
+                                       };
+
+                                       factory: partition@180000 {
+                                               label = "Factory";
+                                               reg = <0x180000 0x0200000>;
+                                       };
+
+                                       partition@380000 {
+                                               label = "FIP";
+                                               reg = <0x380000 0x0200000>;
+                                       };
+
+                                       partition@580000 {
+                                               label = "ubi";
+                                               reg = <0x580000 0x4000000>;
+                                       };
+                               };
+                       };
+               };
+       };
+
+       fragment@1 {
+               target = <&wifi>;
+               __overlay__ {
+                       mediatek,mtd-eeprom = <&factory 0x0>;
+                       status = "okay";
+               };
+       };
+};
diff --git a/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7981-rfb.dts b/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7981-rfb.dts
new file mode 100644 (file)
index 0000000..b2bb692
--- /dev/null
@@ -0,0 +1,188 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/*
+ * Copyright (C) 2022 MediaTek Inc.
+ * Author: Sam.Shih <sam.shih@mediatek.com>
+ */
+
+/dts-v1/;
+#include "mt7981.dtsi"
+
+/ {
+       model = "MediaTek MT7981 RFB";
+       compatible = "mediatek,mt7981-rfb", "mediatek,mt7981";
+
+       aliases {
+               serial0 = &uart0;
+       };
+
+       chosen {
+               stdout-path = "serial0:115200n8";
+       };
+
+       memory {
+               reg = <0 0x40000000 0 0x20000000>;
+       };
+
+       reg_3p3v: regulator-3p3v {
+               compatible = "regulator-fixed";
+               regulator-name = "fixed-3.3V";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-boot-on;
+               regulator-always-on;
+       };
+
+       reg_5v: regulator-5v {
+               compatible = "regulator-fixed";
+               regulator-name = "fixed-5V";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-boot-on;
+               regulator-always-on;
+       };
+
+       gpio-keys {
+               compatible = "gpio-keys";
+               reset {
+                       label = "reset";
+                       linux,code = <KEY_RESTART>;
+                       gpios = <&pio 1 GPIO_ACTIVE_LOW>;
+               };
+               wps {
+                       label = "wps";
+                       linux,code = <KEY_WPS_BUTTON>;
+                       gpios = <&pio 0 GPIO_ACTIVE_HIGH>;
+               };
+       };
+};
+
+&eth {
+       status = "okay";
+
+       gmac0: mac@0 {
+               compatible = "mediatek,eth-mac";
+               reg = <0>;
+               phy-mode = "2500base-x";
+
+               fixed-link {
+                       speed = <2500>;
+                       full-duplex;
+                       pause;
+               };
+       };
+
+       gmac1: mac@1 {
+               compatible = "mediatek,eth-mac";
+               reg = <1>;
+               phy-mode = "gmii";
+               phy-handle = <&int_gbe_phy>;
+       };
+};
+
+&mdio_bus {
+       switch: switch@1f {
+               compatible = "mediatek,mt7531";
+               reg = <31>;
+               interrupt-controller;
+               #interrupt-cells = <1>;
+               interrupt-parent = <&pio>;
+               interrupts = <38 IRQ_TYPE_LEVEL_HIGH>;
+               reset-gpios = <&pio 5 GPIO_ACTIVE_HIGH>;
+       };
+};
+
+&crypto {
+       status = "okay";
+};
+
+&pio {
+       spi0_flash_pins: spi0-pins {
+               mux {
+                       function = "spi";
+                       groups = "spi0", "spi0_wp_hold";
+               };
+               conf-pu {
+                       pins = "SPI0_CS", "SPI0_HOLD", "SPI0_WP";
+                       drive-strength = <MTK_DRIVE_8mA>;
+                       bias-pull-up = <MTK_PUPD_SET_R1R0_11>;
+               };
+               conf-pd {
+                       pins = "SPI0_CLK", "SPI0_MOSI", "SPI0_MISO";
+                       drive-strength = <MTK_DRIVE_8mA>;
+                       bias-pull-down = <MTK_PUPD_SET_R1R0_11>;
+               };
+       };
+
+};
+
+&spi0 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&spi0_flash_pins>;
+       cs-gpios = <0>, <0>;
+       #address-cells = <1>;
+       #size-cells = <0>;
+       status = "disabled";
+};
+
+&switch {
+       ports {
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               port@0 {
+                       reg = <0>;
+                       label = "lan1";
+               };
+
+               port@1 {
+                       reg = <1>;
+                       label = "lan2";
+               };
+
+               port@2 {
+                       reg = <2>;
+                       label = "lan3";
+               };
+
+               port@3 {
+                       reg = <3>;
+                       label = "lan4";
+               };
+
+               sw_p5: port@5 {
+                       reg = <5>;
+                       label = "lan5";
+                       status = "disabled";
+               };
+
+               port@6 {
+                       reg = <6>;
+                       ethernet = <&gmac0>;
+                       phy-mode = "2500base-x";
+
+                       fixed-link {
+                               speed = <2500>;
+                               full-duplex;
+                               pause;
+                       };
+               };
+       };
+};
+
+&xhci {
+       vusb33-supply = <&reg_3p3v>;
+       vbus-supply = <&reg_5v>;
+       status = "okay";
+};
+
+&uart0 {
+       status = "okay";
+};
+
+&usb_phy {
+       status = "okay";
+};
+
+&watchdog {
+       status = "okay";
+};
diff --git a/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7981.dtsi b/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7981.dtsi
new file mode 100644 (file)
index 0000000..54cfd0b
--- /dev/null
@@ -0,0 +1,822 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/*
+ * Copyright (c) 2020 MediaTek Inc.
+ * Author: Sam.Shih <sam.shih@mediatek.com>
+ * Author: Jianhui Zhao <zhaojh329@gmail.com>
+ */
+
+#include <dt-bindings/interrupt-controller/irq.h>
+#include <dt-bindings/interrupt-controller/arm-gic.h>
+#include <dt-bindings/phy/phy.h>
+#include <dt-bindings/clock/mediatek,mt7981-clk.h>
+#include <dt-bindings/reset/mt7986-resets.h>
+#include <dt-bindings/pinctrl/mt65xx.h>
+#include <dt-bindings/leds/common.h>
+#include <dt-bindings/input/linux-event-codes.h>
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/mux/mux.h>
+
+/ {
+       compatible = "mediatek,mt7981";
+       interrupt-parent = <&gic>;
+       #address-cells = <2>;
+       #size-cells = <2>;
+
+       cpus {
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               cpu@0 {
+                       compatible = "arm,cortex-a53";
+                       reg = <0x0>;
+                       device_type = "cpu";
+                       enable-method = "psci";
+               };
+
+               cpu@1 {
+                       compatible = "arm,cortex-a53";
+                       reg = <0x1>;
+                       device_type = "cpu";
+                       enable-method = "psci";
+               };
+       };
+
+       ice: ice_debug {
+               compatible = "mediatek,mt7981-ice_debug", "mediatek,mt2701-ice_debug";
+               clocks = <&infracfg CLK_INFRA_DBG_CK>;
+               clock-names = "ice_dbg";
+       };
+
+       clk40m: oscillator-40m {
+               compatible = "fixed-clock";
+               clock-frequency = <40000000>;
+               clock-output-names = "clkxtal";
+               #clock-cells = <0>;
+       };
+
+       psci {
+               compatible = "arm,psci-0.2";
+               method = "smc";
+       };
+
+       fan: pwm-fan {
+               compatible = "pwm-fan";
+               /* cooling level (0, 1, 2, 3, 4, 5, 6, 7) : (0%/25%/37.5%/50%/62.5%/75%/87.5%/100% duty) */
+               cooling-levels = <0 63 95 127 159 191 223 255>;
+               #cooling-cells = <2>;
+               status = "disabled";
+       };
+
+       reg_3p3v: regulator-3p3v {
+               compatible = "regulator-fixed";
+               regulator-name = "fixed-3.3V";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-boot-on;
+               regulator-always-on;
+       };
+
+       reserved-memory {
+               ranges;
+               #address-cells = <2>;
+               #size-cells = <2>;
+
+               /* 64 KiB reserved for ramoops/pstore */
+               ramoops@42ff0000 {
+                       compatible = "ramoops";
+                       reg = <0 0x42ff0000 0 0x10000>;
+                       record-size = <0x1000>;
+               };
+
+               /* 192 KiB reserved for ARM Trusted Firmware (BL31) */
+               secmon_reserved: secmon@43000000 {
+                       reg = <0 0x43000000 0 0x30000>;
+                       no-map;
+               };
+
+               wmcpu_emi: wmcpu-reserved@47c80000 {
+                       reg = <0 0x47c80000 0 0x100000>;
+                       no-map;
+               };
+
+               wo_emi0: wo-emi@47d80000 {
+                       reg = <0 0x47d80000 0 0x40000>;
+                       no-map;
+               };
+
+               wo_data: wo-data@47dc0000 {
+                       reg = <0 0x47dc0000 0 0x240000>;
+                       no-map;
+               };
+       };
+
+       soc {
+               compatible = "simple-bus";
+               ranges;
+               #address-cells = <2>;
+               #size-cells = <2>;
+
+               gic: interrupt-controller@c000000 {
+                       compatible = "arm,gic-v3";
+                       reg = <0 0x0c000000 0 0x40000>,  /* GICD */
+                             <0 0x0c080000 0 0x200000>; /* GICR */
+                       interrupt-parent = <&gic>;
+                       interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-controller;
+                       #interrupt-cells = <3>;
+               };
+
+               consys: consys@10000000 {
+                       compatible = "mediatek,mt7981-consys";
+                       reg = <0 0x10000000 0 0x8600000>;
+                       memory-region = <&wmcpu_emi>;
+               };
+
+               infracfg: clock-controller@10001000 {
+                       compatible = "mediatek,mt7981-infracfg", "syscon";
+                       reg = <0 0x10001000 0 0x1000>;
+                       #clock-cells = <1>;
+               };
+
+               wed_pcie: wed_pcie@10003000 {
+                       compatible = "mediatek,wed_pcie";
+                       reg = <0 0x10003000 0 0x10>;
+               };
+
+               topckgen: clock-controller@1001b000 {
+                       compatible = "mediatek,mt7981-topckgen", "syscon";
+                       reg = <0 0x1001b000 0 0x1000>;
+                       #clock-cells = <1>;
+               };
+
+               watchdog: watchdog@1001c000 {
+                       compatible = "mediatek,mt7986-wdt",
+                                    "mediatek,mt6589-wdt";
+                       reg = <0 0x1001c000 0 0x1000>;
+                       interrupts = <GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH>;
+                       #reset-cells = <1>;
+                       status = "disabled";
+               };
+
+               apmixedsys: clock-controller@1001e000 {
+                       compatible = "mediatek,mt7981-apmixedsys", "syscon";
+                       reg = <0 0x1001e000 0 0x1000>;
+                       #clock-cells = <1>;
+               };
+
+               pwm: pwm@10048000 {
+                       compatible = "mediatek,mt7981-pwm";
+                       reg = <0 0x10048000 0 0x1000>;
+                       clocks = <&infracfg CLK_INFRA_PWM_STA>,
+                                <&infracfg CLK_INFRA_PWM_HCK>,
+                                <&infracfg CLK_INFRA_PWM1_CK>,
+                                <&infracfg CLK_INFRA_PWM2_CK>,
+                                <&infracfg CLK_INFRA_PWM3_CK>;
+                       clock-names = "top", "main", "pwm1", "pwm2", "pwm3";
+                       #pwm-cells = <2>;
+               };
+
+               sgmiisys0: syscon@10060000 {
+                       compatible = "mediatek,mt7981-sgmiisys_0", "syscon";
+                       reg = <0 0x10060000 0 0x1000>;
+                       mediatek,pnswap;
+                       #clock-cells = <1>;
+               };
+
+               sgmiisys1: syscon@10070000 {
+                       compatible = "mediatek,mt7981-sgmiisys_1", "syscon";
+                       reg = <0 0x10070000 0 0x1000>;
+                       #clock-cells = <1>;
+               };
+
+               crypto: crypto@10320000 {
+                       compatible = "inside-secure,safexcel-eip97";
+                       reg = <0 0x10320000 0 0x40000>;
+                       interrupts = <GIC_SPI 116 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 119 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "ring0", "ring1", "ring2", "ring3";
+                       clocks = <&topckgen CLK_TOP_EIP97B>;
+                       clock-names = "top_eip97_ck";
+                       assigned-clocks = <&topckgen CLK_TOP_EIP97B_SEL>;
+                       assigned-clock-parents = <&topckgen CLK_TOP_CB_NET1_D5>;
+               };
+
+               uart0: serial@11002000 {
+                       compatible = "mediatek,mt6577-uart";
+                       reg = <0 0x11002000 0 0x400>;
+                       interrupts = <GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&infracfg CLK_INFRA_UART0_SEL>,
+                                <&infracfg CLK_INFRA_UART0_CK>;
+                       clock-names = "baud", "bus";
+                       assigned-clocks = <&topckgen CLK_TOP_UART_SEL>,
+                                         <&infracfg CLK_INFRA_UART0_SEL>;
+                       assigned-clock-parents = <&topckgen CLK_TOP_CB_CKSQ_40M>,
+                                                <&topckgen CLK_TOP_UART_SEL>;
+                       pinctrl-0 = <&uart0_pins>;
+                       pinctrl-names = "default";
+                       status = "disabled";
+               };
+
+               uart1: serial@11003000 {
+                       compatible = "mediatek,mt6577-uart";
+                       reg = <0 0x11003000 0 0x400>;
+                       interrupts = <GIC_SPI 124 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&infracfg CLK_INFRA_UART1_SEL>,
+                                <&infracfg CLK_INFRA_UART1_CK>;
+                       clock-names = "baud", "bus";
+                       assigned-clocks = <&topckgen CLK_TOP_UART_SEL>,
+                                         <&infracfg CLK_INFRA_UART1_SEL>;
+                       assigned-clock-parents = <&topckgen CLK_TOP_CB_CKSQ_40M>,
+                                                <&topckgen CLK_TOP_UART_SEL>;
+                       status = "disabled";
+               };
+
+               uart2: serial@11004000 {
+                       compatible = "mediatek,mt6577-uart";
+                       reg = <0 0x11004000 0 0x400>;
+                       interrupts = <GIC_SPI 125 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&infracfg CLK_INFRA_UART2_SEL>,
+                                <&infracfg CLK_INFRA_UART2_CK>;
+                       clock-names = "baud", "bus";
+                       assigned-clocks = <&topckgen CLK_TOP_UART_SEL>,
+                                         <&infracfg CLK_INFRA_UART2_SEL>;
+                       assigned-clock-parents = <&topckgen CLK_TOP_CB_CKSQ_40M>,
+                                                <&topckgen CLK_TOP_UART_SEL>;
+                       status = "disabled";
+               };
+
+               snand: snfi@11005000 {
+                       compatible = "mediatek,mt7986-snand";
+                       reg = <0 0x11005000 0 0x1000>, <0 0x11006000 0 0x1000>;
+                       reg-names = "nfi", "ecc";
+                       interrupts = <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&infracfg CLK_INFRA_SPINFI1_CK>,
+                                <&infracfg CLK_INFRA_NFI1_CK>,
+                                <&infracfg CLK_INFRA_NFI_HCK_CK>;
+                       clock-names = "pad_clk", "nfi_clk", "nfi_hclk";
+                       assigned-clocks = <&topckgen CLK_TOP_SPINFI_SEL>,
+                                         <&topckgen CLK_TOP_NFI1X_SEL>;
+                       assigned-clock-parents = <&topckgen CLK_TOP_CB_M_D8>,
+                                                <&topckgen CLK_TOP_CB_M_D8>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               i2c0: i2c@11007000 {
+                       compatible = "mediatek,mt7981-i2c";
+                       reg = <0 0x11007000 0 0x1000>,
+                             <0 0x10217080 0 0x80>;
+                       interrupts = <GIC_SPI 136 IRQ_TYPE_LEVEL_HIGH>;
+                       clock-div = <1>;
+                       clocks = <&infracfg CLK_INFRA_I2C0_CK>,
+                                <&infracfg CLK_INFRA_AP_DMA_CK>,
+                                <&infracfg CLK_INFRA_I2C_MCK_CK>,
+                                <&infracfg CLK_INFRA_I2C_PCK_CK>;
+                       clock-names = "main", "dma", "arb", "pmic";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               spi2: spi@11009000 {
+                       compatible = "mediatek,mt7986-spi-ipm", "mediatek,spi-ipm";
+                       reg = <0 0x11009000 0 0x100>;
+                       interrupts = <GIC_SPI 142 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&topckgen CLK_TOP_CB_M_D2>,
+                                <&topckgen CLK_TOP_SPI_SEL>,
+                                <&infracfg CLK_INFRA_SPI2_CK>,
+                                <&infracfg CLK_INFRA_SPI2_HCK_CK>;
+                       clock-names = "parent-clk", "sel-clk", "spi-clk", "hclk";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               spi0: spi@1100a000 {
+                       compatible = "mediatek,mt7986-spi-ipm", "mediatek,spi-ipm";
+                       reg = <0 0x1100a000 0 0x100>;
+                       interrupts = <GIC_SPI 140 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&topckgen CLK_TOP_CB_M_D2>,
+                                <&topckgen CLK_TOP_SPI_SEL>,
+                                <&infracfg CLK_INFRA_SPI0_CK>,
+                                <&infracfg CLK_INFRA_SPI0_HCK_CK>;
+                       clock-names = "parent-clk", "sel-clk", "spi-clk", "hclk";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               spi1: spi@1100b000 {
+                       compatible = "mediatek,mt7986-spi-ipm", "mediatek,spi-ipm";
+                       reg = <0 0x1100b000 0 0x100>;
+                       interrupts = <GIC_SPI 141 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&topckgen CLK_TOP_CB_M_D2>,
+                                <&topckgen CLK_TOP_SPIM_MST_SEL>,
+                                <&infracfg CLK_INFRA_SPI1_CK>,
+                                <&infracfg CLK_INFRA_SPI1_HCK_CK>;
+                       clock-names = "parent-clk", "sel-clk", "spi-clk", "hclk";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               thermal: thermal@1100c800 {
+                       compatible = "mediatek,mt7981-thermal", "mediatek,mt7986-thermal";
+                       reg = <0 0x1100c800 0 0x800>;
+                       interrupts = <GIC_SPI 138 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&infracfg CLK_INFRA_THERM_CK>,
+                                <&infracfg CLK_INFRA_ADC_26M_CK>;
+                       clock-names = "therm", "auxadc";
+                       nvmem-cells = <&thermal_calibration>;
+                       nvmem-cell-names = "calibration-data";
+                       #thermal-sensor-cells = <1>;
+                       mediatek,auxadc = <&auxadc>;
+                       mediatek,apmixedsys = <&apmixedsys>;
+               };
+
+               auxadc: adc@1100d000 {
+                       compatible = "mediatek,mt7981-auxadc",
+                                    "mediatek,mt7986-auxadc",
+                                    "mediatek,mt7622-auxadc";
+                       reg = <0 0x1100d000 0 0x1000>;
+                       clocks = <&infracfg CLK_INFRA_ADC_26M_CK>,
+                                <&infracfg CLK_INFRA_ADC_FRC_CK>;
+                       clock-names = "main", "32k";
+                       #io-channel-cells = <1>;
+               };
+
+               xhci: usb@11200000 {
+                       compatible = "mediatek,mt7986-xhci",
+                                    "mediatek,mtk-xhci";
+                       reg = <0 0x11200000 0 0x2e00>,
+                             <0 0x11203e00 0 0x0100>;
+                       reg-names = "mac", "ippc";
+                       interrupts = <GIC_SPI 173 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&infracfg CLK_INFRA_IUSB_SYS_CK>,
+                                <&infracfg CLK_INFRA_IUSB_CK>,
+                                <&infracfg CLK_INFRA_IUSB_133_CK>,
+                                <&infracfg CLK_INFRA_IUSB_66M_CK>,
+                                <&topckgen CLK_TOP_U2U3_XHCI_SEL>;
+                       clock-names = "sys_ck",
+                                     "ref_ck",
+                                     "mcu_ck",
+                                     "dma_ck",
+                                     "xhci_ck";
+                       phys = <&u2port0 PHY_TYPE_USB2>,
+                              <&u3port0 PHY_TYPE_USB3>;
+                       vusb33-supply = <&reg_3p3v>;
+                       status = "disabled";
+               };
+
+               afe: audio-controller@11210000 {
+                       compatible = "mediatek,mt79xx-audio";
+                       reg = <0 0x11210000 0 0x9000>;
+                       interrupts = <GIC_SPI 106 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&infracfg CLK_INFRA_AUD_BUS_CK>,
+                                <&infracfg CLK_INFRA_AUD_26M_CK>,
+                                <&infracfg CLK_INFRA_AUD_L_CK>,
+                                <&infracfg CLK_INFRA_AUD_AUD_CK>,
+                                <&infracfg CLK_INFRA_AUD_EG2_CK>,
+                                <&topckgen CLK_TOP_AUD_SEL>;
+                       clock-names = "aud_bus_ck",
+                                     "aud_26m_ck",
+                                     "aud_l_ck",
+                                     "aud_aud_ck",
+                                     "aud_eg2_ck",
+                                     "aud_sel";
+                       assigned-clocks = <&topckgen CLK_TOP_AUD_SEL>,
+                                         <&topckgen CLK_TOP_A1SYS_SEL>,
+                                         <&topckgen CLK_TOP_AUD_L_SEL>,
+                                         <&topckgen CLK_TOP_A_TUNER_SEL>;
+                       assigned-clock-parents = <&topckgen CLK_TOP_CB_APLL2_196M>,
+                                                <&topckgen CLK_TOP_APLL2_D4>,
+                                                <&topckgen CLK_TOP_CB_APLL2_196M>,
+                                                <&topckgen CLK_TOP_APLL2_D4>;
+                       status = "disabled";
+               };
+
+               mmc0: mmc@11230000 {
+                       compatible = "mediatek,mt7986-mmc", "mediatek,mt7981-mmc";
+                       reg = <0 0x11230000 0 0x1000>, <0 0x11c20000 0 0x1000>;
+                       interrupts = <GIC_SPI 143 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&infracfg CLK_INFRA_MSDC_CK>,
+                                <&infracfg CLK_INFRA_MSDC_HCK_CK>,
+                                <&infracfg CLK_INFRA_MSDC_66M_CK>,
+                                <&infracfg CLK_INFRA_MSDC_133M_CK>;
+                       assigned-clocks = <&topckgen CLK_TOP_EMMC_208M_SEL>,
+                                         <&topckgen CLK_TOP_EMMC_400M_SEL>;
+                       assigned-clock-parents = <&topckgen CLK_TOP_CB_M_D2>,
+                                                <&topckgen CLK_TOP_CB_NET2_D2>;
+                       clock-names = "source", "hclk", "axi_cg", "ahb_cg";
+                       status = "disabled";
+               };
+
+               pcie: pcie@11280000 {
+                       compatible = "mediatek,mt7981-pcie",
+                                    "mediatek,mt7986-pcie";
+                       reg = <0 0x11280000 0 0x4000>;
+                       reg-names = "pcie-mac";
+                       ranges = <0x82000000 0 0x20000000
+                                 0x0 0x20000000 0 0x10000000>;
+                       device_type = "pci";
+                       interrupts = <GIC_SPI 168 IRQ_TYPE_LEVEL_HIGH>;
+                       bus-range = <0x00 0xff>;
+                       clocks = <&infracfg CLK_INFRA_IPCIE_CK>,
+                                <&infracfg CLK_INFRA_IPCIE_PIPE_CK>,
+                                <&infracfg CLK_INFRA_IPCIER_CK>,
+                                <&infracfg CLK_INFRA_IPCIEB_CK>;
+                       phys = <&u3port0 PHY_TYPE_PCIE>;
+                       phy-names = "pcie-phy";
+                       interrupt-map-mask = <0 0 0 7>;
+                       interrupt-map = <0 0 0 1 &pcie_intc 0>,
+                                       <0 0 0 2 &pcie_intc 1>,
+                                       <0 0 0 3 &pcie_intc 2>,
+                                       <0 0 0 4 &pcie_intc 3>;
+                       #interrupt-cells = <1>;
+                       #address-cells = <3>;
+                       #size-cells = <2>;
+                       status = "disabled";
+
+                       pcie_intc: interrupt-controller {
+                               interrupt-controller;
+                               #interrupt-cells = <1>;
+                               #address-cells = <0>;
+                       };
+               };
+
+               pio: pinctrl@11d00000 {
+                       compatible = "mediatek,mt7981-pinctrl";
+                       reg = <0 0x11d00000 0 0x1000>,
+                             <0 0x11c00000 0 0x1000>,
+                             <0 0x11c10000 0 0x1000>,
+                             <0 0x11d20000 0 0x1000>,
+                             <0 0x11e00000 0 0x1000>,
+                             <0 0x11e20000 0 0x1000>,
+                             <0 0x11f00000 0 0x1000>,
+                             <0 0x11f10000 0 0x1000>,
+                             <0 0x1000b000 0 0x1000>;
+                       reg-names = "gpio", "iocfg_rt", "iocfg_rm",
+                                   "iocfg_rb", "iocfg_lb", "iocfg_bl",
+                                   "iocfg_tm", "iocfg_tl", "eint";
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       gpio-ranges = <&pio 0 0 56>;
+                       interrupt-controller;
+                       interrupts = <GIC_SPI 225 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-parent = <&gic>;
+                       #interrupt-cells = <2>;
+
+                       mdio_pins: mdc-mdio-pins {
+                               mux {
+                                       function = "eth";
+                                       groups = "smi_mdc_mdio";
+                               };
+                       };
+
+                       uart0_pins: uart0-pins {
+                               mux {
+                                       function = "uart";
+                                       groups = "uart0";
+                               };
+                       };
+
+                       wifi_dbdc_pins: wifi-dbdc-pins {
+                               mux {
+                                       function = "eth";
+                                       groups = "wf0_mode1";
+                               };
+
+                               conf {
+                                       pins = "WF_HB1", "WF_HB2", "WF_HB3", "WF_HB4",
+                                              "WF_HB0", "WF_HB0_B", "WF_HB5", "WF_HB6",
+                                              "WF_HB7", "WF_HB8", "WF_HB9", "WF_HB10",
+                                              "WF_TOP_CLK", "WF_TOP_DATA", "WF_XO_REQ",
+                                              "WF_CBA_RESETB", "WF_DIG_RESETB";
+                                       drive-strength = <4>;
+                               };
+                       };
+
+                       gbe_led0_pins: gbe-led0-pins {
+                               mux {
+                                       function = "led";
+                                       groups = "gbe_led0";
+                               };
+                       };
+
+                       gbe_led1_pins: gbe-led1-pins {
+                               mux {
+                                       function = "led";
+                                       groups = "gbe_led1";
+                               };
+                       };
+               };
+
+               topmisc: topmisc@11d10000 {
+                       compatible = "mediatek,mt7981-topmisc", "syscon";
+                       reg = <0 0x11d10000 0 0x10000>;
+                       #clock-cells = <1>;
+               };
+
+               usb_phy: usb-phy@11e10000 {
+                       compatible = "mediatek,mt7981",
+                                    "mediatek,generic-tphy-v2";
+                       ranges = <0 0 0x11e10000 0x1700>;
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       status = "disabled";
+
+                       u2port0: usb-phy@0 {
+                               reg = <0x0 0x700>;
+                               clocks = <&topckgen CLK_TOP_USB_FRMCNT_SEL>;
+                               clock-names = "ref";
+                               #phy-cells = <1>;
+                       };
+
+                       u3port0: usb-phy@700 {
+                               reg = <0x700 0x900>;
+                               clocks = <&topckgen CLK_TOP_USB3_PHY_SEL>;
+                               clock-names = "ref";
+                               #phy-cells = <1>;
+                               mediatek,syscon-type = <&topmisc 0x218 0>;
+                               status = "okay";
+                       };
+               };
+
+               efuse: efuse@11f20000 {
+                       compatible = "mediatek,mt7981-efuse",
+                                    "mediatek,efuse";
+                       reg = <0 0x11f20000 0 0x1000>;
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       status = "okay";
+
+                       thermal_calibration: thermal-calib@274 {
+                               reg = <0x274 0xc>;
+                       };
+
+                       phy_calibration: phy-calib@8dc {
+                               reg = <0x8dc 0x10>;
+                       };
+
+                       comb_rx_imp_p0: usb3-rx-imp@8c8 {
+                               reg = <0x8c8 1>;
+                               bits = <0 5>;
+                       };
+
+                       comb_tx_imp_p0: usb3-tx-imp@8c8 {
+                               reg = <0x8c8 2>;
+                               bits = <5 5>;
+                       };
+
+                       comb_intr_p0: usb3-intr@8c9 {
+                               reg = <0x8c9 1>;
+                               bits = <2 6>;
+                       };
+               };
+
+               ethsys: clock-controller@15000000 {
+                       compatible = "mediatek,mt7981-ethsys",
+                                    "syscon";
+                       reg = <0 0x15000000 0 0x1000>;
+                       #clock-cells = <1>;
+                       #reset-cells = <1>;
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+               };
+
+               wed: wed@15010000 {
+                       compatible = "mediatek,mt7981-wed",
+                                    "mediatek,mt7986-wed",
+                                    "syscon";
+                       reg = <0 0x15010000 0 0x1000>;
+                       interrupt-parent = <&gic>;
+                       interrupts = <GIC_SPI 205 IRQ_TYPE_LEVEL_HIGH>;
+                       memory-region = <&wo_emi0>, <&wo_data>;
+                       memory-region-names = "wo-emi", "wo-data";
+                       mediatek,wo-ccif = <&wo_ccif0>;
+                       mediatek,wo-ilm = <&wo_ilm0>;
+                       mediatek,wo-dlm = <&wo_dlm0>;
+                       mediatek,wo-cpuboot = <&wo_cpuboot>;
+               };
+
+               eth: ethernet@15100000 {
+                       compatible = "mediatek,mt7981-eth";
+                       reg = <0 0x15100000 0 0x80000>;
+                       interrupts = <GIC_SPI 196 IRQ_TYPE_LEVEL_HIGH>,
+                                       <GIC_SPI 197 IRQ_TYPE_LEVEL_HIGH>,
+                                       <GIC_SPI 198 IRQ_TYPE_LEVEL_HIGH>,
+                                       <GIC_SPI 199 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&ethsys CLK_ETH_FE_EN>,
+                               <&ethsys CLK_ETH_GP2_EN>,
+                               <&ethsys CLK_ETH_GP1_EN>,
+                               <&ethsys CLK_ETH_WOCPU0_EN>,
+                               <&sgmiisys0 CLK_SGM0_TX_EN>,
+                               <&sgmiisys0 CLK_SGM0_RX_EN>,
+                               <&sgmiisys0 CLK_SGM0_CK0_EN>,
+                               <&sgmiisys0 CLK_SGM0_CDR_CK0_EN>,
+                               <&sgmiisys1 CLK_SGM1_TX_EN>,
+                               <&sgmiisys1 CLK_SGM1_RX_EN>,
+                               <&sgmiisys1 CLK_SGM1_CK1_EN>,
+                               <&sgmiisys1 CLK_SGM1_CDR_CK1_EN>,
+                               <&topckgen CLK_TOP_SGM_REG>,
+                               <&topckgen CLK_TOP_NETSYS_SEL>,
+                               <&topckgen CLK_TOP_NETSYS_500M_SEL>;
+                       clock-names = "fe", "gp2", "gp1", "wocpu0",
+                                               "sgmii_tx250m", "sgmii_rx250m",
+                                               "sgmii_cdr_ref", "sgmii_cdr_fb",
+                                               "sgmii2_tx250m", "sgmii2_rx250m",
+                                               "sgmii2_cdr_ref", "sgmii2_cdr_fb",
+                                               "sgmii_ck", "netsys0", "netsys1";
+                       assigned-clocks = <&topckgen CLK_TOP_NETSYS_2X_SEL>,
+                                         <&topckgen CLK_TOP_SGM_325M_SEL>;
+                       assigned-clock-parents = <&topckgen CLK_TOP_CB_NET2_800M>,
+                                                <&topckgen CLK_TOP_CB_SGM_325M>;
+                       mediatek,ethsys = <&ethsys>;
+                       mediatek,sgmiisys = <&sgmiisys0>, <&sgmiisys1>;
+                       mediatek,infracfg = <&topmisc>;
+                       mediatek,wed = <&wed>;
+                       #reset-cells = <1>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+
+                       mdio_bus: mdio-bus {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               int_gbe_phy: ethernet-phy@0 {
+                                       compatible = "ethernet-phy-ieee802.3-c22";
+                                       reg = <0>;
+                                       phy-mode = "gmii";
+                                       phy-is-integrated;
+                                       nvmem-cells = <&phy_calibration>;
+                                       nvmem-cell-names = "phy-cal-data";
+
+                                       leds {
+                                               #address-cells = <1>;
+                                               #size-cells = <0>;
+
+                                               int_gbe_phy_led0: int-gbe-phy-led0@0 {
+                                                       reg = <0>;
+                                                       function = LED_FUNCTION_LAN;
+                                                       status = "disabled";
+                                               };
+
+                                               int_gbe_phy_led1: int-gbe-phy-led1@1 {
+                                                       reg = <1>;
+                                                       function = LED_FUNCTION_LAN;
+                                                       status = "disabled";
+                                               };
+                                       };
+                               };
+                       };
+               };
+
+               wdma: wdma@15104800 {
+                       compatible = "mediatek,wed-wdma";
+                       reg = <0 0x15104800 0 0x400>,
+                             <0 0x15104c00 0 0x400>;
+               };
+
+               wo_cpuboot: syscon@15194000 {
+                       compatible = "mediatek,mt7986-wo-cpuboot", "syscon";
+                       reg = <0 0x15194000 0 0x1000>;
+               };
+
+               ap2woccif: ap2woccif@151a5000 {
+                       compatible = "mediatek,ap2woccif";
+                       reg = <0 0x151a5000 0 0x1000>,
+                             <0 0x151ad000 0 0x1000>;
+                       interrupt-parent = <&gic>;
+                       interrupts = <GIC_SPI 211 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 212 IRQ_TYPE_LEVEL_HIGH>;
+               };
+
+               wo_ccif0: syscon@151a5000 {
+                       compatible = "mediatek,mt7986-wo-ccif", "syscon";
+                       reg = <0 0x151a5000 0 0x1000>;
+                       interrupt-parent = <&gic>;
+                       interrupts = <GIC_SPI 211 IRQ_TYPE_LEVEL_HIGH>;
+               };
+
+               wo_ilm0: syscon@151e0000 {
+                       compatible = "mediatek,mt7986-wo-ilm", "syscon";
+                       reg = <0 0x151e0000 0 0x8000>;
+               };
+
+               wo_dlm0: syscon@151e8000 {
+                       compatible = "mediatek,mt7986-wo-dlm", "syscon";
+                       reg = <0 0x151e8000 0 0x2000>;
+               };
+
+               wifi: wifi@18000000 {
+                       compatible = "mediatek,mt7981-wmac";
+                       reg = <0 0x18000000 0 0x1000000>,
+                             <0 0x10003000 0 0x1000>,
+                             <0 0x11d10000 0 0x1000>;
+                       resets = <&watchdog MT7986_TOPRGU_CONSYS_SW_RST>;
+                       reset-names = "consys";
+                       pinctrl-0 = <&wifi_dbdc_pins>;
+                       pinctrl-names = "dbdc";
+                       clocks = <&topckgen CLK_TOP_NETSYS_MCU_SEL>,
+                                <&topckgen CLK_TOP_AP2CNN_HOST_SEL>;
+                       clock-names = "mcu", "ap2conn";
+                       interrupts = <GIC_SPI 213 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 214 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 215 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 216 IRQ_TYPE_LEVEL_HIGH>;
+                       memory-region = <&wmcpu_emi>;
+                       status = "disabled";
+               };
+       };
+
+       thermal-zones {
+               cpu_thermal: cpu-thermal {
+                       polling-delay-passive = <1000>;
+                       polling-delay = <1000>;
+                       thermal-sensors = <&thermal 0>;
+
+                       trips {
+                               cpu_trip_active_highest: active-highest {
+                                       temperature = <70000>;
+                                       hysteresis = <2000>;
+                                       type = "active";
+                               };
+
+                               cpu_trip_active_high: active-high {
+                                       temperature = <60000>;
+                                       hysteresis = <2000>;
+                                       type = "active";
+                               };
+
+                               cpu_trip_active_med: active-med {
+                                       temperature = <50000>;
+                                       hysteresis = <2000>;
+                                       type = "active";
+                               };
+
+                               cpu_trip_active_low: active-low {
+                                       temperature = <45000>;
+                                       hysteresis = <2000>;
+                                       type = "active";
+                               };
+
+                               cpu_trip_active_lowest: active-lowest {
+                                       temperature = <40000>;
+                                       hysteresis = <2000>;
+                                       type = "active";
+                               };
+                       };
+
+                       cooling-maps {
+                               cpu-active-highest {
+                                       /* active: set fan to cooling level 7 */
+                                       cooling-device = <&fan 7 7>;
+                                       trip = <&cpu_trip_active_highest>;
+                               };
+
+                               cpu-active-high {
+                                       /* active: set fan to cooling level 5 */
+                                       cooling-device = <&fan 5 5>;
+                                       trip = <&cpu_trip_active_high>;
+                               };
+
+                               cpu-active-med {
+                                       /* active: set fan to cooling level 3 */
+                                       cooling-device = <&fan 3 3>;
+                                       trip = <&cpu_trip_active_med>;
+                               };
+
+                               cpu-active-low {
+                                       /* active: set fan to cooling level 2 */
+                                       cooling-device = <&fan 2 2>;
+                                       trip = <&cpu_trip_active_low>;
+                               };
+
+                               cpu-active-lowest {
+                                       /* active: set fan to cooling level 1 */
+                                       cooling-device = <&fan 1 1>;
+                                       trip = <&cpu_trip_active_lowest>;
+                               };
+                       };
+               };
+       };
+
+       timer {
+               compatible = "arm,armv8-timer";
+               interrupt-parent = <&gic>;
+               clock-frequency = <13000000>;
+               interrupts = <GIC_PPI 13 IRQ_TYPE_LEVEL_LOW>,
+                            <GIC_PPI 14 IRQ_TYPE_LEVEL_LOW>,
+                            <GIC_PPI 11 IRQ_TYPE_LEVEL_LOW>,
+                            <GIC_PPI 10 IRQ_TYPE_LEVEL_LOW>;
+
+       };
+
+       trng {
+               compatible = "mediatek,mt7981-rng";
+       };
+};
diff --git a/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7986a-rfb-spim-nand.dts b/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7986a-rfb-spim-nand.dts
new file mode 100644 (file)
index 0000000..ce00709
--- /dev/null
@@ -0,0 +1,52 @@
+/* SPDX-License-Identifier: (GPL-2.0-only OR MIT) */
+
+#include "mt7986a-rfb.dtsi"
+
+/ {
+       compatible = "mediatek,mt7986a-rfb-snand";
+};
+
+&spi0 {
+       status = "okay";
+
+       spi_nand: spi_nand@0 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "spi-nand";
+               reg = <1>;
+               spi-max-frequency = <10000000>;
+               spi-tx-bus-width = <4>;
+               spi-rx-bus-width = <4>;
+
+               partitions {
+                       compatible = "fixed-partitions";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       partition@0 {
+                               label = "BL2";
+                               reg = <0x00000 0x0100000>;
+                               read-only;
+                       };
+                       partition@100000 {
+                               label = "u-boot-env";
+                               reg = <0x0100000 0x0080000>;
+                       };
+                       factory: partition@180000 {
+                               label = "Factory";
+                               reg = <0x180000 0x0200000>;
+                       };
+                       partition@380000 {
+                               label = "FIP";
+                               reg = <0x380000 0x0200000>;
+                       };
+                       partition@580000 {
+                               label = "ubi";
+                               reg = <0x580000 0x4000000>;
+                       };
+               };
+       };
+};
+
+&wifi {
+       mediatek,mtd-eeprom = <&factory 0>;
+};
diff --git a/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7986a-rfb-spim-nor.dts b/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7986a-rfb-spim-nor.dts
new file mode 100644 (file)
index 0000000..ea14831
--- /dev/null
@@ -0,0 +1,51 @@
+/* SPDX-License-Identifier: (GPL-2.0-only OR MIT) */
+
+#include "mt7986a-rfb.dtsi"
+
+/ {
+       compatible = "mediatek,mt7986a-rfb-snor";
+};
+
+&spi0 {
+       status = "okay";
+
+       spi_nor: spi_nor@0 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "jedec,spi-nor";
+               reg = <0>;
+               spi-max-frequency = <52000000>;
+               spi-tx-bus-width = <4>;
+               spi-rx-bus-width = <4>;
+               partitions {
+                       compatible = "fixed-partitions";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+
+                       partition@00000 {
+                               label = "BL2";
+                               reg = <0x00000 0x0040000>;
+                       };
+                       partition@40000 {
+                               label = "u-boot-env";
+                               reg = <0x40000 0x0010000>;
+                       };
+                       factory: partition@50000 {
+                               label = "Factory";
+                               reg = <0x50000 0x00B0000>;
+                       };
+                       partition@100000 {
+                               label = "FIP";
+                               reg = <0x100000 0x0080000>;
+                       };
+                       partition@180000 {
+                               label = "firmware";
+                               reg = <0x180000 0xE00000>;
+                       };
+               };
+       };
+};
+
+&wifi {
+       mediatek,mtd-eeprom = <&factory 0>;
+};
diff --git a/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7986a-rfb.dtsi b/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7986a-rfb.dtsi
new file mode 100644 (file)
index 0000000..26d560b
--- /dev/null
@@ -0,0 +1,389 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/*
+ * Copyright (C) 2021 MediaTek Inc.
+ * Author: Sam.Shih <sam.shih@mediatek.com>
+ */
+
+/dts-v1/;
+#include "mt7986a.dtsi"
+
+/ {
+       model = "MediaTek MT7986a RFB";
+       compatible = "mediatek,mt7986a-rfb";
+
+       aliases {
+               serial0 = &uart0;
+       };
+
+       chosen {
+               stdout-path = "serial0:115200n8";
+       };
+
+       memory {
+               reg = <0 0x40000000 0 0x40000000>;
+       };
+
+       reg_1p8v: regulator-1p8v {
+               compatible = "regulator-fixed";
+               regulator-name = "fixed-1.8V";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+               regulator-boot-on;
+               regulator-always-on;
+       };
+
+       reg_3p3v: regulator-3p3v {
+               compatible = "regulator-fixed";
+               regulator-name = "fixed-3.3V";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-boot-on;
+               regulator-always-on;
+       };
+
+       reg_5v: regulator-5v {
+               compatible = "regulator-fixed";
+               regulator-name = "fixed-5V";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               regulator-boot-on;
+               regulator-always-on;
+       };
+};
+
+&eth {
+       status = "okay";
+
+       gmac0: mac@0 {
+               compatible = "mediatek,eth-mac";
+               reg = <0>;
+               phy-mode = "2500base-x";
+
+               fixed-link {
+                       speed = <2500>;
+                       full-duplex;
+                       pause;
+               };
+       };
+
+       gmac1: mac@1 {
+               compatible = "mediatek,eth-mac";
+               reg = <1>;
+               phy-mode = "2500base-x";
+       };
+
+       mdio: mdio-bus {
+               #address-cells = <1>;
+               #size-cells = <0>;
+       };
+};
+
+&wifi {
+       status = "okay";
+       pinctrl-names = "default", "dbdc";
+       pinctrl-0 = <&wf_2g_5g_pins>;
+       pinctrl-1 = <&wf_dbdc_pins>;
+};
+
+&mdio {
+       phy5: phy@5 {
+               compatible = "ethernet-phy-id67c9.de0a";
+               reg = <5>;
+
+               reset-gpios = <&pio 6 1>;
+               reset-deassert-us = <20000>;
+       };
+
+       phy6: phy@6 {
+               compatible = "ethernet-phy-id67c9.de0a";
+               reg = <6>;
+       };
+
+       switch: switch@1f {
+               compatible = "mediatek,mt7531";
+               reg = <31>;
+               reset-gpios = <&pio 5 0>;
+       };
+};
+
+&crypto {
+       status = "okay";
+};
+
+&mmc0 {
+       pinctrl-names = "default", "state_uhs";
+       pinctrl-0 = <&mmc0_pins_default>;
+       pinctrl-1 = <&mmc0_pins_uhs>;
+       bus-width = <8>;
+       max-frequency = <200000000>;
+       cap-mmc-highspeed;
+       mmc-hs200-1_8v;
+       mmc-hs400-1_8v;
+       hs400-ds-delay = <0x14014>;
+       vmmc-supply = <&reg_3p3v>;
+       vqmmc-supply = <&reg_1p8v>;
+       non-removable;
+       no-sd;
+       no-sdio;
+       status = "okay";
+};
+
+&pcie {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pcie_pins>;
+       status = "okay";
+};
+
+&pcie_phy {
+       status = "okay";
+};
+
+&pio {
+       mmc0_pins_default: mmc0-pins {
+               mux {
+                       function = "emmc";
+                       groups = "emmc_51";
+               };
+               conf-cmd-dat {
+                       pins = "EMMC_DATA_0", "EMMC_DATA_1", "EMMC_DATA_2",
+                              "EMMC_DATA_3", "EMMC_DATA_4", "EMMC_DATA_5",
+                              "EMMC_DATA_6", "EMMC_DATA_7", "EMMC_CMD";
+                       input-enable;
+                       drive-strength = <4>;
+                       mediatek,pull-up-adv = <1>;     /* pull-up 10K */
+               };
+               conf-clk {
+                       pins = "EMMC_CK";
+                       drive-strength = <6>;
+                       mediatek,pull-down-adv = <2>;   /* pull-down 50K */
+               };
+               conf-ds {
+                       pins = "EMMC_DSL";
+                       mediatek,pull-down-adv = <2>;   /* pull-down 50K */
+               };
+               conf-rst {
+                       pins = "EMMC_RSTB";
+                       drive-strength = <4>;
+                       mediatek,pull-up-adv = <1>;     /* pull-up 10K */
+               };
+       };
+
+       mmc0_pins_uhs: mmc0-uhs-pins {
+               mux {
+                       function = "emmc";
+                       groups = "emmc_51";
+               };
+               conf-cmd-dat {
+                       pins = "EMMC_DATA_0", "EMMC_DATA_1", "EMMC_DATA_2",
+                              "EMMC_DATA_3", "EMMC_DATA_4", "EMMC_DATA_5",
+                              "EMMC_DATA_6", "EMMC_DATA_7", "EMMC_CMD";
+                       input-enable;
+                       drive-strength = <4>;
+                       mediatek,pull-up-adv = <1>;     /* pull-up 10K */
+               };
+               conf-clk {
+                       pins = "EMMC_CK";
+                       drive-strength = <6>;
+                       mediatek,pull-down-adv = <2>;   /* pull-down 50K */
+               };
+               conf-ds {
+                       pins = "EMMC_DSL";
+                       mediatek,pull-down-adv = <2>;   /* pull-down 50K */
+               };
+               conf-rst {
+                       pins = "EMMC_RSTB";
+                       drive-strength = <4>;
+                       mediatek,pull-up-adv = <1>;     /* pull-up 10K */
+               };
+       };
+
+       pcie_pins: pcie-pins {
+               mux {
+                       function = "pcie";
+                       groups = "pcie_clk", "pcie_wake", "pcie_pereset";
+               };
+       };
+
+       spic_pins_g2: spic-pins-29-to-32 {
+               mux {
+                       function = "spi";
+                       groups = "spi1_2";
+               };
+       };
+
+       spi_flash_pins: spi-flash-pins-33-to-38 {
+               mux {
+                       function = "spi";
+                       groups = "spi0", "spi0_wp_hold";
+               };
+               conf-pu {
+                       pins = "SPI2_CS", "SPI2_HOLD", "SPI2_WP";
+                       drive-strength = <8>;
+                       mediatek,pull-up-adv = <0>;     /* bias-disable */
+               };
+               conf-pd {
+                       pins = "SPI2_CLK", "SPI2_MOSI", "SPI2_MISO";
+                       drive-strength = <8>;
+                       mediatek,pull-down-adv = <0>;   /* bias-disable */
+               };
+       };
+
+       uart1_pins: uart1-pins {
+               mux {
+                       function = "uart";
+                       groups = "uart1";
+               };
+       };
+
+       uart2_pins: uart2-pins {
+               mux {
+                       function = "uart";
+                       groups = "uart2";
+               };
+       };
+
+       wf_2g_5g_pins: wf_2g_5g-pins {
+               mux {
+                       function = "wifi";
+                       groups = "wf_2g", "wf_5g";
+               };
+               conf {
+                       pins = "WF0_HB1", "WF0_HB2", "WF0_HB3", "WF0_HB4",
+                              "WF0_HB0", "WF0_HB0_B", "WF0_HB5", "WF0_HB6",
+                              "WF0_HB7", "WF0_HB8", "WF0_HB9", "WF0_HB10",
+                              "WF0_TOP_CLK", "WF0_TOP_DATA", "WF1_HB1",
+                              "WF1_HB2", "WF1_HB3", "WF1_HB4", "WF1_HB0",
+                              "WF1_HB5", "WF1_HB6", "WF1_HB7", "WF1_HB8",
+                              "WF1_TOP_CLK", "WF1_TOP_DATA";
+                       drive-strength = <4>;
+               };
+       };
+
+       wf_dbdc_pins: wf_dbdc-pins {
+               mux {
+                       function = "wifi";
+                       groups = "wf_dbdc";
+               };
+               conf {
+                       pins = "WF0_HB1", "WF0_HB2", "WF0_HB3", "WF0_HB4",
+                              "WF0_HB0", "WF0_HB0_B", "WF0_HB5", "WF0_HB6",
+                              "WF0_HB7", "WF0_HB8", "WF0_HB9", "WF0_HB10",
+                              "WF0_TOP_CLK", "WF0_TOP_DATA", "WF1_HB1",
+                              "WF1_HB2", "WF1_HB3", "WF1_HB4", "WF1_HB0",
+                              "WF1_HB5", "WF1_HB6", "WF1_HB7", "WF1_HB8",
+                              "WF1_TOP_CLK", "WF1_TOP_DATA";
+                       drive-strength = <4>;
+               };
+       };
+};
+
+&spi0 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&spi_flash_pins>;
+       cs-gpios = <0>, <0>;
+       #address-cells = <1>;
+       #size-cells = <0>;
+       status = "disabled";
+};
+
+&spi1 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&spic_pins_g2>;
+       status = "okay";
+
+       proslic_spi: proslic_spi@0 {
+               compatible = "silabs,proslic_spi";
+               reg = <0>;
+               spi-max-frequency = <10000000>;
+               spi-cpha = <1>;
+               spi-cpol = <1>;
+               channel_count = <1>;
+               debug_level = <4>;       /* 1 = TRC, 2 = DBG, 4 = ERR */
+               reset_gpio = <&pio 7 0>;
+               ig,enable-spi = <1>;     /* 1: Enable, 0: Disable */
+       };
+};
+
+&gmac1 {
+       phy-mode = "2500base-x";
+       phy-connection-type = "2500base-x";
+       phy-handle = <&phy6>;
+};
+
+&switch {
+       ports {
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               port@0 {
+                       reg = <0>;
+                       label = "lan1";
+               };
+
+               port@1 {
+                       reg = <1>;
+                       label = "lan2";
+               };
+
+               port@2 {
+                       reg = <2>;
+                       label = "lan3";
+               };
+
+               port@3 {
+                       reg = <3>;
+                       label = "lan4";
+               };
+
+               port@4 {
+                       reg = <4>;
+                       label = "wan";
+               };
+
+               port@5 {
+                       reg = <5>;
+                       label = "lan6";
+
+                       phy-mode = "2500base-x";
+                       phy-handle = <&phy5>;
+               };
+
+               port@6 {
+                       reg = <6>;
+                       ethernet = <&gmac0>;
+                       phy-mode = "2500base-x";
+
+                       fixed-link {
+                               speed = <2500>;
+                               full-duplex;
+                               pause;
+                       };
+               };
+       };
+};
+
+&ssusb {
+       vusb33-supply = <&reg_3p3v>;
+       vbus-supply = <&reg_5v>;
+       status = "okay";
+};
+
+&uart0 {
+       status = "okay";
+};
+
+&uart1 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&uart1_pins>;
+       status = "okay";
+};
+
+&uart2 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&uart2_pins>;
+       status = "okay";
+};
+
+&usb_phy {
+       status = "okay";
+};
diff --git a/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-bananapi-bpi-r4-emmc.dtso b/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-bananapi-bpi-r4-emmc.dtso
new file mode 100644 (file)
index 0000000..4945185
--- /dev/null
@@ -0,0 +1,62 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/*
+ * Copyright (C) 2021 MediaTek Inc.
+ * Author: Frank Wunderlich <frank-w@public-files.de>
+ */
+
+/dts-v1/;
+/plugin/;
+
+/ {
+       compatible = "bananapi,bpi-r4", "mediatek,mt7988a";
+
+       fragment@0 {
+               target-path = "/soc/mmc@11230000";
+               __overlay__ {
+                       pinctrl-names = "default", "state_uhs";
+                       pinctrl-0 = <&mmc0_pins_emmc_51>;
+                       pinctrl-1 = <&mmc0_pins_emmc_51>;
+                       bus-width = <8>;
+                       max-frequency = <200000000>;
+                       cap-mmc-highspeed;
+                       mmc-hs200-1_8v;
+                       mmc-hs400-1_8v;
+                       hs400-ds-delay = <0x12814>;
+                       vqmmc-supply = <&reg_1p8v>;
+                       vmmc-supply = <&reg_3p3v>;
+                       non-removable;
+                       no-sd;
+                       no-sdio;
+                       status = "okay";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       card@0 {
+                               compatible = "mmc-card";
+                               reg = <0>;
+
+                               block {
+                                       compatible = "block-device";
+                                       partitions {
+                                               block-partition-env {
+                                                       partname = "ubootenv";
+                                                       nvmem-layout {
+                                                               compatible = "u-boot,env-layout";
+                                                       };
+                                               };
+                                               emmc_rootfs: block-partition-production {
+                                                       partname = "production";
+                                               };
+                                       };
+                               };
+                       };
+               };
+       };
+
+       fragment@2 {
+               target-path = "/chosen";
+               __overlay__ {
+                       rootdisk-emmc = <&emmc_rootfs>;
+               };
+       };
+};
diff --git a/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-bananapi-bpi-r4-rtc.dtso b/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-bananapi-bpi-r4-rtc.dtso
new file mode 100644 (file)
index 0000000..39910b8
--- /dev/null
@@ -0,0 +1,19 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/*
+ * Copyright (C) 2023
+ * Author: Daniel Golle <daniel@makrotopia.org>
+ */
+
+/dts-v1/;
+/plugin/;
+
+/ {
+       compatible = "bananapi,bpi-r4", "mediatek,mt7988a";
+
+       fragment@0 {
+               target = <&pcf8563>;
+               __overlay__ {
+                       status = "okay";
+               };
+       };
+};
diff --git a/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-bananapi-bpi-r4-sd.dtso b/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-bananapi-bpi-r4-sd.dtso
new file mode 100644 (file)
index 0000000..1f5e149
--- /dev/null
@@ -0,0 +1,60 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/*
+ * Copyright (C) 2023 MediaTek Inc.
+ * Author: Frank Wunderlich <frank-w@public-files.de>
+ */
+
+/dts-v1/;
+/plugin/;
+
+#include <dt-bindings/gpio/gpio.h>
+
+/ {
+       compatible = "bananapi,bpi-r4", "mediatek,mt7988a";
+
+       fragment@1 {
+               target-path = "/soc/mmc@11230000";
+               __overlay__ {
+                       pinctrl-names = "default", "state_uhs";
+                       pinctrl-0 = <&mmc0_pins_sdcard>;
+                       pinctrl-1 = <&mmc0_pins_sdcard>;
+                       cd-gpios = <&pio 12 GPIO_ACTIVE_LOW>;
+                       bus-width = <4>;
+                       max-frequency = <52000000>;
+                       cap-sd-highspeed;
+                       vmmc-supply = <&reg_3p3v>;
+                       vqmmc-supply = <&reg_3p3v>;
+                       no-mmc;
+                       status = "okay";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       card@0 {
+                               compatible = "mmc-card";
+                               reg = <0>;
+
+                               block {
+                                       compatible = "block-device";
+                                       partitions {
+                                               block-partition-env {
+                                                       partname = "ubootenv";
+                                                       nvmem-layout {
+                                                               compatible = "u-boot,env-layout";
+                                                       };
+                                               };
+                                               sd_rootfs: block-partition-production {
+                                                       partname = "production";
+                                               };
+                                       };
+                               };
+                       };
+               };
+       };
+
+       fragment@2 {
+               target-path = "/chosen";
+               __overlay__ {
+                       rootdisk-sd = <&sd_rootfs>;
+               };
+       };
+};
diff --git a/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-bananapi-bpi-r4-wifi-mt7996a.dtso b/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-bananapi-bpi-r4-wifi-mt7996a.dtso
new file mode 100644 (file)
index 0000000..8a029b1
--- /dev/null
@@ -0,0 +1,99 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/dts-v1/;
+/plugin/;
+
+#include <dt-bindings/gpio/gpio.h>
+
+/ {
+       compatible = "bananapi,bpi-r4", "mediatek,mt7988a";
+
+       fragment@0 {
+               target-path = "/";
+               __overlay__ {
+                       wifi_12v: regulator-wifi-12v {
+                               compatible = "regulator-fixed";
+                               regulator-name = "wifi";
+                               regulator-min-microvolt = <12000000>;
+                               regulator-max-microvolt = <12000000>;
+                               gpio = <&pio 4 GPIO_ACTIVE_HIGH>;
+                               enable-active-high;
+                               regulator-always-on;
+                       };
+               };
+       };
+
+       fragment@1 {
+               target = <&i2c_wifi>;
+               __overlay__ {
+                       // 5G WIFI MAC Address EEPROM
+                       wifi_eeprom@51 {
+                               compatible = "atmel,24c02";
+                               reg = <0x51>;
+                               address-bits = <8>;
+                               page-size = <8>;
+                               size = <256>;
+
+                               nvmem-layout {
+                                       compatible = "fixed-layout";
+                                       #address-cells = <1>;
+                                       #size-cells = <1>;
+
+                                       macaddr_5g: macaddr@0 {
+                                               reg = <0x0 0x6>;
+                                       };
+                               };
+                       };
+
+                       // 6G WIFI MAC Address EEPROM
+                       wifi_eeprom@52 {
+                               compatible = "atmel,24c02";
+                               reg = <0x52>;
+                               address-bits = <8>;
+                               page-size = <8>;
+                               size = <256>;
+
+                               nvmem-layout {
+                                       compatible = "fixed-layout";
+                                       #address-cells = <1>;
+                                       #size-cells = <1>;
+
+                                       macaddr_6g: macaddr@0 {
+                                               reg = <0x0 0x6>;
+                                       };
+                               };
+                       };
+               };
+       };
+
+       fragment@2 {
+               target = <&pcie0>;
+               __overlay__ {
+                       pcie@0,0 {
+                               reg = <0x0000 0 0 0 0>;
+
+                               wifi@0,0 {
+                                       compatible = "mediatek,mt76";
+                                       reg = <0x0000 0 0 0 0>;
+                                       nvmem-cell-names = "mac-address";
+                                       nvmem-cells = <&macaddr_5g>;
+                               };
+                       };
+               };
+       };
+
+       fragment@3 {
+               target = <&pcie1>;
+               __overlay__ {
+                       pcie@0,0 {
+                               reg = <0x0000 0 0 0 0>;
+
+                               wifi@0,0 {
+                                       compatible = "mediatek,mt76";
+                                       reg = <0x0000 0 0 0 0>;
+                                       nvmem-cell-names = "mac-address";
+                                       nvmem-cells = <&macaddr_6g>;
+                               };
+                       };
+               };
+       };
+};
diff --git a/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-bananapi-bpi-r4.dts b/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-bananapi-bpi-r4.dts
new file mode 100644 (file)
index 0000000..4169584
--- /dev/null
@@ -0,0 +1,407 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/*
+ * Copyright (C) 2022 MediaTek Inc.
+ * Author: Sam.Shih <sam.shih@mediatek.com>
+ */
+
+/dts-v1/;
+#include "mt7988a.dtsi"
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/leds/common.h>
+#include <dt-bindings/regulator/richtek,rt5190a-regulator.h>
+
+/ {
+       model = "Bananapi BPI-R4";
+       compatible = "bananapi,bpi-r4",
+                    "mediatek,mt7988";
+
+       aliases {
+               serial0 = &uart0;
+               led-boot = &led_green;
+               led-failsafe = &led_green;
+               led-running = &led_green;
+               led-upgrade = &led_green;
+       };
+
+       chosen {
+               stdout-path = &uart0;
+               bootargs = "console=ttyS0,115200n1 loglevel=8 pci=pcie_bus_perf ubi.block=0,fit root=/dev/fit0";
+               rootdisk-spim-nand = <&ubi_rootfs>;
+       };
+
+       memory {
+               reg = <0x00 0x40000000 0x00 0x10000000>;
+       };
+
+       /* SFP1 cage (WAN) */
+       sfp1: sfp1 {
+               compatible = "sff,sfp";
+               i2c-bus = <&i2c_sfp1>;
+               los-gpios = <&pio 54 GPIO_ACTIVE_HIGH>;
+               mod-def0-gpios = <&pio 82 GPIO_ACTIVE_LOW>;
+               tx-disable-gpios = <&pio 70 GPIO_ACTIVE_HIGH>;
+               tx-fault-gpios = <&pio 69 GPIO_ACTIVE_HIGH>;
+               rate-select0-gpios = <&pio 21 GPIO_ACTIVE_LOW>;
+               maximum-power-milliwatt = <3000>;
+       };
+
+       /* SFP2 cage (LAN) */
+       sfp2: sfp2 {
+               compatible = "sff,sfp";
+               i2c-bus = <&i2c_sfp2>;
+               los-gpios = <&pio 2 GPIO_ACTIVE_HIGH>;
+               mod-def0-gpios = <&pio 83 GPIO_ACTIVE_LOW>;
+               tx-disable-gpios = <&pio 0 GPIO_ACTIVE_HIGH>;
+               tx-fault-gpios = <&pio 1 GPIO_ACTIVE_HIGH>;
+               rate-select0-gpios = <&pio 3 GPIO_ACTIVE_LOW>;
+               maximum-power-milliwatt = <3000>;
+       };
+
+       gpio-keys {
+               compatible = "gpio-keys";
+
+               wps {
+                       label = "WPS";
+                       linux,code = <KEY_RESTART>;
+                       gpios = <&pio 14 GPIO_ACTIVE_LOW>;
+               };
+       };
+
+       gpio-leds {
+               compatible = "gpio-leds";
+
+               led_green: led-green {
+                       function = LED_FUNCTION_STATUS;
+                       color = <LED_COLOR_ID_GREEN>;
+                       gpios = <&pio 79 GPIO_ACTIVE_HIGH>;
+                       default-state = "on";
+               };
+
+               led_blue: led-blue {
+                       function = LED_FUNCTION_WPS;
+                       color = <LED_COLOR_ID_BLUE>;
+                       gpios = <&pio 63 GPIO_ACTIVE_HIGH>;
+                       default-state = "off";
+               };
+       };
+};
+
+&eth {
+       status = "okay";
+};
+
+&gmac0 {
+       status = "okay";
+};
+
+&gmac1 {
+       sfp = <&sfp2>;
+       managed = "in-band-status";
+       phy-mode = "usxgmii";
+       status = "okay";
+};
+
+&gmac2 {
+       sfp = <&sfp1>;
+       managed = "in-band-status";
+       phy-mode = "usxgmii";
+       status = "okay";
+};
+
+&switch {
+       status = "okay";
+};
+
+&gsw_phy0 {
+       pinctrl-names = "gbe-led";
+       pinctrl-0 = <&gbe0_led0_pins>;
+};
+
+&gsw_port0 {
+       label = "wan";
+};
+
+&gsw_phy0_led0 {
+       status = "okay";
+       color = <LED_COLOR_ID_GREEN>;
+};
+
+&gsw_phy1 {
+       pinctrl-names = "gbe-led";
+       pinctrl-0 = <&gbe1_led0_pins>;
+};
+
+&gsw_phy1_led0 {
+       status = "okay";
+       color = <LED_COLOR_ID_GREEN>;
+};
+
+&gsw_phy2 {
+       pinctrl-names = "gbe-led";
+       pinctrl-0 = <&gbe2_led0_pins>;
+};
+
+&gsw_phy2_led0 {
+       status = "okay";
+       color = <LED_COLOR_ID_GREEN>;
+};
+
+&gsw_phy3 {
+       pinctrl-names = "gbe-led";
+       pinctrl-0 = <&gbe3_led0_pins>;
+};
+
+&gsw_phy3_led0 {
+       status = "okay";
+       color = <LED_COLOR_ID_GREEN>;
+};
+
+&cpu0 {
+       proc-supply = <&rt5190_buck3>;
+};
+
+&cpu1 {
+       proc-supply = <&rt5190_buck3>;
+};
+
+&cpu2 {
+       proc-supply = <&rt5190_buck3>;
+};
+
+&cpu3 {
+       proc-supply = <&rt5190_buck3>;
+};
+
+&cci {
+       proc-supply = <&rt5190_buck3>;
+};
+
+&i2c0 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&i2c0_pins>;
+       status = "okay";
+
+       rt5190a_64: rt5190a@64 {
+               compatible = "richtek,rt5190a";
+               reg = <0x64>;
+               vin2-supply = <&rt5190_buck1>;
+               vin3-supply = <&rt5190_buck1>;
+               vin4-supply = <&rt5190_buck1>;
+
+               regulators {
+                       rt5190_buck1: buck1 {
+                               regulator-name = "rt5190a-buck1";
+                               regulator-min-microvolt = <5090000>;
+                               regulator-max-microvolt = <5090000>;
+                               regulator-allowed-modes =
+                               <RT5190A_OPMODE_AUTO RT5190A_OPMODE_FPWM>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+                       buck2 {
+                               regulator-name = "vcore";
+                               regulator-min-microvolt = <600000>;
+                               regulator-max-microvolt = <1400000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+                       rt5190_buck3: buck3 {
+                               regulator-name = "vproc";
+                               regulator-min-microvolt = <600000>;
+                               regulator-max-microvolt = <1400000>;
+                               regulator-boot-on;
+                       };
+                       buck4 {
+                               regulator-name = "rt5190a-buck4";
+                               regulator-min-microvolt = <850000>;
+                               regulator-max-microvolt = <850000>;
+                               regulator-allowed-modes =
+                               <RT5190A_OPMODE_AUTO RT5190A_OPMODE_FPWM>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+                       ldo {
+                               regulator-name = "rt5190a-ldo";
+                               regulator-min-microvolt = <1200000>;
+                               regulator-max-microvolt = <1200000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+               };
+       };
+};
+
+&i2c2 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&i2c2_1_pins>;
+       status = "okay";
+
+       pca9545: i2c-switch@70 {
+               reg = <0x70>;
+               compatible = "nxp,pca9545";
+               reset-gpios = <&pio 5 GPIO_ACTIVE_LOW>;
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               i2c_rtc: i2c@0 { //eeprom,rtc,ngff
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <0>;
+
+                       eeprom@50 {
+                               compatible = "atmel,24c02";
+                               reg = <0x50>;
+                               address-bits = <8>;
+                               page-size = <8>;
+                               size = <256>;
+                       };
+
+                       eeprom@57 {
+                               compatible = "atmel,24c02";
+                               reg = <0x57>;
+                               address-bits = <8>;
+                               page-size = <8>;
+                               size = <256>;
+                       };
+
+                       pcf8563: rtc@51 {
+                               compatible = "nxp,pcf8563";
+                               reg = <0x51>;
+                               status = "disabled";
+                       };
+               };
+
+               i2c_sfp1: i2c@1 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <1>;
+               };
+
+               i2c_sfp2: i2c@2 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <2>;
+               };
+
+               i2c_wifi: i2c@3 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <3>;
+               };
+       };
+};
+
+/* mPCIe SIM2 */
+&pcie0 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pcie0_pins>;
+       status = "okay";
+};
+
+/* mPCIe SIM3 */
+&pcie1 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pcie1_pins>;
+       status = "okay";
+};
+
+/* M.2 key-B SIM1 */
+&pcie2 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pcie2_pins>;
+       status = "okay";
+};
+
+/* M.2 key-M SSD */
+&pcie3 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pcie3_pins>;
+       status = "okay";
+};
+
+&ssusb1 {
+       status = "okay";
+};
+
+&tphy {
+       status = "okay";
+};
+
+&spi0 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&spi0_flash_pins>;
+       status = "okay";
+
+       spi_nand: spi_nand@0 {
+               compatible = "spi-nand";
+               reg = <0>;
+               spi-max-frequency = <52000000>;
+               spi-tx-buswidth = <4>;
+               spi-rx-buswidth = <4>;
+       };
+};
+
+&spi_nand {
+       partitions {
+               compatible = "fixed-partitions";
+               #address-cells = <1>;
+               #size-cells = <1>;
+
+               partition@0 {
+                       label = "bl2";
+                       reg = <0x0 0x200000>;
+                       read-only;
+               };
+
+               partition@200000 {
+                       label = "ubi";
+                       reg = <0x200000 0x7e00000>;
+                       compatible = "linux,ubi";
+
+                       volumes {
+                               ubi-volume-ubootenv {
+                                       volname = "ubootenv";
+                                       nvmem-layout {
+                                               compatible = "u-boot,env-redundant-bool-layout";
+                                       };
+                               };
+
+                               ubi-volume-ubootenv2 {
+                                       volname = "ubootenv2";
+                                       nvmem-layout {
+                                               compatible = "u-boot,env-redundant-bool-layout";
+                                       };
+                               };
+
+                               ubi_rootfs: ubi-volume-fit {
+                                       volname = "fit";
+                               };
+                       };
+               };
+       };
+};
+
+&uart0 {
+       status = "okay";
+};
+
+&uart1 {
+       status = "okay";
+       pinctrl-names = "default";
+       pinctrl-0 = <&uart1_2_lite_pins>;
+};
+
+&uart2 {
+       status = "okay";
+       pinctrl-names = "default";
+       pinctrl-0 = <&uart2_3_pins>;
+};
+
+&watchdog {
+       status = "okay";
+};
+
+&xphy {
+       status = "okay";
+};
diff --git a/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-rfb-emmc.dtso b/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-rfb-emmc.dtso
new file mode 100644 (file)
index 0000000..3f8ac2a
--- /dev/null
@@ -0,0 +1,33 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/*
+ * Copyright (C) 2021 MediaTek Inc.
+ * Author: Frank Wunderlich <frank-w@public-files.de>
+ */
+
+/dts-v1/;
+/plugin/;
+
+/ {
+       compatible = "mediatek,mt7988a-rfb", "mediatek,mt7988a";
+
+       fragment@0 {
+               target = <&mmc0>;
+               __overlay__ {
+                       pinctrl-names = "default", "state_uhs";
+                       pinctrl-0 = <&mmc0_pins_emmc_51>;
+                       pinctrl-1 = <&mmc0_pins_emmc_51>;
+                       bus-width = <8>;
+                       max-frequency = <200000000>;
+                       cap-mmc-highspeed;
+                       mmc-hs200-1_8v;
+                       mmc-hs400-1_8v;
+                       hs400-ds-delay = <0x12814>;
+                       vqmmc-supply = <&reg_1p8v>;
+                       vmmc-supply = <&reg_3p3v>;
+                       non-removable;
+                       no-sd;
+                       no-sdio;
+                       status = "okay";
+               };
+       };
+};
diff --git a/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-rfb-eth1-aqr.dtso b/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-rfb-eth1-aqr.dtso
new file mode 100644 (file)
index 0000000..d21a61a
--- /dev/null
@@ -0,0 +1,41 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/*
+ * Copyright (C) 2022 MediaTek Inc.
+ * Author: Sam.Shih <sam.shih@mediatek.com>
+ */
+
+/dts-v1/;
+/plugin/;
+
+#include <dt-bindings/gpio/gpio.h>
+
+/ {
+       compatible = "mediatek,mt7988a-rfb", "mediatek,mt7988a";
+
+       fragment@0 {
+               target = <&mdio_bus>;
+               __overlay__ {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       /* external Aquantia AQR113C */
+                       phy0: ethernet-phy@0 {
+                               reg = <0>;
+                               compatible = "ethernet-phy-ieee802.3-c45";
+                               reset-gpios = <&pio 72 GPIO_ACTIVE_LOW>;
+                               reset-assert-us = <100000>;
+                               reset-deassert-us = <221000>;
+                       };
+               };
+       };
+
+       fragment@1 {
+               target = <&gmac1>;
+               __overlay__ {
+                       phy-mode = "usxgmii";
+                       phy-connection-type = "usxgmii";
+                       phy = <&phy0>;
+                       status = "okay";
+               };
+       };
+};
diff --git a/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-rfb-eth1-i2p5g-phy.dtso b/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-rfb-eth1-i2p5g-phy.dtso
new file mode 100644 (file)
index 0000000..86ab756
--- /dev/null
@@ -0,0 +1,30 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/*
+ * Copyright (C) 2022 MediaTek Inc.
+ * Author: Sam.Shih <sam.shih@mediatek.com>
+ */
+
+/dts-v1/;
+/plugin/;
+
+/ {
+       compatible = "mediatek,mt7988a-rfb", "mediatek,mt7988a";
+
+       fragment@0 {
+               target = <&gmac1>;
+               __overlay__ {
+                       phy-mode = "internal";
+                       phy-connection-type = "internal";
+                       phy = <&int_2p5g_phy>;
+                       status = "okay";
+               };
+       };
+
+       fragment@1 {
+               target = <&int_2p5g_phy>;
+               __overlay__ {
+                       pinctrl-names = "i2p5gbe-led";
+                       pinctrl-0 = <&i2p5gbe_led0_pins>;
+               };
+       };
+};
diff --git a/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-rfb-eth1-mxl.dtso b/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-rfb-eth1-mxl.dtso
new file mode 100644 (file)
index 0000000..34a23bb
--- /dev/null
@@ -0,0 +1,39 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/*
+ * Copyright (C) 2022 MediaTek Inc.
+ * Author: Sam.Shih <sam.shih@mediatek.com>
+ */
+
+/dts-v1/;
+/plugin/;
+
+#include <dt-bindings/gpio/gpio.h>
+
+/ {
+       compatible = "mediatek,mt7988a-rfb", "mediatek,mt7988a";
+
+       fragment@0 {
+               target = <&mdio_bus>;
+               __overlay__ {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       /* external Maxlinear GPY211C */
+                       phy13: ethernet-phy@13 {
+                               reg = <13>;
+                               compatible = "ethernet-phy-ieee802.3-c45";
+                               phy-mode = "2500base-x";
+                       };
+               };
+       };
+
+       fragment@1 {
+               target = <&gmac1>;
+               __overlay__ {
+                       phy-mode = "2500base-x";
+                       phy-connection-type = "2500base-x";
+                       phy = <&phy13>;
+                       status = "okay";
+               };
+       };
+};
diff --git a/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-rfb-eth1-sfp.dtso b/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-rfb-eth1-sfp.dtso
new file mode 100644 (file)
index 0000000..ba40a11
--- /dev/null
@@ -0,0 +1,47 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/*
+ * Copyright (C) 2022 MediaTek Inc.
+ * Author: Sam.Shih <sam.shih@mediatek.com>
+ */
+
+/dts-v1/;
+/plugin/;
+
+#include <dt-bindings/gpio/gpio.h>
+
+/ {
+       compatible = "mediatek,mt7988a-rfb", "mediatek,mt7988a";
+
+       fragment@0 {
+               target = <&i2c2>;
+               __overlay__ {
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&i2c2_0_pins>;
+                       status = "okay";
+               };
+       };
+
+       fragment@1 {
+               target-path = "/";
+               __overlay__ {
+                       sfp_esp1: sfp@1 {
+                               compatible = "sff,sfp";
+                               i2c-bus = <&i2c2>;
+                               mod-def0-gpios = <&pio 82 GPIO_ACTIVE_LOW>;
+                               los-gpios = <&pio 81 GPIO_ACTIVE_HIGH>;
+                               tx-disable-gpios = <&pio 36 GPIO_ACTIVE_HIGH>;
+                               maximum-power-milliwatt = <3000>;
+                       };
+               };
+       };
+
+       fragment@2 {
+               target = <&gmac1>;
+               __overlay__ {
+                       phy-mode = "10gbase-r";
+                       managed = "in-band-status";
+                       sfp = <&sfp_esp1>;
+                       status = "okay";
+               };
+       };
+};
diff --git a/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-rfb-eth2-aqr.dtso b/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-rfb-eth2-aqr.dtso
new file mode 100644 (file)
index 0000000..140391f
--- /dev/null
@@ -0,0 +1,41 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/*
+ * Copyright (C) 2022 MediaTek Inc.
+ * Author: Sam.Shih <sam.shih@mediatek.com>
+ */
+
+/dts-v1/;
+/plugin/;
+
+#include <dt-bindings/gpio/gpio.h>
+
+/ {
+       compatible = "mediatek,mt7988a-rfb", "mediatek,mt7988a";
+
+       fragment@0 {
+               target = <&mdio_bus>;
+               __overlay__ {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       /* external Aquantia AQR113C */
+                       phy8: ethernet-phy@8 {
+                               reg = <8>;
+                               compatible = "ethernet-phy-ieee802.3-c45";
+                               reset-gpios = <&pio 71 GPIO_ACTIVE_LOW>;
+                               reset-assert-us = <100000>;
+                               reset-deassert-us = <221000>;
+                       };
+               };
+       };
+
+       fragment@1 {
+               target = <&gmac2>;
+               __overlay__ {
+                       phy-mode = "usxgmii";
+                       phy-connection-type = "usxgmii";
+                       phy = <&phy8>;
+                       status = "okay";
+               };
+       };
+};
diff --git a/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-rfb-eth2-mxl.dtso b/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-rfb-eth2-mxl.dtso
new file mode 100644 (file)
index 0000000..19e0b27
--- /dev/null
@@ -0,0 +1,39 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/*
+ * Copyright (C) 2022 MediaTek Inc.
+ * Author: Sam.Shih <sam.shih@mediatek.com>
+ */
+
+/dts-v1/;
+/plugin/;
+
+#include <dt-bindings/gpio/gpio.h>
+
+/ {
+       compatible = "mediatek,mt7988a-rfb", "mediatek,mt7988a";
+
+       fragment@0 {
+               target = <&mdio_bus>;
+               __overlay__ {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       /* external Maxlinear GPY211C */
+                       phy5: ethernet-phy@5 {
+                               reg = <5>;
+                               compatible = "ethernet-phy-ieee802.3-c45";
+                               phy-mode = "2500base-x";
+                       };
+               };
+       };
+
+       fragment@1 {
+               target = <&gmac2>;
+               __overlay__ {
+                       phy-mode = "2500base-x";
+                       phy-connection-type = "2500base-x";
+                       phy = <&phy5>;
+                       status = "okay";
+               };
+       };
+};
diff --git a/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-rfb-eth2-sfp.dtso b/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-rfb-eth2-sfp.dtso
new file mode 100644 (file)
index 0000000..b9aabd2
--- /dev/null
@@ -0,0 +1,47 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/*
+ * Copyright (C) 2022 MediaTek Inc.
+ * Author: Sam.Shih <sam.shih@mediatek.com>
+ */
+
+/dts-v1/;
+/plugin/;
+
+#include <dt-bindings/gpio/gpio.h>
+
+/ {
+       compatible = "mediatek,mt7988a-rfb", "mediatek,mt7988a";
+
+       fragment@0 {
+               target = <&i2c1>;
+               __overlay__ {
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&i2c1_sfp_pins>;
+                       status = "okay";
+               };
+       };
+
+       fragment@1 {
+               target-path = "/";
+               __overlay__ {
+                       sfp_esp0: sfp@0 {
+                               compatible = "sff,sfp";
+                               i2c-bus = <&i2c1>;
+                               mod-def0-gpios = <&pio 35 GPIO_ACTIVE_LOW>;
+                               los-gpios = <&pio 33 GPIO_ACTIVE_HIGH>;
+                               tx-disable-gpios = <&pio 29 GPIO_ACTIVE_HIGH>;
+                               maximum-power-milliwatt = <3000>;
+                       };
+               };
+       };
+
+       fragment@2 {
+               target = <&gmac2>;
+               __overlay__ {
+                       phy-mode = "10gbase-r";
+                       managed = "in-band-status";
+                       sfp = <&sfp_esp0>;
+                       status = "okay";
+               };
+       };
+};
diff --git a/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-rfb-sd.dtso b/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-rfb-sd.dtso
new file mode 100644 (file)
index 0000000..04472cc
--- /dev/null
@@ -0,0 +1,31 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/*
+ * Copyright (C) 2023 MediaTek Inc.
+ * Author: Frank Wunderlich <frank-w@public-files.de>
+ */
+
+/dts-v1/;
+/plugin/;
+
+#include <dt-bindings/gpio/gpio.h>
+
+/ {
+       compatible = "mediatek,mt7988a-rfb", "mediatek,mt7988a";
+
+       fragment@1 {
+               target-path = <&mmc0>;
+               __overlay__ {
+                       pinctrl-names = "default", "state_uhs";
+                       pinctrl-0 = <&mmc0_pins_sdcard>;
+                       pinctrl-1 = <&mmc0_pins_sdcard>;
+                       cd-gpios = <&pio 69 GPIO_ACTIVE_LOW>;
+                       bus-width = <4>;
+                       max-frequency = <52000000>;
+                       cap-sd-highspeed;
+                       vmmc-supply = <&reg_3p3v>;
+                       vqmmc-supply = <&reg_3p3v>;
+                       no-mmc;
+                       status = "okay";
+               };
+       };
+};
diff --git a/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-rfb-snfi-nand.dtso b/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-rfb-snfi-nand.dtso
new file mode 100644 (file)
index 0000000..86b0042
--- /dev/null
@@ -0,0 +1,69 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/*
+ * Copyright (C) 2022 MediaTek Inc.
+ * Author: Sam.Shih <sam.shih@mediatek.com>
+ */
+
+/dts-v1/;
+/plugin/;
+
+/ {
+       compatible = "mediatek,mt7988a-rfb", "mediatek,mt7988a";
+
+       fragment@0 {
+               target = <&snand>;
+               __overlay__ {
+                       status = "okay";
+
+                       flash@0 {
+                               compatible = "spi-nand";
+                               reg = <0>;
+                               spi-max-frequency = <52000000>;
+                               spi-tx-bus-width = <4>;
+                               spi-rx-bus-width = <4>;
+                               mediatek,nmbm;
+                               mediatek,bmt-max-ratio = <1>;
+                               mediatek,bmt-max-reserved-blocks = <64>;
+
+                               partitions {
+                                       compatible = "fixed-partitions";
+                                       #address-cells = <1>;
+                                       #size-cells = <1>;
+
+                                       partition@0 {
+                                               label = "BL2";
+                                               reg = <0x00000 0x0100000>;
+                                               read-only;
+                                       };
+
+                                       partition@100000 {
+                                               label = "u-boot-env";
+                                               reg = <0x0100000 0x0080000>;
+                                       };
+
+                                       partition@180000 {
+                                               label = "Factory";
+                                               reg = <0x180000 0x0400000>;
+                                       };
+
+                                       partition@580000 {
+                                               label = "FIP";
+                                               reg = <0x580000 0x0200000>;
+                                       };
+
+                                       partition@780000 {
+                                               label = "ubi";
+                                               reg = <0x780000 0x7080000>;
+                                       };
+                               };
+                       };
+               };
+       };
+
+       fragment@1 {
+               target = <&bch>;
+               __overlay__ {
+                       status = "okay";
+               };
+       };
+};
diff --git a/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-rfb-spim-nand.dtso b/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-rfb-spim-nand.dtso
new file mode 100644 (file)
index 0000000..a9eca00
--- /dev/null
@@ -0,0 +1,64 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/*
+ * Copyright (C) 2022 MediaTek Inc.
+ * Author: Sam.Shih <sam.shih@mediatek.com>
+ */
+
+/dts-v1/;
+/plugin/;
+
+/ {
+       compatible = "mediatek,mt7988a-rfb", "mediatek,mt7988a";
+
+       fragment@0 {
+               target = <&spi0>;
+               __overlay__ {
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&spi0_flash_pins>;
+                       status = "okay";
+
+                       flash@0 {
+                               compatible = "spi-nand";
+                               reg = <0>;
+                               spi-max-frequency = <52000000>;
+                               spi-tx-bus-width = <4>;
+                               spi-rx-bus-width = <4>;
+                               mediatek,nmbm;
+                               mediatek,bmt-max-ratio = <1>;
+                               mediatek,bmt-max-reserved-blocks = <64>;
+
+                               partitions {
+                                       compatible = "fixed-partitions";
+                                       #address-cells = <1>;
+                                       #size-cells = <1>;
+
+                                       partition@0 {
+                                               label = "BL2";
+                                               reg = <0x00000 0x0100000>;
+                                               read-only;
+                                       };
+
+                                       partition@100000 {
+                                               label = "u-boot-env";
+                                               reg = <0x0100000 0x0080000>;
+                                       };
+
+                                       partition@180000 {
+                                               label = "Factory";
+                                               reg = <0x180000 0x0400000>;
+                                       };
+
+                                       partition@580000 {
+                                               label = "FIP";
+                                               reg = <0x580000 0x0200000>;
+                                       };
+
+                                       partition@780000 {
+                                               label = "ubi";
+                                               reg = <0x780000 0x7080000>;
+                                       };
+                               };
+                       };
+               };
+       };
+};
diff --git a/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-rfb-spim-nor.dtso b/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-rfb-spim-nor.dtso
new file mode 100644 (file)
index 0000000..33bd57b
--- /dev/null
@@ -0,0 +1,59 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/*
+ * Copyright (C) 2022 MediaTek Inc.
+ * Author: Sam.Shih <sam.shih@mediatek.com>
+ */
+
+/dts-v1/;
+/plugin/;
+
+/ {
+       compatible = "mediatek,mt7988a-rfb", "mediatek,mt7988a";
+
+       fragment@0 {
+               target = <&spi2>;
+               __overlay__ {
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&spi2_flash_pins>;
+                       status = "okay";
+
+                       flash@0 {
+                               #address-cells = <1>;
+                               #size-cells = <1>;
+                               compatible = "jedec,spi-nor";
+                               spi-cal-enable;
+                               spi-cal-mode = "read-data";
+                               spi-cal-datalen = <7>;
+                               spi-cal-data = /bits/ 8 <
+                                       0x53 0x46 0x5F 0x42 0x4F 0x4F 0x54>; /* SF_BOOT */
+                               spi-cal-addrlen = <1>;
+                               spi-cal-addr = /bits/ 32 <0x0>;
+                               reg = <0>;
+                               spi-max-frequency = <52000000>;
+                               spi-tx-bus-width = <4>;
+                               spi-rx-bus-width = <4>;
+
+                               partition@00000 {
+                                       label = "BL2";
+                                       reg = <0x00000 0x0040000>;
+                               };
+                               partition@40000 {
+                                       label = "u-boot-env";
+                                       reg = <0x40000 0x0010000>;
+                               };
+                               partition@50000 {
+                                       label = "Factory";
+                                       reg = <0x50000 0x0200000>;
+                               };
+                               partition@250000 {
+                                       label = "FIP";
+                                       reg = <0x250000 0x0080000>;
+                               };
+                               partition@2D0000 {
+                                       label = "firmware";
+                                       reg = <0x2D0000 0x1D30000>;
+                               };
+                       };
+               };
+       };
+};
diff --git a/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-rfb.dts b/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a-rfb.dts
new file mode 100644 (file)
index 0000000..11dbf98
--- /dev/null
@@ -0,0 +1,200 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/*
+ * Copyright (C) 2022 MediaTek Inc.
+ * Author: Sam.Shih <sam.shih@mediatek.com>
+ */
+
+/dts-v1/;
+#include "mt7988a.dtsi"
+#include <dt-bindings/pinctrl/mt65xx.h>
+#include <dt-bindings/leds/common.h>
+#include <dt-bindings/regulator/richtek,rt5190a-regulator.h>
+
+/ {
+       model = "MediaTek MT7988A Reference Board";
+       compatible = "mediatek,mt7988a-rfb",
+                    "mediatek,mt7988";
+
+       chosen {
+               bootargs = "console=ttyS0,115200n1 loglevel=8  \
+                           earlycon=uart8250,mmio32,0x11000000 \
+                           pci=pcie_bus_perf";
+       };
+
+       memory {
+               reg = <0 0x40000000 0 0x40000000>;
+       };
+};
+
+&eth {
+       pinctrl-0 = <&mdio0_pins>;
+       pinctrl-names = "default";
+};
+
+&gmac0 {
+       status = "okay";
+};
+
+&cpu0 {
+       proc-supply = <&rt5190_buck3>;
+};
+
+&cpu1 {
+       proc-supply = <&rt5190_buck3>;
+};
+
+&cpu2 {
+       proc-supply = <&rt5190_buck3>;
+};
+
+&cpu3 {
+       proc-supply = <&rt5190_buck3>;
+};
+
+&cci {
+       proc-supply = <&rt5190_buck3>;
+};
+
+&eth {
+       status = "okay";
+};
+
+&switch {
+       status = "okay";
+};
+
+&gsw_phy0 {
+       pinctrl-names = "gbe-led";
+       pinctrl-0 = <&gbe0_led0_pins>;
+};
+
+&gsw_phy0_led0 {
+       status = "okay";
+       color = <LED_COLOR_ID_GREEN>;
+};
+
+&gsw_phy1 {
+       pinctrl-names = "gbe-led";
+       pinctrl-0 = <&gbe1_led0_pins>;
+};
+
+&gsw_phy1_led0 {
+       status = "okay";
+       color = <LED_COLOR_ID_GREEN>;
+};
+
+&gsw_phy2 {
+       pinctrl-names = "gbe-led";
+       pinctrl-0 = <&gbe2_led0_pins>;
+};
+
+&gsw_phy2_led0 {
+       status = "okay";
+       color = <LED_COLOR_ID_GREEN>;
+};
+
+&gsw_phy3 {
+       pinctrl-names = "gbe-led";
+       pinctrl-0 = <&gbe3_led0_pins>;
+};
+
+&gsw_phy3_led0 {
+       status = "okay";
+       color = <LED_COLOR_ID_GREEN>;
+};
+
+&i2c0 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&i2c0_pins>;
+       status = "okay";
+
+       rt5190a_64: rt5190a@64 {
+               compatible = "richtek,rt5190a";
+               reg = <0x64>;
+               /*interrupts-extended = <&gpio26 0 IRQ_TYPE_LEVEL_LOW>;*/
+               vin2-supply = <&rt5190_buck1>;
+               vin3-supply = <&rt5190_buck1>;
+               vin4-supply = <&rt5190_buck1>;
+
+               regulators {
+                       rt5190_buck1: buck1 {
+                               regulator-name = "rt5190a-buck1";
+                               regulator-min-microvolt = <5090000>;
+                               regulator-max-microvolt = <5090000>;
+                               regulator-allowed-modes =
+                               <RT5190A_OPMODE_AUTO RT5190A_OPMODE_FPWM>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+                       buck2 {
+                               regulator-name = "vcore";
+                               regulator-min-microvolt = <600000>;
+                               regulator-max-microvolt = <1400000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+                       rt5190_buck3: buck3 {
+                               regulator-name = "vproc";
+                               regulator-min-microvolt = <600000>;
+                               regulator-max-microvolt = <1400000>;
+                               regulator-boot-on;
+                       };
+                       buck4 {
+                               regulator-name = "rt5190a-buck4";
+                               regulator-min-microvolt = <850000>;
+                               regulator-max-microvolt = <850000>;
+                               regulator-allowed-modes =
+                               <RT5190A_OPMODE_AUTO RT5190A_OPMODE_FPWM>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+                       ldo {
+                               regulator-name = "rt5190a-ldo";
+                               regulator-min-microvolt = <1200000>;
+                               regulator-max-microvolt = <1200000>;
+                               regulator-boot-on;
+                               regulator-always-on;
+                       };
+               };
+       };
+};
+
+&pcie0 {
+       status = "okay";
+};
+
+&pcie1 {
+       status = "okay";
+};
+
+&pcie2 {
+       status = "disabled";
+};
+
+&pcie3 {
+       status = "okay";
+};
+
+&ssusb0 {
+       status = "okay";
+};
+
+&ssusb1 {
+       status = "okay";
+};
+
+&tphy {
+       status = "okay";
+};
+
+&uart0 {
+       status = "okay";
+};
+
+&watchdog {
+       status = "okay";
+};
+
+&xphy {
+       status = "okay";
+};
diff --git a/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a.dtsi b/target/linux/mediatek/files-6.6/arch/arm64/boot/dts/mediatek/mt7988a.dtsi
new file mode 100644 (file)
index 0000000..9043393
--- /dev/null
@@ -0,0 +1,1569 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/*
+ * Copyright (C) 2023 MediaTek Inc.
+ * Author: Sam.Shih <sam.shih@mediatek.com>
+ */
+
+#include <dt-bindings/clock/mediatek,mt7988-clk.h>
+#include <dt-bindings/interrupt-controller/arm-gic.h>
+#include <dt-bindings/interrupt-controller/irq.h>
+#include <dt-bindings/leds/common.h>
+#include <dt-bindings/phy/phy.h>
+#include <dt-bindings/pinctrl/mt65xx.h>
+#include <dt-bindings/reset/mediatek,mt7988-resets.h>
+#include <dt-bindings/thermal/thermal.h>
+
+/* TOPRGU resets */
+#define MT7988_TOPRGU_SGMII0_GRST              1
+#define MT7988_TOPRGU_SGMII1_GRST              2
+#define MT7988_TOPRGU_XFI0_GRST                        12
+#define MT7988_TOPRGU_XFI1_GRST                        13
+#define MT7988_TOPRGU_XFI_PEXTP0_GRST          14
+#define MT7988_TOPRGU_XFI_PEXTP1_GRST          15
+#define MT7988_TOPRGU_XFI_PLL_GRST             16
+
+/ {
+       compatible = "mediatek,mt7988";
+       interrupt-parent = <&gic>;
+       #address-cells = <2>;
+       #size-cells = <2>;
+
+       cci: cci {
+               compatible = "mediatek,mt7988-cci",
+                            "mediatek,mt8183-cci";
+               clocks = <&mcusys CLK_MCU_BUS_DIV_SEL>,
+                        <&topckgen CLK_TOP_XTAL>;
+               clock-names = "cci", "intermediate";
+               operating-points-v2 = <&cci_opp>;
+       };
+
+       cpus {
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               cpu0: cpu@0 {
+                       compatible = "arm,cortex-a73";
+                       reg = <0x0>;
+                       device_type = "cpu";
+                       enable-method = "psci";
+                       clocks = <&mcusys CLK_MCU_ARM_DIV_SEL>,
+                                <&topckgen CLK_TOP_XTAL>;
+                       clock-names = "cpu", "intermediate";
+                       operating-points-v2 = <&cluster0_opp>;
+                       mediatek,cci = <&cci>;
+               };
+
+               cpu1: cpu@1 {
+                       compatible = "arm,cortex-a73";
+                       reg = <0x1>;
+                       device_type = "cpu";
+                       enable-method = "psci";
+                       clocks = <&mcusys CLK_MCU_ARM_DIV_SEL>,
+                                <&topckgen CLK_TOP_XTAL>;
+                       clock-names = "cpu", "intermediate";
+                       operating-points-v2 = <&cluster0_opp>;
+                       mediatek,cci = <&cci>;
+               };
+
+               cpu2: cpu@2 {
+                       compatible = "arm,cortex-a73";
+                       reg = <0x2>;
+                       device_type = "cpu";
+                       enable-method = "psci";
+                       clocks = <&mcusys CLK_MCU_ARM_DIV_SEL>,
+                                <&topckgen CLK_TOP_XTAL>;
+                       clock-names = "cpu", "intermediate";
+                       operating-points-v2 = <&cluster0_opp>;
+                       mediatek,cci = <&cci>;
+               };
+
+               cpu3: cpu@3 {
+                       compatible = "arm,cortex-a73";
+                       reg = <0x3>;
+                       device_type = "cpu";
+                       enable-method = "psci";
+                       clocks = <&mcusys CLK_MCU_ARM_DIV_SEL>,
+                                <&topckgen CLK_TOP_XTAL>;
+                       clock-names = "cpu", "intermediate";
+                       operating-points-v2 = <&cluster0_opp>;
+                       mediatek,cci = <&cci>;
+               };
+
+               cluster0_opp: opp_table0 {
+                       compatible = "operating-points-v2";
+                       opp-shared;
+
+                       opp00 {
+                               opp-hz = /bits/ 64 <800000000>;
+                               opp-microvolt = <850000>;
+                       };
+
+                       opp01 {
+                               opp-hz = /bits/ 64 <1100000000>;
+                               opp-microvolt = <850000>;
+                       };
+
+                       opp02 {
+                               opp-hz = /bits/ 64 <1500000000>;
+                               opp-microvolt = <850000>;
+                       };
+
+                       opp03 {
+                               opp-hz = /bits/ 64 <1800000000>;
+                               opp-microvolt = <900000>;
+                       };
+               };
+       };
+
+       cci_opp: opp_table_cci {
+               compatible = "operating-points-v2";
+               opp-shared;
+
+               opp00 {
+                       opp-hz = /bits/ 64 <480000000>;
+                       opp-microvolt = <850000>;
+               };
+
+               opp01 {
+                       opp-hz = /bits/ 64 <660000000>;
+                       opp-microvolt = <850000>;
+               };
+
+               opp02 {
+                       opp-hz = /bits/ 64 <900000000>;
+                       opp-microvolt = <850000>;
+               };
+
+               opp03 {
+                       opp-hz = /bits/ 64 <1080000000>;
+                       opp-microvolt = <900000>;
+               };
+       };
+
+       clk40m: oscillator@0 {
+               compatible = "fixed-clock";
+               clock-frequency = <40000000>;
+               #clock-cells = <0>;
+               clock-output-names = "clkxtal";
+       };
+
+       fan: pwm-fan {
+               compatible = "pwm-fan";
+               /* cooling level (0, 1, 2) : (0% duty, 50% duty, 100% duty) */
+               cooling-levels = <0 128 255>;
+               #cooling-cells = <2>;
+               #thermal-sensor-cells = <1>;
+               status = "disabled";
+       };
+
+       pmu {
+               compatible = "arm,cortex-a73-pmu";
+               interrupt-parent = <&gic>;
+               interrupt = <GIC_PPI 7 IRQ_TYPE_LEVEL_LOW>;
+       };
+
+       psci {
+               compatible = "arm,psci-0.2";
+               method = "smc";
+       };
+
+       reg_1p8v: regulator-1p8v {
+               compatible = "regulator-fixed";
+               regulator-name = "fixed-1.8V";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+               regulator-boot-on;
+               regulator-always-on;
+       };
+
+       reg_3p3v: regulator-3p3v {
+               compatible = "regulator-fixed";
+               regulator-name = "fixed-3.3V";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-boot-on;
+               regulator-always-on;
+       };
+
+       reserved-memory {
+               ranges;
+               #address-cells = <2>;
+               #size-cells = <2>;
+
+               /* 320 KiB reserved for ARM Trusted Firmware (BL31 and BL32) */
+               secmon_reserved: secmon@43000000 {
+                       reg = <0 0x43000000 0 0x50000>;
+                       no-map;
+               };
+       };
+
+       soc {
+               compatible = "simple-bus";
+               ranges;
+               #address-cells = <2>;
+               #size-cells = <2>;
+
+               gic: interrupt-controller@c000000 {
+                       compatible = "arm,gic-v3";
+                       reg = <0 0x0c000000 0 0x40000>,  /* GICD */
+                             <0 0x0c080000 0 0x200000>, /* GICR */
+                             <0 0x0c400000 0 0x2000>,   /* GICC */
+                             <0 0x0c410000 0 0x1000>,   /* GICH */
+                             <0 0x0c420000 0 0x2000>;   /* GICV */
+                       interrupt-parent = <&gic>;
+                       interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-controller;
+                       #interrupt-cells = <3>;
+               };
+
+               phyfw: phy-firmware@f000000 {
+                       compatible = "mediatek,2p5gphy-fw";
+                       reg = <0 0x0f100000 0 0x20000>,
+                             <0 0x0f0f0018 0 0x20>;
+               };
+
+               infracfg: infracfg@10001000 {
+                       compatible = "mediatek,mt7988-infracfg", "syscon";
+                       reg = <0 0x10001000 0 0x1000>;
+                       #clock-cells = <1>;
+                       #reset-cells = <1>;
+               };
+
+               topckgen: topckgen@1001b000 {
+                       compatible = "mediatek,mt7988-topckgen", "syscon";
+                       reg = <0 0x1001b000 0 0x1000>;
+                       #clock-cells = <1>;
+               };
+
+               watchdog: watchdog@1001c000 {
+                       compatible = "mediatek,mt7988-wdt",
+                                    "mediatek,mt6589-wdt",
+                                    "syscon";
+                       reg = <0 0x1001c000 0 0x1000>;
+                       interrupts = <GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH>;
+                       #reset-cells = <1>;
+               };
+
+               apmixedsys: apmixedsys@1001e000 {
+                       compatible = "mediatek,mt7988-apmixedsys";
+                       reg = <0 0x1001e000 0 0x1000>;
+                       #clock-cells = <1>;
+               };
+
+               pio: pinctrl@1001f000 {
+                       compatible = "mediatek,mt7988-pinctrl", "syscon";
+                       reg = <0 0x1001f000 0 0x1000>,
+                             <0 0x11c10000 0 0x1000>,
+                             <0 0x11d00000 0 0x1000>,
+                             <0 0x11d20000 0 0x1000>,
+                             <0 0x11e00000 0 0x1000>,
+                             <0 0x11f00000 0 0x1000>,
+                             <0 0x1000b000 0 0x1000>;
+                       reg-names = "gpio_base", "iocfg_tr_base",
+                                   "iocfg_br_base", "iocfg_rb_base",
+                                   "iocfg_lb_base", "iocfg_tl_base", "eint";
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       gpio-ranges = <&pio 0 0 84>;
+                       interrupt-controller;
+                       interrupts = <GIC_SPI 225 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-parent = <&gic>;
+                       #interrupt-cells = <2>;
+
+                       mdio0_pins: mdio0-pins {
+                               mux {
+                                       function = "eth";
+                                       groups = "mdc_mdio0";
+                               };
+
+                               conf {
+                                       groups = "mdc_mdio0";
+                                       drive-strength = <MTK_DRIVE_8mA>;
+                               };
+                       };
+
+                       i2c0_pins: i2c0-pins-g0 {
+                               mux {
+                                       function = "i2c";
+                                       groups = "i2c0_1";
+                               };
+                       };
+
+                       i2c1_pins: i2c1-pins-g0 {
+                               mux {
+                                       function = "i2c";
+                                       groups = "i2c1_0";
+                               };
+                       };
+
+                       i2c1_sfp_pins: i2c1-sfp-pins-g0 {
+                               mux {
+                                       function = "i2c";
+                                       groups = "i2c1_sfp";
+                               };
+                       };
+
+                       i2c2_pins: i2c2-pins {
+                               mux {
+                                       function = "i2c";
+                                       groups = "i2c2";
+                               };
+                       };
+
+                       i2c2_0_pins: i2c2-pins-g0 {
+                               mux {
+                                       function = "i2c";
+                                       groups = "i2c2_0";
+                               };
+                       };
+
+                       i2c2_1_pins: i2c2-pins-g1 {
+                               mux {
+                                       function = "i2c";
+                                       groups = "i2c2_1";
+                               };
+                       };
+
+                       gbe0_led0_pins: gbe0-led0-pins {
+                               mux {
+                                       function = "led";
+                                       groups = "gbe0_led0";
+                               };
+                       };
+
+                       gbe1_led0_pins: gbe1-led0-pins {
+                               mux {
+                                       function = "led";
+                                       groups = "gbe1_led0";
+                               };
+                       };
+
+                       gbe2_led0_pins: gbe2-led0-pins {
+                               mux {
+                                       function = "led";
+                                       groups = "gbe2_led0";
+                               };
+                       };
+
+                       gbe3_led0_pins: gbe3-led0-pins {
+                               mux {
+                                       function = "led";
+                                       groups = "gbe3_led0";
+                               };
+                       };
+
+                       gbe0_led1_pins: gbe0-led1-pins {
+                               mux {
+                                       function = "led";
+                                       groups = "gbe0_led1";
+                               };
+                       };
+
+                       gbe1_led1_pins: gbe1-led1-pins {
+                               mux {
+                                       function = "led";
+                                       groups = "gbe1_led1";
+                               };
+                       };
+
+                       gbe2_led1_pins: gbe2-led1-pins {
+                               mux {
+                                       function = "led";
+                                       groups = "gbe2_led1";
+                               };
+                       };
+
+                       gbe3_led1_pins: gbe3-led1-pins {
+                               mux {
+                                       function = "led";
+                                       groups = "gbe3_led1";
+                               };
+                       };
+
+                       i2p5gbe_led0_pins: 2p5gbe-led0-pins {
+                               mux {
+                                       function = "led";
+                                       groups = "2p5gbe_led0";
+                               };
+                       };
+
+                       i2p5gbe_led1_pins: 2p5gbe-led1-pins {
+                               mux {
+                                       function = "led";
+                                       groups = "2p5gbe_led1";
+                               };
+                       };
+
+                       mmc0_pins_emmc_45: mmc0-pins-emmc-45 {
+                               mux {
+                                       function = "flash";
+                                       groups = "emmc_45";
+                               };
+                       };
+
+                       mmc0_pins_emmc_51: mmc0-pins-emmc-51 {
+                               mux {
+                                       function = "flash";
+                                       groups = "emmc_51";
+                               };
+                       };
+
+                       mmc0_pins_sdcard: mmc0-pins-sdcard {
+                               mux {
+                                       function = "flash";
+                                       groups = "sdcard";
+                               };
+                       };
+
+                       uart0_pins: uart0-pins {
+                               mux {
+                                       function = "uart";
+                                       groups =  "uart0";
+                               };
+                       };
+
+                       uart1_0_pins: uart1-0-pins {
+                               mux {
+                                       function = "uart";
+                                       groups =  "uart1_0";
+                               };
+                       };
+
+                       uart1_1_pins: uart1-1-pins {
+                               mux {
+                                       function = "uart";
+                                       groups =  "uart1_1";
+                               };
+                       };
+
+                       uart1_2_pins: uart1-2-pins {
+                               mux {
+                                       function = "uart";
+                                       groups =  "uart1_2";
+                               };
+                       };
+
+                       uart1_2_lite_pins: uart1-2-lite-pins {
+                               mux {
+                                       function = "uart";
+                                       groups =  "uart1_2_lite";
+                               };
+                       };
+
+                       uart2_pins: uart2-pins {
+                               mux {
+                                       function = "uart";
+                                       groups =  "uart2";
+                               };
+                       };
+
+                       uart2_0_pins: uart2-0-pins {
+                               mux {
+                                       function = "uart";
+                                       groups =  "uart2_0";
+                               };
+                       };
+
+                       uart2_1_pins: uart2-1-pins {
+                               mux {
+                                       function = "uart";
+                                       groups =  "uart2_1";
+                               };
+                       };
+
+                       uart2_2_pins: uart2-2-pins {
+                               mux {
+                                       function = "uart";
+                                       groups =  "uart2_2";
+                               };
+                       };
+
+                       uart2_3_pins: uart2-3-pins {
+                               mux {
+                                       function = "uart";
+                                       groups =  "uart2_3";
+                               };
+                       };
+
+                       snfi_pins: snfi-pins {
+                               mux {
+                                       function = "flash";
+                                       groups = "snfi";
+                               };
+                       };
+
+                       spi0_pins: spi0-pins {
+                               mux {
+                                       function = "spi";
+                                       groups = "spi0";
+                               };
+                       };
+
+                       spi0_flash_pins: spi0-flash-pins {
+                               mux {
+                                       function = "spi";
+                                       groups = "spi0", "spi0_wp_hold";
+                               };
+                       };
+
+                       spi1_pins: spi1-pins {
+                               mux {
+                                       function = "spi";
+                                       groups = "spi1";
+                               };
+                       };
+
+                       spi2_pins: spi2-pins {
+                               mux {
+                                       function = "spi";
+                                       groups = "spi2";
+                               };
+                       };
+
+                       spi2_flash_pins: spi2-flash-pins {
+                               mux {
+                                       function = "spi";
+                                       groups = "spi2", "spi2_wp_hold";
+                               };
+                       };
+
+                       pcie0_pins: pcie0-pins {
+                               mux {
+                                       function = "pcie";
+                                       groups = "pcie_2l_0_pereset", "pcie_clk_req_n0_0",
+                                                "pcie_wake_n0_0";
+                               };
+                       };
+
+                       pcie1_pins: pcie1-pins {
+                               mux {
+                                       function = "pcie";
+                                       groups = "pcie_2l_1_pereset", "pcie_clk_req_n1",
+                                                "pcie_wake_n1_0";
+                               };
+                       };
+
+                       pcie2_pins: pcie2-pins {
+                               mux {
+                                       function = "pcie";
+                                       groups = "pcie_1l_0_pereset", "pcie_clk_req_n2_0",
+                                                "pcie_wake_n2_0";
+                               };
+                       };
+
+                       pcie3_pins: pcie3-pins {
+                               mux {
+                                       function = "pcie";
+                                       groups = "pcie_1l_1_pereset", "pcie_clk_req_n3",
+                                                "pcie_wake_n3_0";
+                               };
+                       };
+               };
+
+               pwm: pwm@10048000 {
+                       compatible = "mediatek,mt7988-pwm";
+                       reg = <0 0x10048000 0 0x1000>;
+                       #pwm-cells = <2>;
+                       clocks = <&infracfg CLK_INFRA_66M_PWM_BCK>,
+                                <&infracfg CLK_INFRA_66M_PWM_HCK>,
+                                <&infracfg CLK_INFRA_66M_PWM_CK1>,
+                                <&infracfg CLK_INFRA_66M_PWM_CK2>,
+                                <&infracfg CLK_INFRA_66M_PWM_CK3>,
+                                <&infracfg CLK_INFRA_66M_PWM_CK4>,
+                                <&infracfg CLK_INFRA_66M_PWM_CK5>,
+                                <&infracfg CLK_INFRA_66M_PWM_CK6>,
+                                <&infracfg CLK_INFRA_66M_PWM_CK7>,
+                                <&infracfg CLK_INFRA_66M_PWM_CK8>;
+                       clock-names = "top", "main", "pwm1", "pwm2", "pwm3",
+                                     "pwm4","pwm5","pwm6","pwm7","pwm8";
+                       status = "disabled";
+               };
+
+               sgmiisys0: syscon@10060000 {
+                       compatible = "mediatek,mt7988-sgmiisys",
+                                    "mediatek,mt7988-sgmiisys0",
+                                    "syscon",
+                                    "simple-mfd";
+                       reg = <0 0x10060000 0 0x1000>;
+                       resets = <&watchdog MT7988_TOPRGU_SGMII0_GRST>;
+                       #clock-cells = <1>;
+
+                       sgmiipcs0: pcs {
+                               compatible = "mediatek,mt7988-sgmii";
+                               clocks = <&topckgen CLK_TOP_SGM_0_SEL>,
+                                        <&sgmiisys0 CLK_SGM0_TX_EN>,
+                                        <&sgmiisys0 CLK_SGM0_RX_EN>;
+                               clock-names = "sgmii_sel", "sgmii_tx", "sgmii_rx";
+                       };
+               };
+
+               sgmiisys1: syscon@10070000 {
+                       compatible = "mediatek,mt7988-sgmiisys",
+                                    "mediatek,mt7988-sgmiisys1",
+                                    "syscon",
+                                    "simple-mfd";
+                       reg = <0 0x10070000 0 0x1000>;
+                       resets = <&watchdog MT7988_TOPRGU_SGMII1_GRST>;
+                       #clock-cells = <1>;
+
+                       sgmiipcs1: pcs {
+                               compatible = "mediatek,mt7988-sgmii";
+                               clocks = <&topckgen CLK_TOP_SGM_1_SEL>,
+                                        <&sgmiisys1 CLK_SGM1_TX_EN>,
+                                        <&sgmiisys1 CLK_SGM1_RX_EN>;
+                               clock-names = "sgmii_sel", "sgmii_tx", "sgmii_rx";
+                       };
+               };
+
+               usxgmiisys0: pcs@10080000 {
+                       compatible = "mediatek,mt7988-usxgmiisys";
+                       reg = <0 0x10080000 0 0x1000>;
+                       resets = <&watchdog MT7988_TOPRGU_XFI0_GRST>;
+                       clocks = <&topckgen CLK_TOP_USXGMII_SBUS_0_SEL>;
+               };
+
+               usxgmiisys1: pcs@10081000 {
+                       compatible = "mediatek,mt7988-usxgmiisys";
+                       reg = <0 0x10081000 0 0x1000>;
+                       resets = <&watchdog MT7988_TOPRGU_XFI1_GRST>;
+                       clocks = <&topckgen CLK_TOP_USXGMII_SBUS_1_SEL>;
+               };
+
+               mcusys: mcusys@100e0000 {
+                       compatible = "mediatek,mt7988-mcusys", "syscon";
+                       reg = <0 0x100e0000 0 0x1000>;
+                       #clock-cells = <1>;
+               };
+
+               uart0: serial@11000000 {
+                       compatible = "mediatek,mt7986-uart",
+                                    "mediatek,mt6577-uart";
+                       reg = <0 0x11000000 0 0x100>;
+                       interrupts = <GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>;
+                       /*
+                        * 8250-mtk driver don't control "baud" clock since commit
+                        * e32a83c70cf9 (kernel v5.7), but both "baud" and "bus" clocks
+                        * still need to be passed to the driver to prevent probe fail
+                        */
+                       clocks = <&topckgen CLK_TOP_UART_SEL>,
+                                <&infracfg CLK_INFRA_52M_UART0_CK>;
+                       clock-names = "baud", "bus";
+                       assigned-clocks = <&topckgen CLK_TOP_UART_SEL>,
+                                         <&infracfg CLK_INFRA_MUX_UART0_SEL>;
+                       assigned-clock-parents = <&topckgen CLK_TOP_XTAL>,
+                                                <&topckgen CLK_TOP_UART_SEL>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&uart0_pins>;
+                       status = "disabled";
+               };
+
+               uart1: serial@11000100 {
+                       compatible = "mediatek,mt7986-uart",
+                                    "mediatek,mt6577-uart";
+                       reg = <0 0x11000100 0 0x100>;
+                       interrupts = <GIC_SPI 124 IRQ_TYPE_LEVEL_HIGH>;
+                       /*
+                        * 8250-mtk driver don't control "baud" clock since commit
+                        * e32a83c70cf9 (kernel v5.7), but both "baud" and "bus" clocks
+                        * still need to be passed to the driver to prevent probe fail
+                        */
+                       clocks = <&topckgen CLK_TOP_UART_SEL>,
+                                <&infracfg CLK_INFRA_52M_UART1_CK>;
+                       clock-names = "baud", "bus";
+                       assigned-clocks = <&topckgen CLK_TOP_UART_SEL>,
+                                         <&infracfg CLK_INFRA_MUX_UART1_SEL>;
+                       assigned-clock-parents = <&topckgen CLK_TOP_XTAL>,
+                                                <&topckgen CLK_TOP_UART_SEL>;
+                       status = "disabled";
+               };
+
+               uart2: serial@11000200 {
+                       compatible = "mediatek,mt7986-uart",
+                                    "mediatek,mt6577-uart";
+                       reg = <0 0x11000200 0 0x100>;
+                       interrupts = <GIC_SPI 125 IRQ_TYPE_LEVEL_HIGH>;
+                       /*
+                        * 8250-mtk driver don't control "baud" clock since commit
+                        * e32a83c70cf9 (kernel v5.7), but both "baud" and "bus" clocks
+                        * still need to be passed to the driver to prevent probe fail
+                        */
+                       clocks = <&topckgen CLK_TOP_UART_SEL>,
+                                <&infracfg CLK_INFRA_52M_UART2_CK>;
+                       clock-names = "baud", "bus";
+                       assigned-clocks = <&topckgen CLK_TOP_UART_SEL>,
+                                         <&infracfg CLK_INFRA_MUX_UART2_SEL>;
+                       assigned-clock-parents = <&topckgen CLK_TOP_XTAL>,
+                                                <&topckgen CLK_TOP_UART_SEL>;
+                       status = "disabled";
+               };
+
+               snand: spi@11001000 {
+                       compatible = "mediatek,mt7986-snand";
+                       reg = <0 0x11001000 0 0x1000>;
+                       interrupts = <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&infracfg CLK_INFRA_SPINFI>,
+                                <&infracfg CLK_INFRA_NFI>;
+                       clock-names = "pad_clk", "nfi_clk";
+                       assigned-clocks = <&topckgen CLK_TOP_SPINFI_SEL>,
+                                         <&topckgen CLK_TOP_NFI1X_SEL>;
+                       assigned-clock-parents = <&topckgen CLK_TOP_MPLL_D8>,
+                                                <&topckgen CLK_TOP_MPLL_D8>;
+                       nand-ecc-engine = <&bch>;
+                       mediatek,quad-spi;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&snfi_pins>;
+                       status = "disabled";
+               };
+
+               bch: ecc@11002000 {
+                       compatible = "mediatek,mt7686-ecc";
+                       reg = <0 0x11002000 0 0x1000>;
+                       interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&topckgen CLK_TOP_NFI1X_SEL>;
+                       clock-names = "nfiecc_clk";
+                       status = "disabled";
+               };
+
+               i2c0: i2c@11003000 {
+                       compatible = "mediatek,mt7988-i2c",
+                                    "mediatek,mt7981-i2c";
+                       reg = <0 0x11003000 0 0x1000>,
+                             <0 0x10217080 0 0x80>;
+                       interrupts = <GIC_SPI 136 IRQ_TYPE_LEVEL_HIGH>;
+                       clock-div = <1>;
+                       clocks = <&infracfg CLK_INFRA_I2C_BCK>,
+                                <&infracfg CLK_INFRA_66M_AP_DMA_BCK>;
+                       clock-names = "main", "dma";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               i2c1: i2c@11004000 {
+                       compatible = "mediatek,mt7988-i2c",
+                                    "mediatek,mt7981-i2c";
+                       reg = <0 0x11004000 0 0x1000>,
+                             <0 0x10217100 0 0x80>;
+                       interrupts = <GIC_SPI 144 IRQ_TYPE_LEVEL_HIGH>;
+                       clock-div = <1>;
+                       clocks = <&infracfg CLK_INFRA_I2C_BCK>,
+                                <&infracfg CLK_INFRA_66M_AP_DMA_BCK>;
+                       clock-names = "main", "dma";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               i2c2: i2c@11005000 {
+                       compatible = "mediatek,mt7988-i2c",
+                               "mediatek,mt7981-i2c";
+                       reg = <0 0x11005000 0 0x1000>,
+                             <0 0x10217180 0 0x80>;
+                       interrupts = <GIC_SPI 145 IRQ_TYPE_LEVEL_HIGH>;
+                       clock-div = <1>;
+                       clocks = <&infracfg CLK_INFRA_I2C_BCK>,
+                                <&infracfg CLK_INFRA_66M_AP_DMA_BCK>;
+                       clock-names = "main", "dma";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               spi0: spi@11007000 {
+                       compatible = "mediatek,ipm-spi-quad", "mediatek,spi-ipm";
+                       reg = <0 0x11007000 0 0x100>;
+                       interrupts = <GIC_SPI 140 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&topckgen CLK_TOP_MPLL_D2>,
+                                <&topckgen CLK_TOP_SPI_SEL>,
+                                <&infracfg CLK_INFRA_104M_SPI0>,
+                                <&infracfg CLK_INFRA_66M_SPI0_HCK>;
+                       clock-names = "parent-clk", "sel-clk", "spi-clk",
+                                     "spi-hclk";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               spi1: spi@11008000 {
+                       compatible = "mediatek,ipm-spi-single", "mediatek,spi-ipm";
+                       reg = <0 0x11008000 0 0x100>;
+                       interrupts = <GIC_SPI 141 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&topckgen CLK_TOP_MPLL_D2>,
+                                <&topckgen CLK_TOP_SPI_SEL>,
+                                <&infracfg CLK_INFRA_104M_SPI1>,
+                                <&infracfg CLK_INFRA_66M_SPI1_HCK>;
+                       clock-names = "parent-clk", "sel-clk", "spi-clk",
+                                     "spi-hclk";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&spi1_pins>;
+                       status = "disabled";
+               };
+
+               spi2: spi@11009000 {
+                       compatible = "mediatek,ipm-spi-quad", "mediatek,spi-ipm";
+                       reg = <0 0x11009000 0 0x100>;
+                       interrupts = <GIC_SPI 142 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&topckgen CLK_TOP_MPLL_D2>,
+                                <&topckgen CLK_TOP_SPI_SEL>,
+                                <&infracfg CLK_INFRA_104M_SPI2_BCK>,
+                                <&infracfg CLK_INFRA_66M_SPI2_HCK>;
+                       clock-names = "parent-clk", "sel-clk", "spi-clk",
+                                     "spi-hclk";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               lvts: lvts@1100a000 {
+                       compatible = "mediatek,mt7988-lvts-ap";
+                       reg = <0 0x1100a000 0 0x1000>;
+                       clocks = <&infracfg CLK_INFRA_26M_THERM_SYSTEM>;
+                       clock-names = "lvts_clk";
+                       interrupts = <GIC_SPI 138 IRQ_TYPE_LEVEL_HIGH>;
+                       resets = <&infracfg MT7988_INFRA_RST1_THERM_CTRL_SWRST>;
+                       nvmem-cells = <&lvts_calibration>;
+                       nvmem-cell-names = "lvts-calib-data-1";
+                       #thermal-sensor-cells = <1>;
+               };
+
+               ssusb0: usb@11190000 {
+                       compatible = "mediatek,mt7988-xhci",
+                                    "mediatek,mtk-xhci";
+                       reg = <0 0x11190000 0 0x2e00>,
+                             <0 0x11193e00 0 0x0100>;
+                       reg-names = "mac", "ippc";
+                       interrupts = <GIC_SPI 173 IRQ_TYPE_LEVEL_HIGH>;
+                       phys = <&xphyu2port0 PHY_TYPE_USB2>,
+                              <&xphyu3port0 PHY_TYPE_USB3>;
+                       clocks = <&infracfg CLK_INFRA_USB_SYS>,
+                                <&infracfg CLK_INFRA_USB_XHCI>,
+                                <&infracfg CLK_INFRA_USB_REF>,
+                                <&infracfg CLK_INFRA_66M_USB_HCK>,
+                                <&infracfg CLK_INFRA_133M_USB_HCK>;
+                       clock-names = "sys_ck",
+                                     "xhci_ck",
+                                     "ref_ck",
+                                     "mcu_ck",
+                                     "dma_ck";
+                       #address-cells = <2>;
+                       #size-cells = <2>;
+                       mediatek,p0_speed_fixup;
+                       status = "disabled";
+               };
+
+               ssusb1: usb@11200000 {
+                       compatible = "mediatek,mt7988-xhci",
+                                    "mediatek,mtk-xhci";
+                       reg = <0 0x11200000 0 0x2e00>,
+                             <0 0x11203e00 0 0x0100>;
+                       reg-names = "mac", "ippc";
+                       interrupts = <GIC_SPI 172 IRQ_TYPE_LEVEL_HIGH>;
+                       phys = <&tphyu2port0 PHY_TYPE_USB2>,
+                              <&tphyu3port0 PHY_TYPE_USB3>;
+                       clocks = <&infracfg CLK_INFRA_USB_SYS_CK_P1>,
+                                <&infracfg CLK_INFRA_USB_XHCI_CK_P1>,
+                                <&infracfg CLK_INFRA_USB_CK_P1>,
+                                <&infracfg CLK_INFRA_66M_USB_HCK_CK_P1>,
+                                <&infracfg CLK_INFRA_133M_USB_HCK_CK_P1>;
+                       clock-names = "sys_ck",
+                                     "xhci_ck",
+                                     "ref_ck",
+                                     "mcu_ck",
+                                     "dma_ck";
+                       #address-cells = <2>;
+                       #size-cells = <2>;
+                       status = "disabled";
+               };
+
+               afe: audio-controller@11210000 {
+                       compatible = "mediatek,mt79xx-audio";
+                       reg = <0 0x11210000 0 0x9000>;
+                       interrupts = <GIC_SPI 106 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&infracfg CLK_INFRA_66M_AUD_SLV_BCK>,
+                                <&infracfg CLK_INFRA_AUD_26M>,
+                                <&infracfg CLK_INFRA_AUD_L>,
+                                <&infracfg CLK_INFRA_AUD_AUD>,
+                                <&infracfg CLK_INFRA_AUD_EG2>,
+                                <&topckgen CLK_TOP_AUD_SEL>,
+                                <&topckgen CLK_TOP_AUD_I2S_M>;
+                       clock-names = "aud_bus_ck",
+                                     "aud_26m_ck",
+                                     "aud_l_ck",
+                                     "aud_aud_ck",
+                                     "aud_eg2_ck",
+                                     "aud_sel",
+                                     "aud_i2s_m";
+                       assigned-clocks = <&topckgen CLK_TOP_AUD_SEL>,
+                                         <&topckgen CLK_TOP_A1SYS_SEL>,
+                                         <&topckgen CLK_TOP_AUD_L_SEL>,
+                                         <&topckgen CLK_TOP_A_TUNER_SEL>;
+                       assigned-clock-parents = <&apmixedsys CLK_APMIXED_APLL2>,
+                                                <&topckgen CLK_TOP_APLL2_D4>,
+                                                <&apmixedsys CLK_APMIXED_APLL2>,
+                                                <&topckgen CLK_TOP_APLL2_D4>;
+                       status = "disabled";
+               };
+
+               mmc0: mmc@11230000 {
+                       compatible = "mediatek,mt7986-mmc",
+                                    "mediatek,mt7981-mmc";
+                       reg = <0 0x11230000 0 0x1000>,
+                             <0 0x11D60000 0 0x1000>;
+                       interrupts = <GIC_SPI 143 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&infracfg CLK_INFRA_MSDC400>,
+                                <&infracfg CLK_INFRA_MSDC2_HCK>,
+                                <&infracfg CLK_INFRA_66M_MSDC_0_HCK>,
+                                <&infracfg CLK_INFRA_133M_MSDC_0_HCK>;
+                       assigned-clocks = <&topckgen CLK_TOP_EMMC_250M_SEL>,
+                                         <&topckgen CLK_TOP_EMMC_400M_SEL>;
+                       assigned-clock-parents = <&topckgen CLK_TOP_NET1PLL_D5_D2>,
+                                                <&apmixedsys CLK_APMIXED_MSDCPLL>;
+                       clock-names = "source",
+                                     "hclk",
+                                     "axi_cg",
+                                     "ahb_cg";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       status = "disabled";
+               };
+
+               pcie2: pcie@11280000 {
+                       compatible = "mediatek,mt7988-pcie",
+                                    "mediatek,mt7986-pcie",
+                                    "mediatek,mt8192-pcie";
+                       reg = <0 0x11280000 0 0x2000>;
+                       reg-names = "pcie-mac";
+                       ranges = <0x81000000 0x00 0x20000000 0x00
+                                 0x20000000 0x00 0x00200000>,
+                                <0x82000000 0x00 0x20200000 0x00
+                                 0x20200000 0x00 0x07e00000>;
+                       device_type = "pci";
+                       linux,pci-domain = <3>;
+                       interrupts = <GIC_SPI 170 IRQ_TYPE_LEVEL_HIGH>;
+                       bus-range = <0x00 0xff>;
+                       clocks = <&infracfg CLK_INFRA_PCIE_PIPE_P2>,
+                                <&infracfg CLK_INFRA_PCIE_GFMUX_TL_P2>,
+                                <&infracfg CLK_INFRA_PCIE_PERI_26M_CK_P2>,
+                                <&infracfg CLK_INFRA_133M_PCIE_CK_P2>;
+                       clock-names = "pl_250m", "tl_26m", "peri_26m",
+                                     "top_133m";
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pcie2_pins>;
+                       phys = <&xphyu3port0 PHY_TYPE_PCIE>;
+                       phy-names = "pcie-phy";
+                       #interrupt-cells = <1>;
+                       interrupt-map-mask = <0 0 0 0x7>;
+                       interrupt-map = <0 0 0 1 &pcie_intc2 0>,
+                                       <0 0 0 2 &pcie_intc2 1>,
+                                       <0 0 0 3 &pcie_intc2 2>,
+                                       <0 0 0 4 &pcie_intc2 3>;
+                       #address-cells = <3>;
+                       #size-cells = <2>;
+                       status = "disabled";
+
+                       pcie_intc2: interrupt-controller {
+                               #address-cells = <0>;
+                               #interrupt-cells = <1>;
+                               interrupt-controller;
+                       };
+               };
+
+               pcie3: pcie@11290000 {
+                       compatible = "mediatek,mt7988-pcie",
+                                    "mediatek,mt7986-pcie",
+                                    "mediatek,mt8192-pcie";
+                       reg = <0 0x11290000 0 0x2000>;
+                       reg-names = "pcie-mac";
+                       ranges = <0x81000000 0x00 0x28000000 0x00
+                                 0x28000000 0x00 0x00200000>,
+                                <0x82000000 0x00 0x28200000 0x00
+                                 0x28200000 0x00 0x07e00000>;
+                       device_type = "pci";
+                       linux,pci-domain = <2>;
+                       interrupts = <GIC_SPI 171 IRQ_TYPE_LEVEL_HIGH>;
+                       bus-range = <0x00 0xff>;
+                       clocks = <&infracfg CLK_INFRA_PCIE_PIPE_P3>,
+                                <&infracfg CLK_INFRA_PCIE_GFMUX_TL_P3>,
+                                <&infracfg CLK_INFRA_PCIE_PERI_26M_CK_P3>,
+                                <&infracfg CLK_INFRA_133M_PCIE_CK_P3>;
+                       clock-names = "pl_250m", "tl_26m", "peri_26m",
+                                     "top_133m";
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pcie3_pins>;
+                       #interrupt-cells = <1>;
+                       interrupt-map-mask = <0 0 0 0x7>;
+                       interrupt-map = <0 0 0 1 &pcie_intc3 0>,
+                                       <0 0 0 2 &pcie_intc3 1>,
+                                       <0 0 0 3 &pcie_intc3 2>,
+                                       <0 0 0 4 &pcie_intc3 3>;
+                       #address-cells = <3>;
+                       #size-cells = <2>;
+                       status = "disabled";
+
+                       pcie_intc3: interrupt-controller {
+                               #address-cells = <0>;
+                               #interrupt-cells = <1>;
+                               interrupt-controller;
+                       };
+               };
+
+               pcie0: pcie@11300000 {
+                       compatible = "mediatek,mt7988-pcie",
+                                    "mediatek,mt7986-pcie",
+                                    "mediatek,mt8192-pcie";
+                       reg = <0 0x11300000 0 0x2000>;
+                       reg-names = "pcie-mac";
+                       ranges = <0x81000000 0x00 0x30000000 0x00
+                                 0x30000000 0x00 0x00200000>,
+                                <0x82000000 0x00 0x30200000 0x00
+                                 0x30200000 0x00 0x07e00000>;
+                       device_type = "pci";
+                       linux,pci-domain = <0>;
+                       interrupts = <GIC_SPI 168 IRQ_TYPE_LEVEL_HIGH>;
+                       bus-range = <0x00 0xff>;
+                       clocks = <&infracfg CLK_INFRA_PCIE_PIPE_P0>,
+                                <&infracfg CLK_INFRA_PCIE_GFMUX_TL_P0>,
+                                <&infracfg CLK_INFRA_PCIE_PERI_26M_CK_P0>,
+                                <&infracfg CLK_INFRA_133M_PCIE_CK_P0>;
+                       clock-names = "pl_250m", "tl_26m", "peri_26m",
+                                     "top_133m";
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pcie0_pins>;
+                       #interrupt-cells = <1>;
+                       interrupt-map-mask = <0 0 0 0x7>;
+                       interrupt-map = <0 0 0 1 &pcie_intc0 0>,
+                                       <0 0 0 2 &pcie_intc0 1>,
+                                       <0 0 0 3 &pcie_intc0 2>,
+                                       <0 0 0 4 &pcie_intc0 3>;
+                       #address-cells = <3>;
+                       #size-cells = <2>;
+                       status = "disabled";
+
+                       pcie_intc0: interrupt-controller {
+                               #address-cells = <0>;
+                               #interrupt-cells = <1>;
+                               interrupt-controller;
+                       };
+               };
+
+               pcie1: pcie@11310000 {
+                       compatible = "mediatek,mt7988-pcie",
+                                    "mediatek,mt7986-pcie",
+                                    "mediatek,mt8192-pcie";
+                       reg = <0 0x11310000 0 0x2000>;
+                       reg-names = "pcie-mac";
+                       ranges = <0x81000000 0x00 0x38000000 0x00
+                                 0x38000000 0x00 0x00200000>,
+                                <0x82000000 0x00 0x38200000 0x00
+                                 0x38200000 0x00 0x07e00000>;
+                       device_type = "pci";
+                       linux,pci-domain = <1>;
+                       interrupts = <GIC_SPI 169 IRQ_TYPE_LEVEL_HIGH>;
+                       bus-range = <0x00 0xff>;
+                       clocks = <&infracfg CLK_INFRA_PCIE_PIPE_P1>,
+                                <&infracfg CLK_INFRA_PCIE_GFMUX_TL_P1>,
+                                <&infracfg CLK_INFRA_PCIE_PERI_26M_CK_P1>,
+                                <&infracfg CLK_INFRA_133M_PCIE_CK_P1>;
+                       clock-names = "pl_250m", "tl_26m", "peri_26m",
+                                     "top_133m";
+                       pinctrl-names = "default";
+                       pinctrl-0 = <&pcie1_pins>;
+                       #interrupt-cells = <1>;
+                       interrupt-map-mask = <0 0 0 0x7>;
+                       interrupt-map = <0 0 0 1 &pcie_intc1 0>,
+                                       <0 0 0 2 &pcie_intc1 1>,
+                                       <0 0 0 3 &pcie_intc1 2>,
+                                       <0 0 0 4 &pcie_intc1 3>;
+                       #address-cells = <3>;
+                       #size-cells = <2>;
+                       status = "disabled";
+
+                       pcie_intc1: interrupt-controller {
+                               #address-cells = <0>;
+                               #interrupt-cells = <1>;
+                               interrupt-controller;
+                       };
+               };
+
+               tphy: tphy@11c50000 {
+                       compatible = "mediatek,mt7988",
+                                    "mediatek,generic-tphy-v2";
+                       ranges;
+                       #address-cells = <2>;
+                       #size-cells = <2>;
+                       status = "disabled";
+
+                       tphyu2port0: usb-phy@11c50000 {
+                               reg = <0 0x11c50000 0 0x700>;
+                               clocks = <&infracfg CLK_INFRA_USB_UTMI_CK_P1>;
+                               clock-names = "ref";
+                               #phy-cells = <1>;
+                       };
+
+                       tphyu3port0: usb-phy@11c50700 {
+                               reg = <0 0x11c50700 0 0x900>;
+                               clocks = <&infracfg CLK_INFRA_USB_PIPE_CK_P1>;
+                               clock-names = "ref";
+                               #phy-cells = <1>;
+                               mediatek,usb3-pll-ssc-delta;
+                               mediatek,usb3-pll-ssc-delta1;
+                       };
+               };
+
+               topmisc: topmisc@11d10000 {
+                       compatible = "mediatek,mt7988-topmisc", "syscon",
+                                    "mediatek,mt7988-power-controller";
+                       reg = <0 0x11d10000 0 0x10000>;
+                       #clock-cells = <1>;
+                       #power-domain-cells = <1>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+               };
+
+               xphy: xphy@11e10000 {
+                       compatible = "mediatek,mt7988",
+                                    "mediatek,xsphy";
+                       ranges;
+                       #address-cells = <2>;
+                       #size-cells = <2>;
+                       status = "disabled";
+
+                       xphyu2port0: usb-phy@11e10000 {
+                               reg = <0 0x11e10000 0 0x400>;
+                               clocks = <&infracfg CLK_INFRA_USB_UTMI>;
+                               clock-names = "ref";
+                               #phy-cells = <1>;
+                       };
+
+                       xphyu3port0: usb-phy@11e13000 {
+                               reg = <0 0x11e13400 0 0x500>;
+                               clocks = <&infracfg CLK_INFRA_USB_PIPE>;
+                               clock-names = "ref";
+                               #phy-cells = <1>;
+                               mediatek,syscon-type = <&topmisc 0x218 0>;
+                       };
+               };
+
+               xfi_tphy0: phy@11f20000 {
+                       compatible = "mediatek,mt7988-xfi-tphy";
+                       reg = <0 0x11f20000 0 0x10000>;
+                       resets = <&watchdog MT7988_TOPRGU_XFI_PEXTP0_GRST>;
+                       clocks = <&xfi_pll CLK_XFIPLL_PLL_EN>, <&topckgen CLK_TOP_XFI_PHY_0_XTAL_SEL>;
+                       clock-names = "xfipll", "topxtal";
+                       mediatek,usxgmii-performance-errata;
+                       #phy-cells = <0>;
+               };
+
+               xfi_tphy1: phy@11f30000 {
+                       compatible = "mediatek,mt7988-xfi-tphy";
+                       reg = <0 0x11f30000 0 0x10000>;
+                       resets = <&watchdog MT7988_TOPRGU_XFI_PEXTP1_GRST>;
+                       clocks = <&xfi_pll CLK_XFIPLL_PLL_EN>, <&topckgen CLK_TOP_XFI_PHY_1_XTAL_SEL>;
+                       clock-names = "xfipll", "topxtal";
+                       #phy-cells = <0>;
+               };
+
+               xfi_pll: clock-controller@11f40000 {
+                       compatible = "mediatek,mt7988-xfi-pll";
+                       reg = <0 0x11f40000 0 0x1000>;
+                       resets = <&watchdog MT7988_TOPRGU_XFI_PLL_GRST>;
+                       #clock-cells = <1>;
+               };
+
+               efuse: efuse@11f50000 {
+                       compatible = "mediatek,efuse";
+                       reg = <0 0x11f50000 0 0x1000>;
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+
+                       lvts_calibration: calib@918 {
+                               reg = <0x918 0x28>;
+                       };
+
+                       phy_calibration_p0: calib@940 {
+                               reg = <0x940 0x10>;
+                       };
+
+                       phy_calibration_p1: calib@954 {
+                               reg = <0x954 0x10>;
+                       };
+
+                       phy_calibration_p2: calib@968 {
+                               reg = <0x968 0x10>;
+                       };
+
+                       phy_calibration_p3: calib@97c {
+                               reg = <0x97c 0x10>;
+                       };
+
+                       cpufreq_calibration: calib@278 {
+                               reg = <0x278 0x1>;
+                       };
+               };
+
+               ethsys: syscon@15000000 {
+                       compatible = "mediatek,mt7988-ethsys", "syscon";
+                       reg = <0 0x15000000 0 0x1000>;
+                       #clock-cells = <1>;
+                       #reset-cells = <1>;
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+               };
+
+               switch: switch@15020000 {
+                       compatible = "mediatek,mt7988-switch";
+                       reg = <0 0x15020000 0 0x8000>;
+                       interrupt-controller;
+                       #interrupt-cells = <1>;
+                       interrupt-parent = <&gic>;
+                       interrupts = <GIC_SPI 209 IRQ_TYPE_LEVEL_HIGH>;
+                       resets = <&ethwarp MT7988_ETHWARP_RST_SWITCH>;
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               gsw_port0: port@0 {
+                                       reg = <0>;
+                                       label = "lan0";
+                                       phy-mode = "internal";
+                                       phy-handle = <&gsw_phy0>;
+                               };
+
+                               gsw_port1: port@1 {
+                                       reg = <1>;
+                                       label = "lan1";
+                                       phy-mode = "internal";
+                                       phy-handle = <&gsw_phy1>;
+                               };
+
+                               gsw_port2: port@2 {
+                                       reg = <2>;
+                                       label = "lan2";
+                                       phy-mode = "internal";
+                                       phy-handle = <&gsw_phy2>;
+                               };
+
+                               gsw_port3: port@3 {
+                                       reg = <3>;
+                                       label = "lan3";
+                                       phy-mode = "internal";
+                                       phy-handle = <&gsw_phy3>;
+                               };
+
+                               port@6 {
+                                       reg = <6>;
+                                       ethernet = <&gmac0>;
+                                       phy-mode = "internal";
+
+                                       fixed-link {
+                                               speed = <10000>;
+                                               full-duplex;
+                                               pause;
+                                       };
+                               };
+                       };
+
+                       mdio {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               mediatek,pio = <&pio>;
+
+                               gsw_phy0: ethernet-phy@0 {
+                                       compatible = "ethernet-phy-ieee802.3-c22";
+                                       reg = <0>;
+                                       phy-mode = "internal";
+                                       nvmem-cells = <&phy_calibration_p0>;
+                                       nvmem-cell-names = "phy-cal-data";
+
+                                       leds {
+                                               #address-cells = <1>;
+                                               #size-cells = <0>;
+
+                                               gsw_phy0_led0: gsw-phy0-led0@0 {
+                                                       reg = <0>;
+                                                       function = LED_FUNCTION_LAN;
+                                                       status = "disabled";
+                                               };
+
+                                               gsw_phy0_led1: gsw-phy0-led1@1 {
+                                                       reg = <1>;
+                                                       function = LED_FUNCTION_LAN;
+                                                       status = "disabled";
+                                               };
+                                       };
+                               };
+
+                               gsw_phy1: ethernet-phy@1 {
+                                       compatible = "ethernet-phy-ieee802.3-c22";
+                                       reg = <1>;
+                                       phy-mode = "internal";
+                                       nvmem-cells = <&phy_calibration_p1>;
+                                       nvmem-cell-names = "phy-cal-data";
+
+                                       leds {
+                                               #address-cells = <1>;
+                                               #size-cells = <0>;
+
+                                               gsw_phy1_led0: gsw-phy1-led0@0 {
+                                                       reg = <0>;
+                                                       function = LED_FUNCTION_LAN;
+                                                       status = "disabled";
+                                               };
+
+                                               gsw_phy1_led1: gsw-phy1-led1@1 {
+                                                       reg = <1>;
+                                                       function = LED_FUNCTION_LAN;
+                                                       status = "disabled";
+                                               };
+                                       };
+                               };
+
+                               gsw_phy2: ethernet-phy@2 {
+                                       compatible = "ethernet-phy-ieee802.3-c22";
+                                       reg = <2>;
+                                       phy-mode = "internal";
+                                       nvmem-cells = <&phy_calibration_p2>;
+                                       nvmem-cell-names = "phy-cal-data";
+
+                                       leds {
+                                               #address-cells = <1>;
+                                               #size-cells = <0>;
+
+                                               gsw_phy2_led0: gsw-phy2-led0@0 {
+                                                       reg = <0>;
+                                                       function = LED_FUNCTION_LAN;
+                                                       status = "disabled";
+                                               };
+
+                                               gsw_phy2_led1: gsw-phy2-led1@1 {
+                                                       reg = <1>;
+                                                       function = LED_FUNCTION_LAN;
+                                                       status = "disabled";
+                                               };
+                                       };
+                               };
+
+                               gsw_phy3: ethernet-phy@3 {
+                                       compatible = "ethernet-phy-ieee802.3-c22";
+                                       reg = <3>;
+                                       phy-mode = "internal";
+                                       nvmem-cells = <&phy_calibration_p3>;
+                                       nvmem-cell-names = "phy-cal-data";
+
+                                       leds {
+                                               #address-cells = <1>;
+                                               #size-cells = <0>;
+
+                                               gsw_phy3_led0: gsw-phy3-led0@0 {
+                                                       reg = <0>;
+                                                       function = LED_FUNCTION_LAN;
+                                                       status = "disabled";
+                                               };
+
+                                               gsw_phy3_led1: gsw-phy3-led1@1 {
+                                                       reg = <1>;
+                                                       function = LED_FUNCTION_LAN;
+                                                       status = "disabled";
+                                               };
+                                       };
+                               };
+                       };
+               };
+
+               ethwarp: clock-controller@15031000 {
+                       compatible = "mediatek,mt7988-ethwarp";
+                       reg = <0 0x15031000 0 0x1000>;
+                       #clock-cells = <1>;
+                       #reset-cells = <1>;
+               };
+
+               eth: ethernet@15100000 {
+                       compatible = "mediatek,mt7988-eth";
+                       reg = <0 0x15100000 0 0x80000>,
+                             <0 0x15400000 0 0x380000>;
+                       interrupts = <GIC_SPI 196 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 197 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 198 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 199 IRQ_TYPE_LEVEL_HIGH>;
+                       clocks = <&ethsys CLK_ETHDMA_XGP1_EN>,
+                                <&ethsys CLK_ETHDMA_XGP2_EN>,
+                                <&ethsys CLK_ETHDMA_XGP3_EN>,
+                                <&ethsys CLK_ETHDMA_FE_EN>,
+                                <&ethsys CLK_ETHDMA_GP2_EN>,
+                                <&ethsys CLK_ETHDMA_GP1_EN>,
+                                <&ethsys CLK_ETHDMA_GP3_EN>,
+                                <&ethsys CLK_ETHDMA_ESW_EN>,
+                                <&ethsys CLK_ETHDMA_CRYPT0_EN>,
+                                <&ethwarp CLK_ETHWARP_WOCPU2_EN>,
+                                <&ethwarp CLK_ETHWARP_WOCPU1_EN>,
+                                <&ethwarp CLK_ETHWARP_WOCPU0_EN>,
+                                <&topckgen CLK_TOP_ETH_GMII_SEL>,
+                                <&topckgen CLK_TOP_ETH_REFCK_50M_SEL>,
+                                <&topckgen CLK_TOP_ETH_SYS_200M_SEL>,
+                                <&topckgen CLK_TOP_ETH_SYS_SEL>,
+                                <&topckgen CLK_TOP_ETH_XGMII_SEL>,
+                                <&topckgen CLK_TOP_ETH_MII_SEL>,
+                                <&topckgen CLK_TOP_NETSYS_SEL>,
+                                <&topckgen CLK_TOP_NETSYS_500M_SEL>,
+                                <&topckgen CLK_TOP_NETSYS_PAO_2X_SEL>,
+                                <&topckgen CLK_TOP_NETSYS_SYNC_250M_SEL>,
+                                <&topckgen CLK_TOP_NETSYS_PPEFB_250M_SEL>,
+                                <&topckgen CLK_TOP_NETSYS_WARP_SEL>;
+                       clock-names = "xgp1", "xgp2", "xgp3", "fe", "gp2", "gp1",
+                                     "gp3", "esw", "crypto",
+                                     "ethwarp_wocpu2", "ethwarp_wocpu1",
+                                     "ethwarp_wocpu0", "top_eth_gmii_sel",
+                                     "top_eth_refck_50m_sel", "top_eth_sys_200m_sel",
+                                     "top_eth_sys_sel", "top_eth_xgmii_sel",
+                                     "top_eth_mii_sel", "top_netsys_sel",
+                                     "top_netsys_500m_sel", "top_netsys_pao_2x_sel",
+                                     "top_netsys_sync_250m_sel",
+                                     "top_netsys_ppefb_250m_sel",
+                                     "top_netsys_warp_sel";
+                       assigned-clocks = <&topckgen CLK_TOP_NETSYS_2X_SEL>,
+                                         <&topckgen CLK_TOP_NETSYS_GSW_SEL>,
+                                         <&topckgen CLK_TOP_USXGMII_SBUS_0_SEL>,
+                                         <&topckgen CLK_TOP_USXGMII_SBUS_1_SEL>,
+                                         <&topckgen CLK_TOP_SGM_0_SEL>,
+                                         <&topckgen CLK_TOP_SGM_1_SEL>;
+                       assigned-clock-parents = <&apmixedsys CLK_APMIXED_NET2PLL>,
+                                                <&topckgen CLK_TOP_NET1PLL_D4>,
+                                                <&topckgen CLK_TOP_NET1PLL_D8_D4>,
+                                                <&topckgen CLK_TOP_NET1PLL_D8_D4>,
+                                                <&apmixedsys CLK_APMIXED_SGMPLL>,
+                                                <&apmixedsys CLK_APMIXED_SGMPLL>;
+                       mediatek,ethsys = <&ethsys>;
+                       mediatek,infracfg = <&topmisc>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       gmac0: mac@0 {
+                               compatible = "mediatek,eth-mac";
+                               reg = <0>;
+                               phy-mode = "internal";
+                               status = "disabled";
+
+                               fixed-link {
+                                       speed = <10000>;
+                                       full-duplex;
+                                       pause;
+                               };
+                       };
+
+                       gmac1: mac@1 {
+                               compatible = "mediatek,eth-mac";
+                               reg = <1>;
+                               status = "disabled";
+                               pcs-handle = <&sgmiipcs1>, <&usxgmiisys1>;
+                               phys = <&xfi_tphy1>;
+                       };
+
+                       gmac2: mac@2 {
+                               compatible = "mediatek,eth-mac";
+                               reg = <2>;
+                               status = "disabled";
+                               pcs-handle = <&sgmiipcs0>, <&usxgmiisys0>;
+                               phys = <&xfi_tphy0>;
+                       };
+
+                       mdio_bus: mdio-bus {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               /* internal 2.5G PHY */
+                               int_2p5g_phy: ethernet-phy@15 {
+                                       compatible = "ethernet-phy-ieee802.3-c45";
+                                       reg = <15>;
+                                       phy-mode = "internal";
+                               };
+                       };
+               };
+
+               crypto: crypto@15600000 {
+                       compatible = "inside-secure,safexcel-eip197b";
+                       reg = <0 0x15600000 0 0x180000>;
+                       interrupts = <GIC_SPI 214 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 215 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 216 IRQ_TYPE_LEVEL_HIGH>,
+                                    <GIC_SPI 217 IRQ_TYPE_LEVEL_HIGH>;
+                       interrupt-names = "ring0", "ring1", "ring2", "ring3";
+                       status = "okay";
+               };
+       };
+
+       thermal-zones {
+               cpu_thermal: cpu-thermal {
+                       polling-delay-passive = <1000>;
+                       polling-delay = <1000>;
+                       thermal-sensors = <&lvts 0>;
+
+                       trips {
+                               cpu_trip_crit: crit {
+                                       temperature = <125000>;
+                                       hysteresis = <2000>;
+                                       type = "critical";
+                               };
+
+                               cpu_trip_hot: hot {
+                                       temperature = <120000>;
+                                       hysteresis = <2000>;
+                                       type = "hot";
+                               };
+
+                               cpu_trip_active_high: active-high {
+                                       temperature = <115000>;
+                                       hysteresis = <2000>;
+                                       type = "active";
+                               };
+
+                               cpu_trip_active_med: active-med {
+                                       temperature = <85000>;
+                                       hysteresis = <2000>;
+                                       type = "active";
+                               };
+
+                               cpu_trip_active_low: active-low {
+                                       temperature = <40000>;
+                                       hysteresis = <2000>;
+                                       type = "active";
+                               };
+                       };
+
+                       cooling-maps {
+                               cpu-active-high {
+                               /* active: set fan to cooling level 2 */
+                                       cooling-device = <&fan 3 3>;
+                                       trip = <&cpu_trip_active_high>;
+                               };
+
+                               cpu-active-low {
+                               /* active: set fan to cooling level 1 */
+                                       cooling-device = <&fan 2 2>;
+                                       trip = <&cpu_trip_active_med>;
+                               };
+
+                               cpu-passive {
+                               /* passive: set fan to cooling level 0 */
+                                       cooling-device = <&fan 1 1>;
+                                       trip = <&cpu_trip_active_low>;
+                               };
+                       };
+               };
+       };
+
+       timer {
+               compatible = "arm,armv8-timer";
+               interrupt-parent = <&gic>;
+               interrupts = <GIC_PPI 13 IRQ_TYPE_LEVEL_LOW>,
+                            <GIC_PPI 14 IRQ_TYPE_LEVEL_LOW>,
+                            <GIC_PPI 11 IRQ_TYPE_LEVEL_LOW>,
+                            <GIC_PPI 10 IRQ_TYPE_LEVEL_LOW>;
+       };
+};
diff --git a/target/linux/mediatek/files-6.6/drivers/net/phy/mediatek-2p5ge.c b/target/linux/mediatek/files-6.6/drivers/net/phy/mediatek-2p5ge.c
new file mode 100644 (file)
index 0000000..e2e06d1
--- /dev/null
@@ -0,0 +1,316 @@
+// SPDX-License-Identifier: GPL-2.0+
+#include <linux/bitfield.h>
+#include <linux/firmware.h>
+#include <linux/module.h>
+#include <linux/nvmem-consumer.h>
+#include <linux/of_address.h>
+#include <linux/of_platform.h>
+#include <linux/pinctrl/consumer.h>
+#include <linux/phy.h>
+#include <linux/pm_domain.h>
+#include <linux/pm_runtime.h>
+
+#define MT7988_2P5GE_PMB "mediatek/mt7988/i2p5ge-phy-pmb.bin"
+
+#define MD32_EN                                        BIT(0)
+#define PMEM_PRIORITY                          BIT(8)
+#define DMEM_PRIORITY                          BIT(16)
+
+#define BASE100T_STATUS_EXTEND                 0x10
+#define BASE1000T_STATUS_EXTEND                        0x11
+#define EXTEND_CTRL_AND_STATUS                 0x16
+
+#define PHY_AUX_CTRL_STATUS                    0x1d
+#define   PHY_AUX_DPX_MASK                     GENMASK(5, 5)
+#define   PHY_AUX_SPEED_MASK                   GENMASK(4, 2)
+
+/* Registers on MDIO_MMD_VEND1 */
+#define MTK_PHY_LINK_STATUS_MISC               0xa2
+#define   MTK_PHY_FDX_ENABLE                   BIT(5)
+
+#define MTK_PHY_LPI_PCS_DSP_CTRL               0x121
+#define   MTK_PHY_LPI_SIG_EN_LO_THRESH100_MASK GENMASK(12, 8)
+
+/* Registers on MDIO_MMD_VEND2 */
+#define MTK_PHY_LED0_ON_CTRL                   0x24
+#define   MTK_PHY_LED0_ON_LINK1000             BIT(0)
+#define   MTK_PHY_LED0_ON_LINK100              BIT(1)
+#define   MTK_PHY_LED0_ON_LINK10               BIT(2)
+#define   MTK_PHY_LED0_ON_LINK2500             BIT(7)
+#define   MTK_PHY_LED0_POLARITY                        BIT(14)
+
+#define MTK_PHY_LED1_ON_CTRL                   0x26
+#define   MTK_PHY_LED1_ON_FDX                  BIT(4)
+#define   MTK_PHY_LED1_ON_HDX                  BIT(5)
+#define   MTK_PHY_LED1_POLARITY                        BIT(14)
+
+#define MTK_EXT_PAGE_ACCESS                    0x1f
+#define MTK_PHY_PAGE_STANDARD                  0x0000
+#define MTK_PHY_PAGE_EXTENDED_52B5             0x52b5
+
+struct mtk_i2p5ge_phy_priv {
+       bool fw_loaded;
+};
+
+enum {
+       PHY_AUX_SPD_10 = 0,
+       PHY_AUX_SPD_100,
+       PHY_AUX_SPD_1000,
+       PHY_AUX_SPD_2500,
+};
+
+static int mtk_2p5ge_phy_read_page(struct phy_device *phydev)
+{
+       return __phy_read(phydev, MTK_EXT_PAGE_ACCESS);
+}
+
+static int mtk_2p5ge_phy_write_page(struct phy_device *phydev, int page)
+{
+       return __phy_write(phydev, MTK_EXT_PAGE_ACCESS, page);
+}
+
+static int mt7988_2p5ge_phy_probe(struct phy_device *phydev)
+{
+       struct mtk_i2p5ge_phy_priv *phy_priv;
+
+       phy_priv = devm_kzalloc(&phydev->mdio.dev,
+                               sizeof(struct mtk_i2p5ge_phy_priv), GFP_KERNEL);
+       if (!phy_priv)
+               return -ENOMEM;
+
+       phydev->priv = phy_priv;
+
+       return 0;
+}
+
+static int mt7988_2p5ge_phy_config_init(struct phy_device *phydev)
+{
+       int ret, i;
+       const struct firmware *fw;
+       struct device *dev = &phydev->mdio.dev;
+       struct device_node *np;
+       void __iomem *pmb_addr;
+       void __iomem *md32_en_cfg_base;
+       struct mtk_i2p5ge_phy_priv *phy_priv = phydev->priv;
+       u16 reg;
+       struct pinctrl *pinctrl;
+
+       if (!phy_priv->fw_loaded) {
+               np = of_find_compatible_node(NULL, NULL, "mediatek,2p5gphy-fw");
+               if (!np)
+                       return -ENOENT;
+               pmb_addr = of_iomap(np, 0);
+               if (!pmb_addr)
+                       return -ENOMEM;
+               md32_en_cfg_base = of_iomap(np, 1);
+               if (!md32_en_cfg_base)
+                       return -ENOMEM;
+
+               ret = request_firmware(&fw, MT7988_2P5GE_PMB, dev);
+               if (ret) {
+                       dev_err(dev, "failed to load firmware: %s, ret: %d\n",
+                               MT7988_2P5GE_PMB, ret);
+                       return ret;
+               }
+
+               reg = readw(md32_en_cfg_base);
+               if (reg & MD32_EN) {
+                       phy_set_bits(phydev, 0, BIT(15));
+                       usleep_range(10000, 11000);
+               }
+               phy_set_bits(phydev, 0, BIT(11));
+
+               /* Write magic number to safely stall MCU */
+               phy_write_mmd(phydev, MDIO_MMD_VEND1, 0x800e, 0x1100);
+               phy_write_mmd(phydev, MDIO_MMD_VEND1, 0x800f, 0x00df);
+
+               for (i = 0; i < fw->size - 1; i += 4)
+                       writel(*((uint32_t *)(fw->data + i)), pmb_addr + i);
+               release_firmware(fw);
+
+               writew(reg & ~MD32_EN, md32_en_cfg_base);
+               writew(reg | MD32_EN, md32_en_cfg_base);
+               phy_set_bits(phydev, 0, BIT(15));
+               dev_info(dev, "Firmware loading/trigger ok.\n");
+
+               phy_priv->fw_loaded = true;
+       }
+
+       /* Setup LED */
+       phy_set_bits_mmd(phydev, MDIO_MMD_VEND2, MTK_PHY_LED0_ON_CTRL,
+                        MTK_PHY_LED0_ON_LINK10 |
+                        MTK_PHY_LED0_ON_LINK100 |
+                        MTK_PHY_LED0_ON_LINK1000 |
+                        MTK_PHY_LED0_ON_LINK2500);
+       phy_set_bits_mmd(phydev, MDIO_MMD_VEND2, MTK_PHY_LED1_ON_CTRL,
+                        MTK_PHY_LED1_ON_FDX | MTK_PHY_LED1_ON_HDX);
+
+       pinctrl = devm_pinctrl_get_select(&phydev->mdio.dev, "i2p5gbe-led");
+       if (IS_ERR(pinctrl)) {
+               dev_err(&phydev->mdio.dev, "Fail to set LED pins!\n");
+               return PTR_ERR(pinctrl);
+       }
+
+       phy_modify_mmd(phydev, MDIO_MMD_VEND1, MTK_PHY_LPI_PCS_DSP_CTRL,
+                      MTK_PHY_LPI_SIG_EN_LO_THRESH100_MASK, 0);
+
+       /* Enable 16-bit next page exchange bit if 1000-BT isn't advertizing */
+       phy_select_page(phydev, MTK_PHY_PAGE_EXTENDED_52B5);
+       __phy_write(phydev, 0x11, 0xfbfa);
+       __phy_write(phydev, 0x12, 0xc3);
+       __phy_write(phydev, 0x10, 0x87f8);
+       phy_restore_page(phydev, MTK_PHY_PAGE_STANDARD, 0);
+
+       return 0;
+}
+
+static int mt7988_2p5ge_phy_config_aneg(struct phy_device *phydev)
+{
+       bool changed = false;
+       u32 adv;
+       int ret;
+
+       if (phydev->autoneg == AUTONEG_DISABLE) {
+               /* Configure half duplex with genphy_setup_forced,
+                * because genphy_c45_pma_setup_forced does not support.
+                */
+               return phydev->duplex != DUPLEX_FULL
+                       ? genphy_setup_forced(phydev)
+                       : genphy_c45_pma_setup_forced(phydev);
+       }
+
+       ret = genphy_c45_an_config_aneg(phydev);
+       if (ret < 0)
+               return ret;
+       if (ret > 0)
+               changed = true;
+
+       adv = linkmode_adv_to_mii_ctrl1000_t(phydev->advertising);
+       ret = phy_modify_changed(phydev, MII_CTRL1000,
+                                ADVERTISE_1000FULL | ADVERTISE_1000HALF,
+                                adv);
+       if (ret < 0)
+               return ret;
+       if (ret > 0)
+               changed = true;
+
+       return genphy_c45_check_and_restart_aneg(phydev, changed);
+}
+
+static int mt7988_2p5ge_phy_get_features(struct phy_device *phydev)
+{
+       int ret;
+
+       ret = genphy_read_abilities(phydev);
+       if (ret)
+               return ret;
+
+       /* We don't support HDX at MAC layer on mt7988.
+        * So mask phy's HDX capabilities, too.
+        */
+       linkmode_set_bit(ETHTOOL_LINK_MODE_10baseT_Full_BIT,
+                        phydev->supported);
+       linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT,
+                        phydev->supported);
+       linkmode_set_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT,
+                        phydev->supported);
+       linkmode_set_bit(ETHTOOL_LINK_MODE_2500baseT_Full_BIT,
+                        phydev->supported);
+       linkmode_set_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, phydev->supported);
+
+       return 0;
+}
+
+static int mt7988_2p5ge_phy_read_status(struct phy_device *phydev)
+{
+       int ret;
+
+       ret = genphy_update_link(phydev);
+       if (ret)
+               return ret;
+
+       phydev->speed = SPEED_UNKNOWN;
+       phydev->duplex = DUPLEX_UNKNOWN;
+       phydev->pause = 0;
+       phydev->asym_pause = 0;
+
+       if (phydev->autoneg == AUTONEG_ENABLE && phydev->autoneg_complete) {
+               ret = genphy_c45_read_lpa(phydev);
+               if (ret < 0)
+                       return ret;
+
+               /* Read the link partner's 1G advertisement */
+               ret = phy_read(phydev, MII_STAT1000);
+               if (ret < 0)
+                       return ret;
+               mii_stat1000_mod_linkmode_lpa_t(phydev->lp_advertising, ret);
+       } else if (phydev->autoneg == AUTONEG_DISABLE) {
+               linkmode_zero(phydev->lp_advertising);
+       }
+
+       ret = phy_read(phydev, PHY_AUX_CTRL_STATUS);
+       if (ret < 0)
+               return ret;
+
+       switch (FIELD_GET(PHY_AUX_SPEED_MASK, ret)) {
+       case PHY_AUX_SPD_10:
+               phydev->speed = SPEED_10;
+               break;
+       case PHY_AUX_SPD_100:
+               phydev->speed = SPEED_100;
+               break;
+       case PHY_AUX_SPD_1000:
+               phydev->speed = SPEED_1000;
+               break;
+       case PHY_AUX_SPD_2500:
+               phydev->speed = SPEED_2500;
+               break;
+       }
+
+       ret = phy_read_mmd(phydev, MDIO_MMD_VEND1, MTK_PHY_LINK_STATUS_MISC);
+       if (ret < 0)
+               return ret;
+
+       phydev->duplex = (ret & MTK_PHY_FDX_ENABLE) ? DUPLEX_FULL : DUPLEX_HALF;
+       /* FIXME: The current firmware always enables rate adaptation mode. */
+       phydev->rate_matching = RATE_MATCH_PAUSE;
+
+       return 0;
+}
+
+static int mt7988_2p5ge_phy_get_rate_matching(struct phy_device *phydev,
+                                             phy_interface_t iface)
+{
+       return RATE_MATCH_PAUSE;
+}
+
+static struct phy_driver mtk_gephy_driver[] = {
+       {
+               PHY_ID_MATCH_MODEL(0x00339c11),
+               .name           = "MediaTek MT798x 2.5GbE PHY",
+               .probe          = mt7988_2p5ge_phy_probe,
+               .config_init    = mt7988_2p5ge_phy_config_init,
+               .config_aneg    = mt7988_2p5ge_phy_config_aneg,
+               .get_features   = mt7988_2p5ge_phy_get_features,
+               .read_status    = mt7988_2p5ge_phy_read_status,
+               .get_rate_matching      = mt7988_2p5ge_phy_get_rate_matching,
+               .suspend        = genphy_suspend,
+               .resume         = genphy_resume,
+               .read_page      = mtk_2p5ge_phy_read_page,
+               .write_page     = mtk_2p5ge_phy_write_page,
+       },
+};
+
+module_phy_driver(mtk_gephy_driver);
+
+static struct mdio_device_id __maybe_unused mtk_2p5ge_phy_tbl[] = {
+       { PHY_ID_MATCH_VENDOR(0x00339c00) },
+       { }
+};
+
+MODULE_DESCRIPTION("MediaTek 2.5Gb Ethernet PHY driver");
+MODULE_AUTHOR("SkyLake Huang <SkyLake.Huang@mediatek.com>");
+MODULE_LICENSE("GPL");
+
+MODULE_DEVICE_TABLE(mdio, mtk_2p5ge_phy_tbl);
+MODULE_FIRMWARE(MT7988_2P5GE_PMB);
diff --git a/target/linux/mediatek/files-6.6/drivers/pinctrl/mediatek/pinctrl-mt7988.c b/target/linux/mediatek/files-6.6/drivers/pinctrl/mediatek/pinctrl-mt7988.c
new file mode 100644 (file)
index 0000000..9f92911
--- /dev/null
@@ -0,0 +1,1517 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * The MT7988 driver based on Linux generic pinctrl binding.
+ *
+ * Copyright (C) 2020 MediaTek Inc.
+ * Author: Sam Shih <sam.shih@mediatek.com>
+ */
+
+#include "pinctrl-moore.h"
+
+enum MT7988_PINCTRL_REG_PAGE {
+       GPIO_BASE,
+       IOCFG_TR_BASE,
+       IOCFG_BR_BASE,
+       IOCFG_RB_BASE,
+       IOCFG_LB_BASE,
+       IOCFG_TL_BASE,
+};
+
+#define MT7988_PIN(_number, _name) MTK_PIN(_number, _name, 0, _number, DRV_GRP4)
+
+#define PIN_FIELD_BASE(_s_pin, _e_pin, _i_base, _s_addr, _x_addrs, _s_bit,     \
+                      _x_bits)                                                \
+       PIN_FIELD_CALC(_s_pin, _e_pin, _i_base, _s_addr, _x_addrs, _s_bit,     \
+                      _x_bits, 32, 0)
+
+#define PINS_FIELD_BASE(_s_pin, _e_pin, _i_base, _s_addr, _x_addrs, _s_bit,    \
+                       _x_bits)                                               \
+       PIN_FIELD_CALC(_s_pin, _e_pin, _i_base, _s_addr, _x_addrs, _s_bit,     \
+                      _x_bits, 32, 1)
+
+static const struct mtk_pin_field_calc mt7988_pin_mode_range[] = {
+       PIN_FIELD(0, 83, 0x300, 0x10, 0, 4),
+};
+
+static const struct mtk_pin_field_calc mt7988_pin_dir_range[] = {
+       PIN_FIELD(0, 83, 0x0, 0x10, 0, 1),
+};
+
+static const struct mtk_pin_field_calc mt7988_pin_di_range[] = {
+       PIN_FIELD(0, 83, 0x200, 0x10, 0, 1),
+};
+
+static const struct mtk_pin_field_calc mt7988_pin_do_range[] = {
+       PIN_FIELD(0, 83, 0x100, 0x10, 0, 1),
+};
+
+static const struct mtk_pin_field_calc mt7988_pin_ies_range[] = {
+       PIN_FIELD_BASE(0, 0, 5, 0x30, 0x10, 13, 1),
+       PIN_FIELD_BASE(1, 1, 5, 0x30, 0x10, 14, 1),
+       PIN_FIELD_BASE(2, 2, 5, 0x30, 0x10, 11, 1),
+       PIN_FIELD_BASE(3, 3, 5, 0x30, 0x10, 12, 1),
+       PIN_FIELD_BASE(4, 4, 5, 0x30, 0x10, 0, 1),
+       PIN_FIELD_BASE(5, 5, 5, 0x30, 0x10, 9, 1),
+       PIN_FIELD_BASE(6, 6, 5, 0x30, 0x10, 10, 1),
+
+       PIN_FIELD_BASE(7, 7, 4, 0x30, 0x10, 8, 1),
+       PIN_FIELD_BASE(8, 8, 4, 0x30, 0x10, 6, 1),
+       PIN_FIELD_BASE(9, 9, 4, 0x30, 0x10, 5, 1),
+       PIN_FIELD_BASE(10, 10, 4, 0x30, 0x10, 3, 1),
+
+       PIN_FIELD_BASE(11, 11, 1, 0x40, 0x10, 0, 1),
+       PIN_FIELD_BASE(12, 12, 1, 0x40, 0x10, 21, 1),
+       PIN_FIELD_BASE(13, 13, 1, 0x40, 0x10, 1, 1),
+       PIN_FIELD_BASE(14, 14, 1, 0x40, 0x10, 2, 1),
+
+       PIN_FIELD_BASE(15, 15, 5, 0x30, 0x10, 7, 1),
+       PIN_FIELD_BASE(16, 16, 5, 0x30, 0x10, 8, 1),
+       PIN_FIELD_BASE(17, 17, 5, 0x30, 0x10, 3, 1),
+       PIN_FIELD_BASE(18, 18, 5, 0x30, 0x10, 4, 1),
+
+       PIN_FIELD_BASE(19, 19, 4, 0x30, 0x10, 7, 1),
+       PIN_FIELD_BASE(20, 20, 4, 0x30, 0x10, 4, 1),
+
+       PIN_FIELD_BASE(21, 21, 3, 0x50, 0x10, 17, 1),
+       PIN_FIELD_BASE(22, 22, 3, 0x50, 0x10, 23, 1),
+       PIN_FIELD_BASE(23, 23, 3, 0x50, 0x10, 20, 1),
+       PIN_FIELD_BASE(24, 24, 3, 0x50, 0x10, 19, 1),
+       PIN_FIELD_BASE(25, 25, 3, 0x50, 0x10, 21, 1),
+       PIN_FIELD_BASE(26, 26, 3, 0x50, 0x10, 22, 1),
+       PIN_FIELD_BASE(27, 27, 3, 0x50, 0x10, 18, 1),
+       PIN_FIELD_BASE(28, 28, 3, 0x50, 0x10, 25, 1),
+       PIN_FIELD_BASE(29, 29, 3, 0x50, 0x10, 26, 1),
+       PIN_FIELD_BASE(30, 30, 3, 0x50, 0x10, 27, 1),
+       PIN_FIELD_BASE(31, 31, 3, 0x50, 0x10, 24, 1),
+       PIN_FIELD_BASE(32, 32, 3, 0x50, 0x10, 28, 1),
+       PIN_FIELD_BASE(33, 33, 3, 0x60, 0x10, 0, 1),
+       PIN_FIELD_BASE(34, 34, 3, 0x50, 0x10, 31, 1),
+       PIN_FIELD_BASE(35, 35, 3, 0x50, 0x10, 29, 1),
+       PIN_FIELD_BASE(36, 36, 3, 0x50, 0x10, 30, 1),
+       PIN_FIELD_BASE(37, 37, 3, 0x60, 0x10, 1, 1),
+       PIN_FIELD_BASE(38, 38, 3, 0x50, 0x10, 11, 1),
+       PIN_FIELD_BASE(39, 39, 3, 0x50, 0x10, 10, 1),
+       PIN_FIELD_BASE(40, 40, 3, 0x50, 0x10, 0, 1),
+       PIN_FIELD_BASE(41, 41, 3, 0x50, 0x10, 1, 1),
+       PIN_FIELD_BASE(42, 42, 3, 0x50, 0x10, 9, 1),
+       PIN_FIELD_BASE(43, 43, 3, 0x50, 0x10, 8, 1),
+       PIN_FIELD_BASE(44, 44, 3, 0x50, 0x10, 7, 1),
+       PIN_FIELD_BASE(45, 45, 3, 0x50, 0x10, 6, 1),
+       PIN_FIELD_BASE(46, 46, 3, 0x50, 0x10, 5, 1),
+       PIN_FIELD_BASE(47, 47, 3, 0x50, 0x10, 4, 1),
+       PIN_FIELD_BASE(48, 48, 3, 0x50, 0x10, 3, 1),
+       PIN_FIELD_BASE(49, 49, 3, 0x50, 0x10, 2, 1),
+       PIN_FIELD_BASE(50, 50, 3, 0x50, 0x10, 15, 1),
+       PIN_FIELD_BASE(51, 51, 3, 0x50, 0x10, 12, 1),
+       PIN_FIELD_BASE(52, 52, 3, 0x50, 0x10, 13, 1),
+       PIN_FIELD_BASE(53, 53, 3, 0x50, 0x10, 14, 1),
+       PIN_FIELD_BASE(54, 54, 3, 0x50, 0x10, 16, 1),
+
+       PIN_FIELD_BASE(55, 55, 1, 0x40, 0x10, 14, 1),
+       PIN_FIELD_BASE(56, 56, 1, 0x40, 0x10, 15, 1),
+       PIN_FIELD_BASE(57, 57, 1, 0x40, 0x10, 13, 1),
+       PIN_FIELD_BASE(58, 58, 1, 0x40, 0x10, 4, 1),
+       PIN_FIELD_BASE(59, 59, 1, 0x40, 0x10, 5, 1),
+       PIN_FIELD_BASE(60, 60, 1, 0x40, 0x10, 6, 1),
+       PIN_FIELD_BASE(61, 61, 1, 0x40, 0x10, 3, 1),
+       PIN_FIELD_BASE(62, 62, 1, 0x40, 0x10, 7, 1),
+       PIN_FIELD_BASE(63, 63, 1, 0x40, 0x10, 20, 1),
+       PIN_FIELD_BASE(64, 64, 1, 0x40, 0x10, 8, 1),
+       PIN_FIELD_BASE(65, 65, 1, 0x40, 0x10, 9, 1),
+       PIN_FIELD_BASE(66, 66, 1, 0x40, 0x10, 10, 1),
+       PIN_FIELD_BASE(67, 67, 1, 0x40, 0x10, 11, 1),
+       PIN_FIELD_BASE(68, 68, 1, 0x40, 0x10, 12, 1),
+
+       PIN_FIELD_BASE(69, 69, 5, 0x30, 0x10, 1, 1),
+       PIN_FIELD_BASE(70, 70, 5, 0x30, 0x10, 2, 1),
+       PIN_FIELD_BASE(71, 71, 5, 0x30, 0x10, 5, 1),
+       PIN_FIELD_BASE(72, 72, 5, 0x30, 0x10, 6, 1),
+
+       PIN_FIELD_BASE(73, 73, 4, 0x30, 0x10, 10, 1),
+       PIN_FIELD_BASE(74, 74, 4, 0x30, 0x10, 1, 1),
+       PIN_FIELD_BASE(75, 75, 4, 0x30, 0x10, 11, 1),
+       PIN_FIELD_BASE(76, 76, 4, 0x30, 0x10, 9, 1),
+       PIN_FIELD_BASE(77, 77, 4, 0x30, 0x10, 2, 1),
+       PIN_FIELD_BASE(78, 78, 4, 0x30, 0x10, 0, 1),
+       PIN_FIELD_BASE(79, 79, 4, 0x30, 0x10, 12, 1),
+
+       PIN_FIELD_BASE(80, 80, 1, 0x40, 0x10, 18, 1),
+       PIN_FIELD_BASE(81, 81, 1, 0x40, 0x10, 19, 1),
+       PIN_FIELD_BASE(82, 82, 1, 0x40, 0x10, 16, 1),
+       PIN_FIELD_BASE(83, 83, 1, 0x40, 0x10, 17, 1),
+};
+
+static const struct mtk_pin_field_calc mt7988_pin_smt_range[] = {
+       PIN_FIELD_BASE(0, 0, 5, 0xc0, 0x10, 13, 1),
+       PIN_FIELD_BASE(1, 1, 5, 0xc0, 0x10, 14, 1),
+       PIN_FIELD_BASE(2, 2, 5, 0xc0, 0x10, 11, 1),
+       PIN_FIELD_BASE(3, 3, 5, 0xc0, 0x10, 12, 1),
+       PIN_FIELD_BASE(4, 4, 5, 0xc0, 0x10, 0, 1),
+       PIN_FIELD_BASE(5, 5, 5, 0xc0, 0x10, 9, 1),
+       PIN_FIELD_BASE(6, 6, 5, 0xc0, 0x10, 10, 1),
+
+       PIN_FIELD_BASE(7, 7, 4, 0xb0, 0x10, 8, 1),
+       PIN_FIELD_BASE(8, 8, 4, 0xb0, 0x10, 6, 1),
+       PIN_FIELD_BASE(9, 9, 4, 0xb0, 0x10, 5, 1),
+       PIN_FIELD_BASE(10, 10, 4, 0xb0, 0x10, 3, 1),
+
+       PIN_FIELD_BASE(11, 11, 1, 0xe0, 0x10, 0, 1),
+       PIN_FIELD_BASE(12, 12, 1, 0xe0, 0x10, 21, 1),
+       PIN_FIELD_BASE(13, 13, 1, 0xe0, 0x10, 1, 1),
+       PIN_FIELD_BASE(14, 14, 1, 0xe0, 0x10, 2, 1),
+
+       PIN_FIELD_BASE(15, 15, 5, 0xc0, 0x10, 7, 1),
+       PIN_FIELD_BASE(16, 16, 5, 0xc0, 0x10, 8, 1),
+       PIN_FIELD_BASE(17, 17, 5, 0xc0, 0x10, 3, 1),
+       PIN_FIELD_BASE(18, 18, 5, 0xc0, 0x10, 4, 1),
+
+       PIN_FIELD_BASE(19, 19, 4, 0xb0, 0x10, 7, 1),
+       PIN_FIELD_BASE(20, 20, 4, 0xb0, 0x10, 4, 1),
+
+       PIN_FIELD_BASE(21, 21, 3, 0x140, 0x10, 17, 1),
+       PIN_FIELD_BASE(22, 22, 3, 0x140, 0x10, 23, 1),
+       PIN_FIELD_BASE(23, 23, 3, 0x140, 0x10, 20, 1),
+       PIN_FIELD_BASE(24, 24, 3, 0x140, 0x10, 19, 1),
+       PIN_FIELD_BASE(25, 25, 3, 0x140, 0x10, 21, 1),
+       PIN_FIELD_BASE(26, 26, 3, 0x140, 0x10, 22, 1),
+       PIN_FIELD_BASE(27, 27, 3, 0x140, 0x10, 18, 1),
+       PIN_FIELD_BASE(28, 28, 3, 0x140, 0x10, 25, 1),
+       PIN_FIELD_BASE(29, 29, 3, 0x140, 0x10, 26, 1),
+       PIN_FIELD_BASE(30, 30, 3, 0x140, 0x10, 27, 1),
+       PIN_FIELD_BASE(31, 31, 3, 0x140, 0x10, 24, 1),
+       PIN_FIELD_BASE(32, 32, 3, 0x140, 0x10, 28, 1),
+       PIN_FIELD_BASE(33, 33, 3, 0x150, 0x10, 0, 1),
+       PIN_FIELD_BASE(34, 34, 3, 0x140, 0x10, 31, 1),
+       PIN_FIELD_BASE(35, 35, 3, 0x140, 0x10, 29, 1),
+       PIN_FIELD_BASE(36, 36, 3, 0x140, 0x10, 30, 1),
+       PIN_FIELD_BASE(37, 37, 3, 0x150, 0x10, 1, 1),
+       PIN_FIELD_BASE(38, 38, 3, 0x140, 0x10, 11, 1),
+       PIN_FIELD_BASE(39, 39, 3, 0x140, 0x10, 10, 1),
+       PIN_FIELD_BASE(40, 40, 3, 0x140, 0x10, 0, 1),
+       PIN_FIELD_BASE(41, 41, 3, 0x140, 0x10, 1, 1),
+       PIN_FIELD_BASE(42, 42, 3, 0x140, 0x10, 9, 1),
+       PIN_FIELD_BASE(43, 43, 3, 0x140, 0x10, 8, 1),
+       PIN_FIELD_BASE(44, 44, 3, 0x140, 0x10, 7, 1),
+       PIN_FIELD_BASE(45, 45, 3, 0x140, 0x10, 6, 1),
+       PIN_FIELD_BASE(46, 46, 3, 0x140, 0x10, 5, 1),
+       PIN_FIELD_BASE(47, 47, 3, 0x140, 0x10, 4, 1),
+       PIN_FIELD_BASE(48, 48, 3, 0x140, 0x10, 3, 1),
+       PIN_FIELD_BASE(49, 49, 3, 0x140, 0x10, 2, 1),
+       PIN_FIELD_BASE(50, 50, 3, 0x140, 0x10, 15, 1),
+       PIN_FIELD_BASE(51, 51, 3, 0x140, 0x10, 12, 1),
+       PIN_FIELD_BASE(52, 52, 3, 0x140, 0x10, 13, 1),
+       PIN_FIELD_BASE(53, 53, 3, 0x140, 0x10, 14, 1),
+       PIN_FIELD_BASE(54, 54, 3, 0x140, 0x10, 16, 1),
+
+       PIN_FIELD_BASE(55, 55, 1, 0xe0, 0x10, 14, 1),
+       PIN_FIELD_BASE(56, 56, 1, 0xe0, 0x10, 15, 1),
+       PIN_FIELD_BASE(57, 57, 1, 0xe0, 0x10, 13, 1),
+       PIN_FIELD_BASE(58, 58, 1, 0xe0, 0x10, 4, 1),
+       PIN_FIELD_BASE(59, 59, 1, 0xe0, 0x10, 5, 1),
+       PIN_FIELD_BASE(60, 60, 1, 0xe0, 0x10, 6, 1),
+       PIN_FIELD_BASE(61, 61, 1, 0xe0, 0x10, 3, 1),
+       PIN_FIELD_BASE(62, 62, 1, 0xe0, 0x10, 7, 1),
+       PIN_FIELD_BASE(63, 63, 1, 0xe0, 0x10, 20, 1),
+       PIN_FIELD_BASE(64, 64, 1, 0xe0, 0x10, 8, 1),
+       PIN_FIELD_BASE(65, 65, 1, 0xe0, 0x10, 9, 1),
+       PIN_FIELD_BASE(66, 66, 1, 0xe0, 0x10, 10, 1),
+       PIN_FIELD_BASE(67, 67, 1, 0xe0, 0x10, 11, 1),
+       PIN_FIELD_BASE(68, 68, 1, 0xe0, 0x10, 12, 1),
+
+       PIN_FIELD_BASE(69, 69, 5, 0xc0, 0x10, 1, 1),
+       PIN_FIELD_BASE(70, 70, 5, 0xc0, 0x10, 2, 1),
+       PIN_FIELD_BASE(71, 71, 5, 0xc0, 0x10, 5, 1),
+       PIN_FIELD_BASE(72, 72, 5, 0xc0, 0x10, 6, 1),
+
+       PIN_FIELD_BASE(73, 73, 4, 0xb0, 0x10, 10, 1),
+       PIN_FIELD_BASE(74, 74, 4, 0xb0, 0x10, 1, 1),
+       PIN_FIELD_BASE(75, 75, 4, 0xb0, 0x10, 11, 1),
+       PIN_FIELD_BASE(76, 76, 4, 0xb0, 0x10, 9, 1),
+       PIN_FIELD_BASE(77, 77, 4, 0xb0, 0x10, 2, 1),
+       PIN_FIELD_BASE(78, 78, 4, 0xb0, 0x10, 0, 1),
+       PIN_FIELD_BASE(79, 79, 4, 0xb0, 0x10, 12, 1),
+
+       PIN_FIELD_BASE(80, 80, 1, 0xe0, 0x10, 18, 1),
+       PIN_FIELD_BASE(81, 81, 1, 0xe0, 0x10, 19, 1),
+       PIN_FIELD_BASE(82, 82, 1, 0xe0, 0x10, 16, 1),
+       PIN_FIELD_BASE(83, 83, 1, 0xe0, 0x10, 17, 1),
+};
+
+static const struct mtk_pin_field_calc mt7988_pin_pu_range[] = {
+       PIN_FIELD_BASE(7, 7, 4, 0x60, 0x10, 5, 1),
+       PIN_FIELD_BASE(8, 8, 4, 0x60, 0x10, 4, 1),
+       PIN_FIELD_BASE(9, 9, 4, 0x60, 0x10, 3, 1),
+       PIN_FIELD_BASE(10, 10, 4, 0x60, 0x10, 2, 1),
+
+       PIN_FIELD_BASE(13, 13, 1, 0x70, 0x10, 0, 1),
+       PIN_FIELD_BASE(14, 14, 1, 0x70, 0x10, 1, 1),
+       PIN_FIELD_BASE(63, 63, 1, 0x70, 0x10, 2, 1),
+
+       PIN_FIELD_BASE(75, 75, 4, 0x60, 0x10, 7, 1),
+       PIN_FIELD_BASE(76, 76, 4, 0x60, 0x10, 6, 1),
+       PIN_FIELD_BASE(77, 77, 4, 0x60, 0x10, 1, 1),
+       PIN_FIELD_BASE(78, 78, 4, 0x60, 0x10, 0, 1),
+       PIN_FIELD_BASE(79, 79, 4, 0x60, 0x10, 8, 1),
+};
+
+static const struct mtk_pin_field_calc mt7988_pin_pd_range[] = {
+       PIN_FIELD_BASE(7, 7, 4, 0x40, 0x10, 5, 1),
+       PIN_FIELD_BASE(8, 8, 4, 0x40, 0x10, 4, 1),
+       PIN_FIELD_BASE(9, 9, 4, 0x40, 0x10, 3, 1),
+       PIN_FIELD_BASE(10, 10, 4, 0x40, 0x10, 2, 1),
+
+       PIN_FIELD_BASE(13, 13, 1, 0x50, 0x10, 0, 1),
+       PIN_FIELD_BASE(14, 14, 1, 0x50, 0x10, 1, 1),
+
+       PIN_FIELD_BASE(15, 15, 5, 0x40, 0x10, 4, 1),
+       PIN_FIELD_BASE(16, 16, 5, 0x40, 0x10, 5, 1),
+       PIN_FIELD_BASE(17, 17, 5, 0x40, 0x10, 0, 1),
+       PIN_FIELD_BASE(18, 18, 5, 0x40, 0x10, 1, 1),
+
+       PIN_FIELD_BASE(63, 63, 1, 0x50, 0x10, 2, 1),
+       PIN_FIELD_BASE(71, 71, 5, 0x40, 0x10, 2, 1),
+       PIN_FIELD_BASE(72, 72, 5, 0x40, 0x10, 3, 1),
+
+       PIN_FIELD_BASE(75, 75, 4, 0x40, 0x10, 7, 1),
+       PIN_FIELD_BASE(76, 76, 4, 0x40, 0x10, 6, 1),
+       PIN_FIELD_BASE(77, 77, 4, 0x40, 0x10, 1, 1),
+       PIN_FIELD_BASE(78, 78, 4, 0x40, 0x10, 0, 1),
+       PIN_FIELD_BASE(79, 79, 4, 0x40, 0x10, 8, 1),
+};
+
+static const struct mtk_pin_field_calc mt7988_pin_drv_range[] = {
+       PIN_FIELD_BASE(0, 0, 5, 0x00, 0x10, 21, 3),
+       PIN_FIELD_BASE(1, 1, 5, 0x00, 0x10, 24, 3),
+       PIN_FIELD_BASE(2, 2, 5, 0x00, 0x10, 15, 3),
+       PIN_FIELD_BASE(3, 3, 5, 0x00, 0x10, 18, 3),
+       PIN_FIELD_BASE(4, 4, 5, 0x00, 0x10, 0, 3),
+       PIN_FIELD_BASE(5, 5, 5, 0x00, 0x10, 9, 3),
+       PIN_FIELD_BASE(6, 6, 5, 0x00, 0x10, 12, 3),
+
+       PIN_FIELD_BASE(7, 7, 4, 0x00, 0x10, 24, 3),
+       PIN_FIELD_BASE(8, 8, 4, 0x00, 0x10, 28, 3),
+       PIN_FIELD_BASE(9, 9, 4, 0x00, 0x10, 15, 3),
+       PIN_FIELD_BASE(10, 10, 4, 0x00, 0x10, 9, 3),
+
+       PIN_FIELD_BASE(11, 11, 1, 0x00, 0x10, 0, 3),
+       PIN_FIELD_BASE(12, 12, 1, 0x20, 0x10, 3, 3),
+       PIN_FIELD_BASE(13, 13, 1, 0x00, 0x10, 3, 3),
+       PIN_FIELD_BASE(14, 14, 1, 0x00, 0x10, 6, 3),
+
+       PIN_FIELD_BASE(19, 19, 4, 0x00, 0x10, 21, 3),
+       PIN_FIELD_BASE(20, 20, 4, 0x00, 0x10, 12, 3),
+
+       PIN_FIELD_BASE(21, 21, 3, 0x10, 0x10, 21, 3),
+       PIN_FIELD_BASE(22, 22, 3, 0x20, 0x10, 9, 3),
+       PIN_FIELD_BASE(23, 23, 3, 0x20, 0x10, 0, 3),
+       PIN_FIELD_BASE(24, 24, 3, 0x10, 0x10, 27, 3),
+       PIN_FIELD_BASE(25, 25, 3, 0x20, 0x10, 3, 3),
+       PIN_FIELD_BASE(26, 26, 3, 0x20, 0x10, 6, 3),
+       PIN_FIELD_BASE(27, 27, 3, 0x10, 0x10, 24, 3),
+       PIN_FIELD_BASE(28, 28, 3, 0x20, 0x10, 15, 3),
+       PIN_FIELD_BASE(29, 29, 3, 0x20, 0x10, 18, 3),
+       PIN_FIELD_BASE(30, 30, 3, 0x20, 0x10, 21, 3),
+       PIN_FIELD_BASE(31, 31, 3, 0x20, 0x10, 12, 3),
+       PIN_FIELD_BASE(32, 32, 3, 0x20, 0x10, 24, 3),
+       PIN_FIELD_BASE(33, 33, 3, 0x30, 0x10, 6, 3),
+       PIN_FIELD_BASE(34, 34, 3, 0x30, 0x10, 3, 3),
+       PIN_FIELD_BASE(35, 35, 3, 0x20, 0x10, 27, 3),
+       PIN_FIELD_BASE(36, 36, 3, 0x30, 0x10, 0, 3),
+       PIN_FIELD_BASE(37, 37, 3, 0x30, 0x10, 9, 3),
+       PIN_FIELD_BASE(38, 38, 3, 0x10, 0x10, 3, 3),
+       PIN_FIELD_BASE(39, 39, 3, 0x10, 0x10, 0, 3),
+       PIN_FIELD_BASE(40, 40, 3, 0x00, 0x10, 0, 3),
+       PIN_FIELD_BASE(41, 41, 3, 0x00, 0x10, 3, 3),
+       PIN_FIELD_BASE(42, 42, 3, 0x00, 0x10, 27, 3),
+       PIN_FIELD_BASE(43, 43, 3, 0x00, 0x10, 24, 3),
+       PIN_FIELD_BASE(44, 44, 3, 0x00, 0x10, 21, 3),
+       PIN_FIELD_BASE(45, 45, 3, 0x00, 0x10, 18, 3),
+       PIN_FIELD_BASE(46, 46, 3, 0x00, 0x10, 15, 3),
+       PIN_FIELD_BASE(47, 47, 3, 0x00, 0x10, 12, 3),
+       PIN_FIELD_BASE(48, 48, 3, 0x00, 0x10, 9, 3),
+       PIN_FIELD_BASE(49, 49, 3, 0x00, 0x10, 6, 3),
+       PIN_FIELD_BASE(50, 50, 3, 0x10, 0x10, 15, 3),
+       PIN_FIELD_BASE(51, 51, 3, 0x10, 0x10, 6, 3),
+       PIN_FIELD_BASE(52, 52, 3, 0x10, 0x10, 9, 3),
+       PIN_FIELD_BASE(53, 53, 3, 0x10, 0x10, 12, 3),
+       PIN_FIELD_BASE(54, 54, 3, 0x10, 0x10, 18, 3),
+
+       PIN_FIELD_BASE(55, 55, 1, 0x10, 0x10, 12, 3),
+       PIN_FIELD_BASE(56, 56, 1, 0x10, 0x10, 15, 3),
+       PIN_FIELD_BASE(57, 57, 1, 0x10, 0x10, 9, 3),
+       PIN_FIELD_BASE(58, 58, 1, 0x00, 0x10, 12, 3),
+       PIN_FIELD_BASE(59, 59, 1, 0x00, 0x10, 15, 3),
+       PIN_FIELD_BASE(60, 60, 1, 0x00, 0x10, 18, 3),
+       PIN_FIELD_BASE(61, 61, 1, 0x00, 0x10, 9, 3),
+       PIN_FIELD_BASE(62, 62, 1, 0x00, 0x10, 21, 3),
+       PIN_FIELD_BASE(63, 63, 1, 0x20, 0x10, 0, 3),
+       PIN_FIELD_BASE(64, 64, 1, 0x00, 0x10, 24, 3),
+       PIN_FIELD_BASE(65, 65, 1, 0x00, 0x10, 27, 3),
+       PIN_FIELD_BASE(66, 66, 1, 0x10, 0x10, 0, 3),
+       PIN_FIELD_BASE(67, 67, 1, 0x10, 0x10, 3, 3),
+       PIN_FIELD_BASE(68, 68, 1, 0x10, 0x10, 6, 3),
+
+       PIN_FIELD_BASE(69, 69, 5, 0x00, 0x10, 3, 3),
+       PIN_FIELD_BASE(70, 70, 5, 0x00, 0x10, 6, 3),
+
+       PIN_FIELD_BASE(73, 73, 4, 0x10, 0x10, 0, 3),
+       PIN_FIELD_BASE(74, 74, 4, 0x00, 0x10, 3, 3),
+       PIN_FIELD_BASE(75, 75, 4, 0x10, 0x10, 3, 3),
+       PIN_FIELD_BASE(76, 76, 4, 0x00, 0x10, 27, 3),
+       PIN_FIELD_BASE(77, 77, 4, 0x00, 0x10, 6, 3),
+       PIN_FIELD_BASE(78, 78, 4, 0x00, 0x10, 0, 3),
+       PIN_FIELD_BASE(79, 79, 4, 0x10, 0x10, 6, 3),
+
+       PIN_FIELD_BASE(80, 80, 1, 0x10, 0x10, 24, 3),
+       PIN_FIELD_BASE(81, 81, 1, 0x10, 0x10, 27, 3),
+       PIN_FIELD_BASE(82, 82, 1, 0x10, 0x10, 18, 3),
+       PIN_FIELD_BASE(83, 83, 1, 0x10, 0x10, 21, 3),
+};
+
+static const struct mtk_pin_field_calc mt7988_pin_pupd_range[] = {
+       PIN_FIELD_BASE(0, 0, 5, 0x50, 0x10, 7, 1),
+       PIN_FIELD_BASE(1, 1, 5, 0x50, 0x10, 8, 1),
+       PIN_FIELD_BASE(2, 2, 5, 0x50, 0x10, 5, 1),
+       PIN_FIELD_BASE(3, 3, 5, 0x50, 0x10, 6, 1),
+       PIN_FIELD_BASE(4, 4, 5, 0x50, 0x10, 0, 1),
+       PIN_FIELD_BASE(5, 5, 5, 0x50, 0x10, 3, 1),
+       PIN_FIELD_BASE(6, 6, 5, 0x50, 0x10, 4, 1),
+
+       PIN_FIELD_BASE(11, 11, 1, 0x60, 0x10, 0, 1),
+       PIN_FIELD_BASE(12, 12, 1, 0x60, 0x10, 18, 1),
+
+       PIN_FIELD_BASE(19, 19, 4, 0x50, 0x10, 2, 1),
+       PIN_FIELD_BASE(20, 20, 4, 0x50, 0x10, 1, 1),
+
+       PIN_FIELD_BASE(21, 21, 3, 0x70, 0x10, 17, 1),
+       PIN_FIELD_BASE(22, 22, 3, 0x70, 0x10, 23, 1),
+       PIN_FIELD_BASE(23, 23, 3, 0x70, 0x10, 20, 1),
+       PIN_FIELD_BASE(24, 24, 3, 0x70, 0x10, 19, 1),
+       PIN_FIELD_BASE(25, 25, 3, 0x70, 0x10, 21, 1),
+       PIN_FIELD_BASE(26, 26, 3, 0x70, 0x10, 22, 1),
+       PIN_FIELD_BASE(27, 27, 3, 0x70, 0x10, 18, 1),
+       PIN_FIELD_BASE(28, 28, 3, 0x70, 0x10, 25, 1),
+       PIN_FIELD_BASE(29, 29, 3, 0x70, 0x10, 26, 1),
+       PIN_FIELD_BASE(30, 30, 3, 0x70, 0x10, 27, 1),
+       PIN_FIELD_BASE(31, 31, 3, 0x70, 0x10, 24, 1),
+       PIN_FIELD_BASE(32, 32, 3, 0x70, 0x10, 28, 1),
+       PIN_FIELD_BASE(33, 33, 3, 0x80, 0x10, 0, 1),
+       PIN_FIELD_BASE(34, 34, 3, 0x70, 0x10, 31, 1),
+       PIN_FIELD_BASE(35, 35, 3, 0x70, 0x10, 29, 1),
+       PIN_FIELD_BASE(36, 36, 3, 0x70, 0x10, 30, 1),
+       PIN_FIELD_BASE(37, 37, 3, 0x80, 0x10, 1, 1),
+       PIN_FIELD_BASE(38, 38, 3, 0x70, 0x10, 11, 1),
+       PIN_FIELD_BASE(39, 39, 3, 0x70, 0x10, 10, 1),
+       PIN_FIELD_BASE(40, 40, 3, 0x70, 0x10, 0, 1),
+       PIN_FIELD_BASE(41, 41, 3, 0x70, 0x10, 1, 1),
+       PIN_FIELD_BASE(42, 42, 3, 0x70, 0x10, 9, 1),
+       PIN_FIELD_BASE(43, 43, 3, 0x70, 0x10, 8, 1),
+       PIN_FIELD_BASE(44, 44, 3, 0x70, 0x10, 7, 1),
+       PIN_FIELD_BASE(45, 45, 3, 0x70, 0x10, 6, 1),
+       PIN_FIELD_BASE(46, 46, 3, 0x70, 0x10, 5, 1),
+       PIN_FIELD_BASE(47, 47, 3, 0x70, 0x10, 4, 1),
+       PIN_FIELD_BASE(48, 48, 3, 0x70, 0x10, 3, 1),
+       PIN_FIELD_BASE(49, 49, 3, 0x70, 0x10, 2, 1),
+       PIN_FIELD_BASE(50, 50, 3, 0x70, 0x10, 15, 1),
+       PIN_FIELD_BASE(51, 51, 3, 0x70, 0x10, 12, 1),
+       PIN_FIELD_BASE(52, 52, 3, 0x70, 0x10, 13, 1),
+       PIN_FIELD_BASE(53, 53, 3, 0x70, 0x10, 14, 1),
+       PIN_FIELD_BASE(54, 54, 3, 0x70, 0x10, 16, 1),
+
+       PIN_FIELD_BASE(55, 55, 1, 0x60, 0x10, 12, 1),
+       PIN_FIELD_BASE(56, 56, 1, 0x60, 0x10, 13, 1),
+       PIN_FIELD_BASE(57, 57, 1, 0x60, 0x10, 11, 1),
+       PIN_FIELD_BASE(58, 58, 1, 0x60, 0x10, 2, 1),
+       PIN_FIELD_BASE(59, 59, 1, 0x60, 0x10, 3, 1),
+       PIN_FIELD_BASE(60, 60, 1, 0x60, 0x10, 4, 1),
+       PIN_FIELD_BASE(61, 61, 1, 0x60, 0x10, 1, 1),
+       PIN_FIELD_BASE(62, 62, 1, 0x60, 0x10, 5, 1),
+       PIN_FIELD_BASE(64, 64, 1, 0x60, 0x10, 6, 1),
+       PIN_FIELD_BASE(65, 65, 1, 0x60, 0x10, 7, 1),
+       PIN_FIELD_BASE(66, 66, 1, 0x60, 0x10, 8, 1),
+       PIN_FIELD_BASE(67, 67, 1, 0x60, 0x10, 9, 1),
+       PIN_FIELD_BASE(68, 68, 1, 0x60, 0x10, 10, 1),
+
+       PIN_FIELD_BASE(69, 69, 5, 0x50, 0x10, 1, 1),
+       PIN_FIELD_BASE(70, 70, 5, 0x50, 0x10, 2, 1),
+
+       PIN_FIELD_BASE(73, 73, 4, 0x50, 0x10, 3, 1),
+       PIN_FIELD_BASE(74, 74, 4, 0x50, 0x10, 0, 1),
+
+       PIN_FIELD_BASE(80, 80, 1, 0x60, 0x10, 16, 1),
+       PIN_FIELD_BASE(81, 81, 1, 0x60, 0x10, 17, 1),
+       PIN_FIELD_BASE(82, 82, 1, 0x60, 0x10, 14, 1),
+       PIN_FIELD_BASE(83, 83, 1, 0x60, 0x10, 15, 1),
+};
+
+static const struct mtk_pin_field_calc mt7988_pin_r0_range[] = {
+       PIN_FIELD_BASE(0, 0, 5, 0x60, 0x10, 7, 1),
+       PIN_FIELD_BASE(1, 1, 5, 0x60, 0x10, 8, 1),
+       PIN_FIELD_BASE(2, 2, 5, 0x60, 0x10, 5, 1),
+       PIN_FIELD_BASE(3, 3, 5, 0x60, 0x10, 6, 1),
+       PIN_FIELD_BASE(4, 4, 5, 0x60, 0x10, 0, 1),
+       PIN_FIELD_BASE(5, 5, 5, 0x60, 0x10, 3, 1),
+       PIN_FIELD_BASE(6, 6, 5, 0x60, 0x10, 4, 1),
+
+       PIN_FIELD_BASE(11, 11, 1, 0x80, 0x10, 0, 1),
+       PIN_FIELD_BASE(12, 12, 1, 0x80, 0x10, 18, 1),
+
+       PIN_FIELD_BASE(19, 19, 4, 0x70, 0x10, 2, 1),
+       PIN_FIELD_BASE(20, 20, 4, 0x70, 0x10, 1, 1),
+
+       PIN_FIELD_BASE(21, 21, 3, 0x90, 0x10, 17, 1),
+       PIN_FIELD_BASE(22, 22, 3, 0x90, 0x10, 23, 1),
+       PIN_FIELD_BASE(23, 23, 3, 0x90, 0x10, 20, 1),
+       PIN_FIELD_BASE(24, 24, 3, 0x90, 0x10, 19, 1),
+       PIN_FIELD_BASE(25, 25, 3, 0x90, 0x10, 21, 1),
+       PIN_FIELD_BASE(26, 26, 3, 0x90, 0x10, 22, 1),
+       PIN_FIELD_BASE(27, 27, 3, 0x90, 0x10, 18, 1),
+       PIN_FIELD_BASE(28, 28, 3, 0x90, 0x10, 25, 1),
+       PIN_FIELD_BASE(29, 29, 3, 0x90, 0x10, 26, 1),
+       PIN_FIELD_BASE(30, 30, 3, 0x90, 0x10, 27, 1),
+       PIN_FIELD_BASE(31, 31, 3, 0x90, 0x10, 24, 1),
+       PIN_FIELD_BASE(32, 32, 3, 0x90, 0x10, 28, 1),
+       PIN_FIELD_BASE(33, 33, 3, 0xa0, 0x10, 0, 1),
+       PIN_FIELD_BASE(34, 34, 3, 0x90, 0x10, 31, 1),
+       PIN_FIELD_BASE(35, 35, 3, 0x90, 0x10, 29, 1),
+       PIN_FIELD_BASE(36, 36, 3, 0x90, 0x10, 30, 1),
+       PIN_FIELD_BASE(37, 37, 3, 0xa0, 0x10, 1, 1),
+       PIN_FIELD_BASE(38, 38, 3, 0x90, 0x10, 11, 1),
+       PIN_FIELD_BASE(39, 39, 3, 0x90, 0x10, 10, 1),
+       PIN_FIELD_BASE(40, 40, 3, 0x90, 0x10, 0, 1),
+       PIN_FIELD_BASE(41, 41, 3, 0x90, 0x10, 1, 1),
+       PIN_FIELD_BASE(42, 42, 3, 0x90, 0x10, 9, 1),
+       PIN_FIELD_BASE(43, 43, 3, 0x90, 0x10, 8, 1),
+       PIN_FIELD_BASE(44, 44, 3, 0x90, 0x10, 7, 1),
+       PIN_FIELD_BASE(45, 45, 3, 0x90, 0x10, 6, 1),
+       PIN_FIELD_BASE(46, 46, 3, 0x90, 0x10, 5, 1),
+       PIN_FIELD_BASE(47, 47, 3, 0x90, 0x10, 4, 1),
+       PIN_FIELD_BASE(48, 48, 3, 0x90, 0x10, 3, 1),
+       PIN_FIELD_BASE(49, 49, 3, 0x90, 0x10, 2, 1),
+       PIN_FIELD_BASE(50, 50, 3, 0x90, 0x10, 15, 1),
+       PIN_FIELD_BASE(51, 51, 3, 0x90, 0x10, 12, 1),
+       PIN_FIELD_BASE(52, 52, 3, 0x90, 0x10, 13, 1),
+       PIN_FIELD_BASE(53, 53, 3, 0x90, 0x10, 14, 1),
+       PIN_FIELD_BASE(54, 54, 3, 0x90, 0x10, 16, 1),
+
+       PIN_FIELD_BASE(55, 55, 1, 0x80, 0x10, 12, 1),
+       PIN_FIELD_BASE(56, 56, 1, 0x80, 0x10, 13, 1),
+       PIN_FIELD_BASE(57, 57, 1, 0x80, 0x10, 11, 1),
+       PIN_FIELD_BASE(58, 58, 1, 0x80, 0x10, 2, 1),
+       PIN_FIELD_BASE(59, 59, 1, 0x80, 0x10, 3, 1),
+       PIN_FIELD_BASE(60, 60, 1, 0x80, 0x10, 4, 1),
+       PIN_FIELD_BASE(61, 61, 1, 0x80, 0x10, 1, 1),
+       PIN_FIELD_BASE(62, 62, 1, 0x80, 0x10, 5, 1),
+       PIN_FIELD_BASE(64, 64, 1, 0x80, 0x10, 6, 1),
+       PIN_FIELD_BASE(65, 65, 1, 0x80, 0x10, 7, 1),
+       PIN_FIELD_BASE(66, 66, 1, 0x80, 0x10, 8, 1),
+       PIN_FIELD_BASE(67, 67, 1, 0x80, 0x10, 9, 1),
+       PIN_FIELD_BASE(68, 68, 1, 0x80, 0x10, 10, 1),
+
+       PIN_FIELD_BASE(69, 69, 5, 0x60, 0x10, 1, 1),
+       PIN_FIELD_BASE(70, 70, 5, 0x60, 0x10, 2, 1),
+
+       PIN_FIELD_BASE(73, 73, 4, 0x70, 0x10, 3, 1),
+       PIN_FIELD_BASE(74, 74, 4, 0x70, 0x10, 0, 1),
+
+       PIN_FIELD_BASE(80, 80, 1, 0x80, 0x10, 16, 1),
+       PIN_FIELD_BASE(81, 81, 1, 0x80, 0x10, 17, 1),
+       PIN_FIELD_BASE(82, 82, 1, 0x80, 0x10, 14, 1),
+       PIN_FIELD_BASE(83, 83, 1, 0x80, 0x10, 15, 1),
+};
+
+static const struct mtk_pin_field_calc mt7988_pin_r1_range[] = {
+       PIN_FIELD_BASE(0, 0, 5, 0x70, 0x10, 7, 1),
+       PIN_FIELD_BASE(1, 1, 5, 0x70, 0x10, 8, 1),
+       PIN_FIELD_BASE(2, 2, 5, 0x70, 0x10, 5, 1),
+       PIN_FIELD_BASE(3, 3, 5, 0x70, 0x10, 6, 1),
+       PIN_FIELD_BASE(4, 4, 5, 0x70, 0x10, 0, 1),
+       PIN_FIELD_BASE(5, 5, 5, 0x70, 0x10, 3, 1),
+       PIN_FIELD_BASE(6, 6, 5, 0x70, 0x10, 4, 1),
+
+       PIN_FIELD_BASE(11, 11, 1, 0x90, 0x10, 0, 1),
+       PIN_FIELD_BASE(12, 12, 1, 0x90, 0x10, 18, 1),
+
+       PIN_FIELD_BASE(19, 19, 4, 0x80, 0x10, 2, 1),
+       PIN_FIELD_BASE(20, 20, 4, 0x80, 0x10, 1, 1),
+
+       PIN_FIELD_BASE(21, 21, 3, 0xb0, 0x10, 17, 1),
+       PIN_FIELD_BASE(22, 22, 3, 0xb0, 0x10, 23, 1),
+       PIN_FIELD_BASE(23, 23, 3, 0xb0, 0x10, 20, 1),
+       PIN_FIELD_BASE(24, 24, 3, 0xb0, 0x10, 19, 1),
+       PIN_FIELD_BASE(25, 25, 3, 0xb0, 0x10, 21, 1),
+       PIN_FIELD_BASE(26, 26, 3, 0xb0, 0x10, 22, 1),
+       PIN_FIELD_BASE(27, 27, 3, 0xb0, 0x10, 18, 1),
+       PIN_FIELD_BASE(28, 28, 3, 0xb0, 0x10, 25, 1),
+       PIN_FIELD_BASE(29, 29, 3, 0xb0, 0x10, 26, 1),
+       PIN_FIELD_BASE(30, 30, 3, 0xb0, 0x10, 27, 1),
+       PIN_FIELD_BASE(31, 31, 3, 0xb0, 0x10, 24, 1),
+       PIN_FIELD_BASE(32, 32, 3, 0xb0, 0x10, 28, 1),
+       PIN_FIELD_BASE(33, 33, 3, 0xc0, 0x10, 0, 1),
+       PIN_FIELD_BASE(34, 34, 3, 0xb0, 0x10, 31, 1),
+       PIN_FIELD_BASE(35, 35, 3, 0xb0, 0x10, 29, 1),
+       PIN_FIELD_BASE(36, 36, 3, 0xb0, 0x10, 30, 1),
+       PIN_FIELD_BASE(37, 37, 3, 0xc0, 0x10, 1, 1),
+       PIN_FIELD_BASE(38, 38, 3, 0xb0, 0x10, 11, 1),
+       PIN_FIELD_BASE(39, 39, 3, 0xb0, 0x10, 10, 1),
+       PIN_FIELD_BASE(40, 40, 3, 0xb0, 0x10, 0, 1),
+       PIN_FIELD_BASE(41, 41, 3, 0xb0, 0x10, 1, 1),
+       PIN_FIELD_BASE(42, 42, 3, 0xb0, 0x10, 9, 1),
+       PIN_FIELD_BASE(43, 43, 3, 0xb0, 0x10, 8, 1),
+       PIN_FIELD_BASE(44, 44, 3, 0xb0, 0x10, 7, 1),
+       PIN_FIELD_BASE(45, 45, 3, 0xb0, 0x10, 6, 1),
+       PIN_FIELD_BASE(46, 46, 3, 0xb0, 0x10, 5, 1),
+       PIN_FIELD_BASE(47, 47, 3, 0xb0, 0x10, 4, 1),
+       PIN_FIELD_BASE(48, 48, 3, 0xb0, 0x10, 3, 1),
+       PIN_FIELD_BASE(49, 49, 3, 0xb0, 0x10, 2, 1),
+       PIN_FIELD_BASE(50, 50, 3, 0xb0, 0x10, 15, 1),
+       PIN_FIELD_BASE(51, 51, 3, 0xb0, 0x10, 12, 1),
+       PIN_FIELD_BASE(52, 52, 3, 0xb0, 0x10, 13, 1),
+       PIN_FIELD_BASE(53, 53, 3, 0xb0, 0x10, 14, 1),
+       PIN_FIELD_BASE(54, 54, 3, 0xb0, 0x10, 16, 1),
+
+       PIN_FIELD_BASE(55, 55, 1, 0x90, 0x10, 12, 1),
+       PIN_FIELD_BASE(56, 56, 1, 0x90, 0x10, 13, 1),
+       PIN_FIELD_BASE(57, 57, 1, 0x90, 0x10, 11, 1),
+       PIN_FIELD_BASE(58, 58, 1, 0x90, 0x10, 2, 1),
+       PIN_FIELD_BASE(59, 59, 1, 0x90, 0x10, 3, 1),
+       PIN_FIELD_BASE(60, 60, 1, 0x90, 0x10, 4, 1),
+       PIN_FIELD_BASE(61, 61, 1, 0x90, 0x10, 1, 1),
+       PIN_FIELD_BASE(62, 62, 1, 0x90, 0x10, 5, 1),
+       PIN_FIELD_BASE(64, 64, 1, 0x90, 0x10, 6, 1),
+       PIN_FIELD_BASE(65, 65, 1, 0x90, 0x10, 7, 1),
+       PIN_FIELD_BASE(66, 66, 1, 0x90, 0x10, 8, 1),
+       PIN_FIELD_BASE(67, 67, 1, 0x90, 0x10, 9, 1),
+       PIN_FIELD_BASE(68, 68, 1, 0x90, 0x10, 10, 1),
+
+       PIN_FIELD_BASE(69, 69, 5, 0x70, 0x10, 1, 1),
+       PIN_FIELD_BASE(70, 70, 5, 0x70, 0x10, 2, 1),
+
+       PIN_FIELD_BASE(73, 73, 4, 0x80, 0x10, 3, 1),
+       PIN_FIELD_BASE(74, 74, 4, 0x80, 0x10, 0, 1),
+
+       PIN_FIELD_BASE(80, 80, 1, 0x90, 0x10, 16, 1),
+       PIN_FIELD_BASE(81, 81, 1, 0x90, 0x10, 17, 1),
+       PIN_FIELD_BASE(82, 82, 1, 0x90, 0x10, 14, 1),
+       PIN_FIELD_BASE(83, 83, 1, 0x90, 0x10, 15, 1),
+};
+
+static const unsigned int mt7988_pull_type[] = {
+       MTK_PULL_PUPD_R1R0_TYPE,/*0*/ MTK_PULL_PUPD_R1R0_TYPE,/*1*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*2*/ MTK_PULL_PUPD_R1R0_TYPE,/*3*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*4*/ MTK_PULL_PUPD_R1R0_TYPE,/*5*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*6*/ MTK_PULL_PU_PD_TYPE,    /*7*/
+       MTK_PULL_PU_PD_TYPE,    /*8*/ MTK_PULL_PU_PD_TYPE,    /*9*/
+       MTK_PULL_PU_PD_TYPE,    /*10*/ MTK_PULL_PUPD_R1R0_TYPE,/*11*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*12*/ MTK_PULL_PU_PD_TYPE,    /*13*/
+       MTK_PULL_PU_PD_TYPE,    /*14*/ MTK_PULL_PD_TYPE,       /*15*/
+       MTK_PULL_PD_TYPE,       /*16*/ MTK_PULL_PD_TYPE,       /*17*/
+       MTK_PULL_PD_TYPE,       /*18*/ MTK_PULL_PUPD_R1R0_TYPE,/*19*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*20*/ MTK_PULL_PUPD_R1R0_TYPE,/*21*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*22*/ MTK_PULL_PUPD_R1R0_TYPE,/*23*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*24*/ MTK_PULL_PUPD_R1R0_TYPE,/*25*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*26*/ MTK_PULL_PUPD_R1R0_TYPE,/*27*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*28*/ MTK_PULL_PUPD_R1R0_TYPE,/*29*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*30*/ MTK_PULL_PUPD_R1R0_TYPE,/*31*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*32*/ MTK_PULL_PUPD_R1R0_TYPE,/*33*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*34*/ MTK_PULL_PUPD_R1R0_TYPE,/*35*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*36*/ MTK_PULL_PUPD_R1R0_TYPE,/*37*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*38*/ MTK_PULL_PUPD_R1R0_TYPE,/*39*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*40*/ MTK_PULL_PUPD_R1R0_TYPE,/*41*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*42*/ MTK_PULL_PUPD_R1R0_TYPE,/*43*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*44*/ MTK_PULL_PUPD_R1R0_TYPE,/*45*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*46*/ MTK_PULL_PUPD_R1R0_TYPE,/*47*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*48*/ MTK_PULL_PUPD_R1R0_TYPE,/*49*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*50*/ MTK_PULL_PUPD_R1R0_TYPE,/*51*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*52*/ MTK_PULL_PUPD_R1R0_TYPE,/*53*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*54*/ MTK_PULL_PUPD_R1R0_TYPE,/*55*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*56*/ MTK_PULL_PUPD_R1R0_TYPE,/*57*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*58*/ MTK_PULL_PUPD_R1R0_TYPE,/*59*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*60*/ MTK_PULL_PUPD_R1R0_TYPE,/*61*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*62*/ MTK_PULL_PU_PD_TYPE,    /*63*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*64*/ MTK_PULL_PUPD_R1R0_TYPE,/*65*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*66*/ MTK_PULL_PUPD_R1R0_TYPE,/*67*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*68*/ MTK_PULL_PUPD_R1R0_TYPE,/*69*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*70*/ MTK_PULL_PD_TYPE,       /*71*/
+       MTK_PULL_PD_TYPE,       /*72*/ MTK_PULL_PUPD_R1R0_TYPE,/*73*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*74*/ MTK_PULL_PU_PD_TYPE,    /*75*/
+       MTK_PULL_PU_PD_TYPE,    /*76*/ MTK_PULL_PU_PD_TYPE,    /*77*/
+       MTK_PULL_PU_PD_TYPE,    /*78*/ MTK_PULL_PU_PD_TYPE,    /*79*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*80*/ MTK_PULL_PUPD_R1R0_TYPE,/*81*/
+       MTK_PULL_PUPD_R1R0_TYPE,/*82*/ MTK_PULL_PUPD_R1R0_TYPE,/*83*/
+};
+
+static const struct mtk_pin_reg_calc mt7988_reg_cals[] = {
+       [PINCTRL_PIN_REG_MODE] = MTK_RANGE(mt7988_pin_mode_range),
+       [PINCTRL_PIN_REG_DIR] = MTK_RANGE(mt7988_pin_dir_range),
+       [PINCTRL_PIN_REG_DI] = MTK_RANGE(mt7988_pin_di_range),
+       [PINCTRL_PIN_REG_DO] = MTK_RANGE(mt7988_pin_do_range),
+       [PINCTRL_PIN_REG_SMT] = MTK_RANGE(mt7988_pin_smt_range),
+       [PINCTRL_PIN_REG_IES] = MTK_RANGE(mt7988_pin_ies_range),
+       [PINCTRL_PIN_REG_PU] = MTK_RANGE(mt7988_pin_pu_range),
+       [PINCTRL_PIN_REG_PD] = MTK_RANGE(mt7988_pin_pd_range),
+       [PINCTRL_PIN_REG_DRV] = MTK_RANGE(mt7988_pin_drv_range),
+       [PINCTRL_PIN_REG_PUPD] = MTK_RANGE(mt7988_pin_pupd_range),
+       [PINCTRL_PIN_REG_R0] = MTK_RANGE(mt7988_pin_r0_range),
+       [PINCTRL_PIN_REG_R1] = MTK_RANGE(mt7988_pin_r1_range),
+};
+
+static const struct mtk_pin_desc mt7988_pins[] = {
+       MT7988_PIN(0, "UART2_RXD"),
+       MT7988_PIN(1, "UART2_TXD"),
+       MT7988_PIN(2, "UART2_CTS"),
+       MT7988_PIN(3, "UART2_RTS"),
+       MT7988_PIN(4, "GPIO_A"),
+       MT7988_PIN(5, "SMI_0_MDC"),
+       MT7988_PIN(6, "SMI_0_MDIO"),
+       MT7988_PIN(7, "PCIE30_2L_0_WAKE_N"),
+       MT7988_PIN(8, "PCIE30_2L_0_CLKREQ_N"),
+       MT7988_PIN(9, "PCIE30_1L_1_WAKE_N"),
+       MT7988_PIN(10, "PCIE30_1L_1_CLKREQ_N"),
+       MT7988_PIN(11, "GPIO_P"),
+       MT7988_PIN(12, "WATCHDOG"),
+       MT7988_PIN(13, "GPIO_RESET"),
+       MT7988_PIN(14, "GPIO_WPS"),
+       MT7988_PIN(15, "PMIC_I2C_SCL"),
+       MT7988_PIN(16, "PMIC_I2C_SDA"),
+       MT7988_PIN(17, "I2C_1_SCL"),
+       MT7988_PIN(18, "I2C_1_SDA"),
+       MT7988_PIN(19, "PCIE30_2L_0_PRESET_N"),
+       MT7988_PIN(20, "PCIE30_1L_1_PRESET_N"),
+       MT7988_PIN(21, "PWMD1"),
+       MT7988_PIN(22, "SPI0_WP"),
+       MT7988_PIN(23, "SPI0_HOLD"),
+       MT7988_PIN(24, "SPI0_CSB"),
+       MT7988_PIN(25, "SPI0_MISO"),
+       MT7988_PIN(26, "SPI0_MOSI"),
+       MT7988_PIN(27, "SPI0_CLK"),
+       MT7988_PIN(28, "SPI1_CSB"),
+       MT7988_PIN(29, "SPI1_MISO"),
+       MT7988_PIN(30, "SPI1_MOSI"),
+       MT7988_PIN(31, "SPI1_CLK"),
+       MT7988_PIN(32, "SPI2_CLK"),
+       MT7988_PIN(33, "SPI2_MOSI"),
+       MT7988_PIN(34, "SPI2_MISO"),
+       MT7988_PIN(35, "SPI2_CSB"),
+       MT7988_PIN(36, "SPI2_HOLD"),
+       MT7988_PIN(37, "SPI2_WP"),
+       MT7988_PIN(38, "EMMC_RSTB"),
+       MT7988_PIN(39, "EMMC_DSL"),
+       MT7988_PIN(40, "EMMC_CK"),
+       MT7988_PIN(41, "EMMC_CMD"),
+       MT7988_PIN(42, "EMMC_DATA_7"),
+       MT7988_PIN(43, "EMMC_DATA_6"),
+       MT7988_PIN(44, "EMMC_DATA_5"),
+       MT7988_PIN(45, "EMMC_DATA_4"),
+       MT7988_PIN(46, "EMMC_DATA_3"),
+       MT7988_PIN(47, "EMMC_DATA_2"),
+       MT7988_PIN(48, "EMMC_DATA_1"),
+       MT7988_PIN(49, "EMMC_DATA_0"),
+       MT7988_PIN(50, "PCM_FS_I2S_LRCK"),
+       MT7988_PIN(51, "PCM_CLK_I2S_BCLK"),
+       MT7988_PIN(52, "PCM_DRX_I2S_DIN"),
+       MT7988_PIN(53, "PCM_DTX_I2S_DOUT"),
+       MT7988_PIN(54, "PCM_MCK_I2S_MCLK"),
+       MT7988_PIN(55, "UART0_RXD"),
+       MT7988_PIN(56, "UART0_TXD"),
+       MT7988_PIN(57, "PWMD0"),
+       MT7988_PIN(58, "JTAG_JTDI"),
+       MT7988_PIN(59, "JTAG_JTDO"),
+       MT7988_PIN(60, "JTAG_JTMS"),
+       MT7988_PIN(61, "JTAG_JTCLK"),
+       MT7988_PIN(62, "JTAG_JTRST_N"),
+       MT7988_PIN(63, "USB_DRV_VBUS_P1"),
+       MT7988_PIN(64, "LED_A"),
+       MT7988_PIN(65, "LED_B"),
+       MT7988_PIN(66, "LED_C"),
+       MT7988_PIN(67, "LED_D"),
+       MT7988_PIN(68, "LED_E"),
+       MT7988_PIN(69, "GPIO_B"),
+       MT7988_PIN(70, "GPIO_C"),
+       MT7988_PIN(71, "I2C_2_SCL"),
+       MT7988_PIN(72, "I2C_2_SDA"),
+       MT7988_PIN(73, "PCIE30_2L_1_PRESET_N"),
+       MT7988_PIN(74, "PCIE30_1L_0_PRESET_N"),
+       MT7988_PIN(75, "PCIE30_2L_1_WAKE_N"),
+       MT7988_PIN(76, "PCIE30_2L_1_CLKREQ_N"),
+       MT7988_PIN(77, "PCIE30_1L_0_WAKE_N"),
+       MT7988_PIN(78, "PCIE30_1L_0_CLKREQ_N"),
+       MT7988_PIN(79, "USB_DRV_VBUS_P0"),
+       MT7988_PIN(80, "UART1_RXD"),
+       MT7988_PIN(81, "UART1_TXD"),
+       MT7988_PIN(82, "UART1_CTS"),
+       MT7988_PIN(83, "UART1_RTS"),
+};
+
+/* jtag */
+static int mt7988_tops_jtag0_0_pins[] = { 0, 1, 2, 3, 4 };
+static int mt7988_tops_jtag0_0_funcs[] = { 2, 2, 2, 2, 2 };
+
+static int mt7988_wo0_jtag_pins[] = { 50, 51, 52, 53, 54 };
+static int mt7988_wo0_jtag_funcs[] = { 3, 3, 3, 3, 3 };
+
+static int mt7988_wo1_jtag_pins[] = { 50, 51, 52, 53, 54 };
+static int mt7988_wo1_jtag_funcs[] = { 4, 4, 4, 4, 4 };
+
+static int mt7988_wo2_jtag_pins[] = { 50, 51, 52, 53, 54 };
+static int mt7988_wo2_jtag_funcs[] = { 5, 5, 5, 5, 5 };
+
+static int mt7988_jtag_pins[] = { 58, 59, 60, 61, 62 };
+static int mt7988_jtag_funcs[] = { 1, 1, 1, 1, 1 };
+
+static int mt7988_tops_jtag0_1_pins[] = { 58, 59, 60, 61, 62 };
+static int mt7988_tops_jtag0_1_funcs[] = { 4, 4, 4, 4, 4 };
+
+/* int_usxgmii */
+static int mt7988_int_usxgmii_pins[] = { 2, 3 };
+static int mt7988_int_usxgmii_funcs[] = { 3, 3 };
+
+/* pwm */
+static int mt7988_pwm0_pins[] = { 57 };
+static int mt7988_pwm0_funcs[] = { 1 };
+
+static int mt7988_pwm1_pins[] = { 21 };
+static int mt7988_pwm1_funcs[] = { 1 };
+
+static int mt7988_pwm2_pins[] = { 80 };
+static int mt7988_pwm2_funcs[] = { 2 };
+
+static int mt7988_pwm3_pins[] = { 81 };
+static int mt7988_pwm3_funcs[] = { 2 };
+
+static int mt7988_pwm4_pins[] = { 82 };
+static int mt7988_pwm4_funcs[] = { 2 };
+
+static int mt7988_pwm5_pins[] = { 83 };
+static int mt7988_pwm5_funcs[] = { 2 };
+
+static int mt7988_pwm6_pins[] = { 69 };
+static int mt7988_pwm6_funcs[] = { 3 };
+
+static int mt7988_pwm7_pins[] = { 70 };
+static int mt7988_pwm7_funcs[] = { 3 };
+
+/* dfd */
+static int mt7988_dfd_pins[] = { 0, 1, 2, 3, 4 };
+static int mt7988_dfd_funcs[] = { 4, 4, 4, 4, 4 };
+
+/* i2c */
+static int mt7988_xfi_phy0_i2c0_pins[] = { 0, 1 };
+static int mt7988_xfi_phy0_i2c0_funcs[] = { 5, 5 };
+
+static int mt7988_xfi_phy1_i2c0_pins[] = { 0, 1 };
+static int mt7988_xfi_phy1_i2c0_funcs[] = { 6, 6 };
+
+static int mt7988_xfi_phy_pll_i2c0_pins[] = { 3, 4 };
+static int mt7988_xfi_phy_pll_i2c0_funcs[] = { 5, 5 };
+
+static int mt7988_xfi_phy_pll_i2c1_pins[] = { 3, 4 };
+static int mt7988_xfi_phy_pll_i2c1_funcs[] = { 6, 6 };
+
+static int mt7988_i2c0_0_pins[] = { 5, 6 };
+static int mt7988_i2c0_0_funcs[] = { 2, 2 };
+
+static int mt7988_i2c1_sfp_pins[] = { 5, 6 };
+static int mt7988_i2c1_sfp_funcs[] = { 4, 4 };
+
+static int mt7988_xfi_pextp_phy0_i2c_pins[] = { 5, 6 };
+static int mt7988_xfi_pextp_phy0_i2c_funcs[] = { 5, 5 };
+
+static int mt7988_xfi_pextp_phy1_i2c_pins[] = { 5, 6 };
+static int mt7988_xfi_pextp_phy1_i2c_funcs[] = { 6, 6 };
+
+static int mt7988_i2c0_1_pins[] = { 15, 16 };
+static int mt7988_i2c0_1_funcs[] = { 1, 1 };
+
+static int mt7988_u30_phy_i2c0_pins[] = { 15, 16 };
+static int mt7988_u30_phy_i2c0_funcs[] = { 2, 2 };
+
+static int mt7988_u32_phy_i2c0_pins[] = { 15, 16 };
+static int mt7988_u32_phy_i2c0_funcs[] = { 3, 3 };
+
+static int mt7988_xfi_phy0_i2c1_pins[] = { 15, 16 };
+static int mt7988_xfi_phy0_i2c1_funcs[] = { 5, 5 };
+
+static int mt7988_xfi_phy1_i2c1_pins[] = { 15, 16 };
+static int mt7988_xfi_phy1_i2c1_funcs[] = { 6, 6 };
+
+static int mt7988_xfi_phy_pll_i2c2_pins[] = { 15, 16 };
+static int mt7988_xfi_phy_pll_i2c2_funcs[] = { 7, 7 };
+
+static int mt7988_i2c1_0_pins[] = { 17, 18 };
+static int mt7988_i2c1_0_funcs[] = { 1, 1 };
+
+static int mt7988_u30_phy_i2c1_pins[] = { 17, 18 };
+static int mt7988_u30_phy_i2c1_funcs[] = { 2, 2 };
+
+static int mt7988_u32_phy_i2c1_pins[] = { 17, 18 };
+static int mt7988_u32_phy_i2c1_funcs[] = { 3, 3 };
+
+static int mt7988_xfi_phy_pll_i2c3_pins[] = { 17, 18 };
+static int mt7988_xfi_phy_pll_i2c3_funcs[] = { 4, 4 };
+
+static int mt7988_sgmii0_i2c_pins[] = { 17, 18 };
+static int mt7988_sgmii0_i2c_funcs[] = { 5, 5 };
+
+static int mt7988_sgmii1_i2c_pins[] = { 17, 18 };
+static int mt7988_sgmii1_i2c_funcs[] = { 6, 6 };
+
+static int mt7988_i2c1_2_pins[] = { 69, 70 };
+static int mt7988_i2c1_2_funcs[] = { 2, 2 };
+
+static int mt7988_i2c2_0_pins[] = { 69, 70 };
+static int mt7988_i2c2_0_funcs[] = { 4, 4 };
+
+static int mt7988_i2c2_1_pins[] = { 71, 72 };
+static int mt7988_i2c2_1_funcs[] = { 1, 1 };
+
+/* eth */
+static int mt7988_mdc_mdio0_pins[] = { 5, 6 };
+static int mt7988_mdc_mdio0_funcs[] = { 1, 1 };
+
+static int mt7988_2p5g_ext_mdio_pins[] = { 28, 29 };
+static int mt7988_2p5g_ext_mdio_funcs[] = { 6, 6 };
+
+static int mt7988_gbe_ext_mdio_pins[] = { 30, 31 };
+static int mt7988_gbe_ext_mdio_funcs[] = { 6, 6 };
+
+static int mt7988_mdc_mdio1_pins[] = { 69, 70 };
+static int mt7988_mdc_mdio1_funcs[] = { 1, 1 };
+
+/* pcie */
+static int mt7988_pcie_wake_n0_0_pins[] = { 7 };
+static int mt7988_pcie_wake_n0_0_funcs[] = { 1 };
+
+static int mt7988_pcie_clk_req_n0_0_pins[] = { 8 };
+static int mt7988_pcie_clk_req_n0_0_funcs[] = { 1 };
+
+static int mt7988_pcie_wake_n3_0_pins[] = { 9 };
+static int mt7988_pcie_wake_n3_0_funcs[] = { 1 };
+
+static int mt7988_pcie_clk_req_n3_pins[] = { 10 };
+static int mt7988_pcie_clk_req_n3_funcs[] = { 1 };
+
+static int mt7988_pcie_clk_req_n0_1_pins[] = { 10 };
+static int mt7988_pcie_clk_req_n0_1_funcs[] = { 2 };
+
+static int mt7988_pcie_p0_phy_i2c_pins[] = { 7, 8 };
+static int mt7988_pcie_p0_phy_i2c_funcs[] = { 3, 3 };
+
+static int mt7988_pcie_p1_phy_i2c_pins[] = { 7, 8 };
+static int mt7988_pcie_p1_phy_i2c_funcs[] = { 4, 4 };
+
+static int mt7988_pcie_p3_phy_i2c_pins[] = { 9, 10 };
+static int mt7988_pcie_p3_phy_i2c_funcs[] = { 4, 4 };
+
+static int mt7988_pcie_p2_phy_i2c_pins[] = { 7, 8 };
+static int mt7988_pcie_p2_phy_i2c_funcs[] = { 5, 5 };
+
+static int mt7988_ckm_phy_i2c_pins[] = { 9, 10 };
+static int mt7988_ckm_phy_i2c_funcs[] = { 5, 5 };
+
+static int mt7988_pcie_wake_n0_1_pins[] = { 13 };
+static int mt7988_pcie_wake_n0_1_funcs[] = { 2 };
+
+static int mt7988_pcie_wake_n3_1_pins[] = { 14 };
+static int mt7988_pcie_wake_n3_1_funcs[] = { 2 };
+
+static int mt7988_pcie_2l_0_pereset_pins[] = { 19 };
+static int mt7988_pcie_2l_0_pereset_funcs[] = { 1 };
+
+static int mt7988_pcie_1l_1_pereset_pins[] = { 20 };
+static int mt7988_pcie_1l_1_pereset_funcs[] = { 1 };
+
+static int mt7988_pcie_clk_req_n2_1_pins[] = { 63 };
+static int mt7988_pcie_clk_req_n2_1_funcs[] = { 2 };
+
+static int mt7988_pcie_2l_1_pereset_pins[] = { 73 };
+static int mt7988_pcie_2l_1_pereset_funcs[] = { 1 };
+
+static int mt7988_pcie_1l_0_pereset_pins[] = { 74 };
+static int mt7988_pcie_1l_0_pereset_funcs[] = { 1 };
+
+static int mt7988_pcie_wake_n1_0_pins[] = { 75 };
+static int mt7988_pcie_wake_n1_0_funcs[] = { 1 };
+
+static int mt7988_pcie_clk_req_n1_pins[] = { 76 };
+static int mt7988_pcie_clk_req_n1_funcs[] = { 1 };
+
+static int mt7988_pcie_wake_n2_0_pins[] = { 77 };
+static int mt7988_pcie_wake_n2_0_funcs[] = { 1 };
+
+static int mt7988_pcie_clk_req_n2_0_pins[] = { 78 };
+static int mt7988_pcie_clk_req_n2_0_funcs[] = { 1 };
+
+static int mt7988_pcie_wake_n2_1_pins[] = { 79 };
+static int mt7988_pcie_wake_n2_1_funcs[] = { 2 };
+
+/* pmic */
+static int mt7988_pmic_pins[] = { 11 };
+static int mt7988_pmic_funcs[] = { 1 };
+
+/* watchdog */
+static int mt7988_watchdog_pins[] = { 12 };
+static int mt7988_watchdog_funcs[] = { 1 };
+
+/* spi */
+static int mt7988_spi0_wp_hold_pins[] = { 22, 23 };
+static int mt7988_spi0_wp_hold_funcs[] = { 1, 1 };
+
+static int mt7988_spi0_pins[] = { 24, 25, 26, 27 };
+static int mt7988_spi0_funcs[] = { 1, 1, 1, 1 };
+
+static int mt7988_spi1_pins[] = { 28, 29, 30, 31 };
+static int mt7988_spi1_funcs[] = { 1, 1, 1, 1 };
+
+static int mt7988_spi2_pins[] = { 32, 33, 34, 35 };
+static int mt7988_spi2_funcs[] = { 1, 1, 1, 1 };
+
+static int mt7988_spi2_wp_hold_pins[] = { 36, 37 };
+static int mt7988_spi2_wp_hold_funcs[] = { 1, 1 };
+
+/* flash */
+static int mt7988_snfi_pins[] = { 22, 23, 24, 25, 26, 27 };
+static int mt7988_snfi_funcs[] = { 2, 2, 2, 2, 2, 2 };
+
+static int mt7988_emmc_45_pins[] = {
+       21, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37
+};
+static int mt7988_emmc_45_funcs[] = { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 };
+
+static int mt7988_sdcard_pins[] = { 32, 33, 34, 35, 36, 37 };
+static int mt7988_sdcard_funcs[] = { 5, 5, 5, 5, 5, 5 };
+
+static int mt7988_emmc_51_pins[] = { 38, 39, 40, 41, 42, 43,
+                                    44, 45, 46, 47, 48, 49 };
+static int mt7988_emmc_51_funcs[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
+
+/* uart */
+static int mt7988_uart2_pins[] = { 0, 1, 2, 3 };
+static int mt7988_uart2_funcs[] = { 1, 1, 1, 1 };
+
+static int mt7988_tops_uart0_0_pins[] = { 22, 23 };
+static int mt7988_tops_uart0_0_funcs[] = { 3, 3 };
+
+static int mt7988_uart2_0_pins[] = { 28, 29, 30, 31 };
+static int mt7988_uart2_0_funcs[] = { 2, 2, 2, 2 };
+
+static int mt7988_uart1_0_pins[] = { 32, 33, 34, 35 };
+static int mt7988_uart1_0_funcs[] = { 2, 2, 2, 2 };
+
+static int mt7988_uart2_1_pins[] = { 32, 33, 34, 35 };
+static int mt7988_uart2_1_funcs[] = { 3, 3, 3, 3 };
+
+static int mt7988_net_wo0_uart_txd_0_pins[] = { 28 };
+static int mt7988_net_wo0_uart_txd_0_funcs[] = { 3 };
+
+static int mt7988_net_wo1_uart_txd_0_pins[] = { 29 };
+static int mt7988_net_wo1_uart_txd_0_funcs[] = { 3 };
+
+static int mt7988_net_wo2_uart_txd_0_pins[] = { 30 };
+static int mt7988_net_wo2_uart_txd_0_funcs[] = { 3 };
+
+static int mt7988_tops_uart1_0_pins[] = { 28, 29 };
+static int mt7988_tops_uart1_0_funcs[] = { 4, 4 };
+
+static int mt7988_tops_uart0_1_pins[] = { 30, 31 };
+static int mt7988_tops_uart0_1_funcs[] = { 4, 4 };
+
+static int mt7988_tops_uart1_1_pins[] = { 36, 37 };
+static int mt7988_tops_uart1_1_funcs[] = { 3, 3 };
+
+static int mt7988_uart0_pins[] = { 55, 56 };
+static int mt7988_uart0_funcs[] = { 1, 1 };
+
+static int mt7988_tops_uart0_2_pins[] = { 55, 56 };
+static int mt7988_tops_uart0_2_funcs[] = { 2, 2 };
+
+static int mt7988_uart2_2_pins[] = { 50, 51, 52, 53 };
+static int mt7988_uart2_2_funcs[] = { 2, 2, 2, 2 };
+
+static int mt7988_uart1_1_pins[] = { 58, 59, 60, 61 };
+static int mt7988_uart1_1_funcs[] = { 2, 2, 2, 2 };
+
+static int mt7988_uart2_3_pins[] = { 58, 59, 60, 61 };
+static int mt7988_uart2_3_funcs[] = { 3, 3, 3, 3 };
+
+static int mt7988_uart1_2_pins[] = { 80, 81, 82, 83 };
+static int mt7988_uart1_2_funcs[] = { 1, 1, 1, 1 };
+
+static int mt7988_uart1_2_lite_pins[] = { 80, 81 };
+static int mt7988_uart1_2_lite_funcs[] = { 1, 1 };
+
+static int mt7988_tops_uart1_2_pins[] = { 80, 81 };
+static int mt7988_tops_uart1_2_funcs[] = { 4, 4, };
+
+static int mt7988_net_wo0_uart_txd_1_pins[] = { 80 };
+static int mt7988_net_wo0_uart_txd_1_funcs[] = { 3 };
+
+static int mt7988_net_wo1_uart_txd_1_pins[] = { 81 };
+static int mt7988_net_wo1_uart_txd_1_funcs[] = { 3 };
+
+static int mt7988_net_wo2_uart_txd_1_pins[] = { 82 };
+static int mt7988_net_wo2_uart_txd_1_funcs[] = { 3 };
+
+/* udi */
+static int mt7988_udi_pins[] = { 32, 33, 34, 35, 36 };
+static int mt7988_udi_funcs[] = { 4, 4, 4, 4, 4 };
+
+/* i2s */
+static int mt7988_i2s_pins[] = { 50, 51, 52, 53, 54 };
+static int mt7988_i2s_funcs[] = { 1, 1, 1, 1, 1 };
+
+/* pcm */
+static int mt7988_pcm_pins[] = { 50, 51, 52, 53 };
+static int mt7988_pcm_funcs[] = { 1, 1, 1, 1 };
+
+/* led */
+static int mt7988_gbe0_led1_pins[] = { 58 };
+static int mt7988_gbe0_led1_funcs[] = { 6 };
+static int mt7988_gbe1_led1_pins[] = { 59 };
+static int mt7988_gbe1_led1_funcs[] = { 6 };
+static int mt7988_gbe2_led1_pins[] = { 60 };
+static int mt7988_gbe2_led1_funcs[] = { 6 };
+static int mt7988_gbe3_led1_pins[] = { 61 };
+static int mt7988_gbe3_led1_funcs[] = { 6 };
+
+static int mt7988_2p5gbe_led1_pins[] = { 62 };
+static int mt7988_2p5gbe_led1_funcs[] = { 6 };
+
+static int mt7988_gbe0_led0_pins[] = { 64 };
+static int mt7988_gbe0_led0_funcs[] = { 1 };
+static int mt7988_gbe1_led0_pins[] = { 65 };
+static int mt7988_gbe1_led0_funcs[] = { 1 };
+static int mt7988_gbe2_led0_pins[] = { 66 };
+static int mt7988_gbe2_led0_funcs[] = { 1 };
+static int mt7988_gbe3_led0_pins[] = { 67 };
+static int mt7988_gbe3_led0_funcs[] = { 1 };
+
+static int mt7988_2p5gbe_led0_pins[] = { 68 };
+static int mt7988_2p5gbe_led0_funcs[] = { 1 };
+
+/* usb */
+static int mt7988_drv_vbus_p1_pins[] = { 63 };
+static int mt7988_drv_vbus_p1_funcs[] = { 1 };
+
+static int mt7988_drv_vbus_pins[] = { 79 };
+static int mt7988_drv_vbus_funcs[] = { 1 };
+
+static const struct group_desc mt7988_groups[] = {
+       /*  @GPIO(0,1,2,3): uart2 */
+       PINCTRL_PIN_GROUP("uart2", mt7988_uart2),
+       /*  @GPIO(0,1,2,3,4): tops_jtag0_0 */
+       PINCTRL_PIN_GROUP("tops_jtag0_0", mt7988_tops_jtag0_0),
+       /*  @GPIO(2,3): int_usxgmii */
+       PINCTRL_PIN_GROUP("int_usxgmii", mt7988_int_usxgmii),
+       /*  @GPIO(0,1,2,3,4): dfd */
+       PINCTRL_PIN_GROUP("dfd", mt7988_dfd),
+       /*  @GPIO(0,1): xfi_phy0_i2c0 */
+       PINCTRL_PIN_GROUP("xfi_phy0_i2c0", mt7988_xfi_phy0_i2c0),
+       /*  @GPIO(0,1): xfi_phy1_i2c0 */
+       PINCTRL_PIN_GROUP("xfi_phy1_i2c0", mt7988_xfi_phy1_i2c0),
+       /*  @GPIO(3,4): xfi_phy_pll_i2c0 */
+       PINCTRL_PIN_GROUP("xfi_phy_pll_i2c0", mt7988_xfi_phy_pll_i2c0),
+       /*  @GPIO(3,4): xfi_phy_pll_i2c1 */
+       PINCTRL_PIN_GROUP("xfi_phy_pll_i2c1", mt7988_xfi_phy_pll_i2c1),
+       /*  @GPIO(5,6) i2c0_0 */
+       PINCTRL_PIN_GROUP("i2c0_0", mt7988_i2c0_0),
+       /*  @GPIO(5,6) i2c1_sfp */
+       PINCTRL_PIN_GROUP("i2c1_sfp", mt7988_i2c1_sfp),
+       /*  @GPIO(5,6) xfi_pextp_phy0_i2c */
+       PINCTRL_PIN_GROUP("xfi_pextp_phy0_i2c", mt7988_xfi_pextp_phy0_i2c),
+       /*  @GPIO(5,6) xfi_pextp_phy1_i2c */
+       PINCTRL_PIN_GROUP("xfi_pextp_phy1_i2c", mt7988_xfi_pextp_phy1_i2c),
+       /*  @GPIO(5,6) mdc_mdio0 */
+       PINCTRL_PIN_GROUP("mdc_mdio0", mt7988_mdc_mdio0),
+       /*  @GPIO(7): pcie_wake_n0_0 */
+       PINCTRL_PIN_GROUP("pcie_wake_n0_0", mt7988_pcie_wake_n0_0),
+       /*  @GPIO(8): pcie_clk_req_n0_0 */
+       PINCTRL_PIN_GROUP("pcie_clk_req_n0_0", mt7988_pcie_clk_req_n0_0),
+       /*  @GPIO(9): pcie_wake_n3_0 */
+       PINCTRL_PIN_GROUP("pcie_wake_n3_0", mt7988_pcie_wake_n3_0),
+       /*  @GPIO(10): pcie_clk_req_n3 */
+       PINCTRL_PIN_GROUP("pcie_clk_req_n3", mt7988_pcie_clk_req_n3),
+       /*  @GPIO(10): pcie_clk_req_n0_1 */
+       PINCTRL_PIN_GROUP("pcie_clk_req_n0_1", mt7988_pcie_clk_req_n0_1),
+       /*  @GPIO(7,8) pcie_p0_phy_i2c */
+       PINCTRL_PIN_GROUP("pcie_p0_phy_i2c", mt7988_pcie_p0_phy_i2c),
+       /*  @GPIO(7,8) pcie_p1_phy_i2c */
+       PINCTRL_PIN_GROUP("pcie_p1_phy_i2c", mt7988_pcie_p1_phy_i2c),
+       /*  @GPIO(7,8) pcie_p2_phy_i2c */
+       PINCTRL_PIN_GROUP("pcie_p2_phy_i2c", mt7988_pcie_p2_phy_i2c),
+       /*  @GPIO(9,10) pcie_p3_phy_i2c */
+       PINCTRL_PIN_GROUP("pcie_p3_phy_i2c", mt7988_pcie_p3_phy_i2c),
+       /*  @GPIO(9,10) ckm_phy_i2c */
+       PINCTRL_PIN_GROUP("ckm_phy_i2c", mt7988_ckm_phy_i2c),
+       /*  @GPIO(11): pmic */
+       PINCTRL_PIN_GROUP("pcie_pmic", mt7988_pmic),
+       /*  @GPIO(12): watchdog */
+       PINCTRL_PIN_GROUP("watchdog", mt7988_watchdog),
+       /*  @GPIO(13): pcie_wake_n0_1 */
+       PINCTRL_PIN_GROUP("pcie_wake_n0_1", mt7988_pcie_wake_n0_1),
+       /*  @GPIO(14): pcie_wake_n3_1 */
+       PINCTRL_PIN_GROUP("pcie_wake_n3_1", mt7988_pcie_wake_n3_1),
+       /*  @GPIO(15,16) i2c0_1 */
+       PINCTRL_PIN_GROUP("i2c0_1", mt7988_i2c0_1),
+       /*  @GPIO(15,16) u30_phy_i2c0 */
+       PINCTRL_PIN_GROUP("u30_phy_i2c0", mt7988_u30_phy_i2c0),
+       /*  @GPIO(15,16) u32_phy_i2c0 */
+       PINCTRL_PIN_GROUP("u32_phy_i2c0", mt7988_u32_phy_i2c0),
+       /*  @GPIO(15,16) xfi_phy0_i2c1 */
+       PINCTRL_PIN_GROUP("xfi_phy0_i2c1", mt7988_xfi_phy0_i2c1),
+       /*  @GPIO(15,16) xfi_phy1_i2c1 */
+       PINCTRL_PIN_GROUP("xfi_phy1_i2c1", mt7988_xfi_phy1_i2c1),
+       /*  @GPIO(15,16) xfi_phy_pll_i2c2 */
+       PINCTRL_PIN_GROUP("xfi_phy_pll_i2c2", mt7988_xfi_phy_pll_i2c2),
+       /*  @GPIO(17,18) i2c1_0 */
+       PINCTRL_PIN_GROUP("i2c1_0", mt7988_i2c1_0),
+       /*  @GPIO(17,18) u30_phy_i2c1 */
+       PINCTRL_PIN_GROUP("u30_phy_i2c1", mt7988_u30_phy_i2c1),
+       /*  @GPIO(17,18) u32_phy_i2c1 */
+       PINCTRL_PIN_GROUP("u32_phy_i2c1", mt7988_u32_phy_i2c1),
+       /*  @GPIO(17,18) xfi_phy_pll_i2c3 */
+       PINCTRL_PIN_GROUP("xfi_phy_pll_i2c3", mt7988_xfi_phy_pll_i2c3),
+       /*  @GPIO(17,18) sgmii0_i2c */
+       PINCTRL_PIN_GROUP("sgmii0_i2c", mt7988_sgmii0_i2c),
+       /*  @GPIO(17,18) sgmii1_i2c */
+       PINCTRL_PIN_GROUP("sgmii1_i2c", mt7988_sgmii1_i2c),
+       /*  @GPIO(19): pcie_2l_0_pereset */
+       PINCTRL_PIN_GROUP("pcie_2l_0_pereset", mt7988_pcie_2l_0_pereset),
+       /*  @GPIO(20): pcie_1l_1_pereset */
+       PINCTRL_PIN_GROUP("pcie_1l_1_pereset", mt7988_pcie_1l_1_pereset),
+       /*  @GPIO(21): pwm1 */
+       PINCTRL_PIN_GROUP("pwm1", mt7988_pwm1),
+       /*  @GPIO(22,23) spi0_wp_hold */
+       PINCTRL_PIN_GROUP("spi0_wp_hold", mt7988_spi0_wp_hold),
+       /*  @GPIO(24,25,26,27) spi0 */
+       PINCTRL_PIN_GROUP("spi0", mt7988_spi0),
+       /*  @GPIO(28,29,30,31) spi1 */
+       PINCTRL_PIN_GROUP("spi1", mt7988_spi1),
+       /*  @GPIO(32,33,34,35) spi2 */
+       PINCTRL_PIN_GROUP("spi2", mt7988_spi2),
+       /*  @GPIO(36,37) spi2_wp_hold */
+       PINCTRL_PIN_GROUP("spi2_wp_hold", mt7988_spi2_wp_hold),
+       /*  @GPIO(22,23,24,25,26,27) snfi */
+       PINCTRL_PIN_GROUP("snfi", mt7988_snfi),
+       /*  @GPIO(22,23) tops_uart0_0 */
+       PINCTRL_PIN_GROUP("tops_uart0_0", mt7988_tops_uart0_0),
+       /*  @GPIO(28,29,30,31) uart2_0 */
+       PINCTRL_PIN_GROUP("uart2_0", mt7988_uart2_0),
+       /*  @GPIO(32,33,34,35) uart1_0 */
+       PINCTRL_PIN_GROUP("uart1_0", mt7988_uart1_0),
+       /*  @GPIO(32,33,34,35) uart2_1 */
+       PINCTRL_PIN_GROUP("uart2_1", mt7988_uart2_1),
+       /*  @GPIO(28) net_wo0_uart_txd_0 */
+       PINCTRL_PIN_GROUP("net_wo0_uart_txd_0", mt7988_net_wo0_uart_txd_0),
+       /*  @GPIO(29) net_wo1_uart_txd_0 */
+       PINCTRL_PIN_GROUP("net_wo1_uart_txd_0", mt7988_net_wo1_uart_txd_0),
+       /*  @GPIO(30) net_wo2_uart_txd_0 */
+       PINCTRL_PIN_GROUP("net_wo2_uart_txd_0", mt7988_net_wo2_uart_txd_0),
+       /*  @GPIO(28,29) tops_uart1_0 */
+       PINCTRL_PIN_GROUP("tops_uart0_0", mt7988_tops_uart1_0),
+       /*  @GPIO(30,31) tops_uart0_1 */
+       PINCTRL_PIN_GROUP("tops_uart0_1", mt7988_tops_uart0_1),
+       /*  @GPIO(36,37) tops_uart1_1 */
+       PINCTRL_PIN_GROUP("tops_uart1_1", mt7988_tops_uart1_1),
+       /*  @GPIO(32,33,34,35,36) udi */
+       PINCTRL_PIN_GROUP("udi", mt7988_udi),
+       /*  @GPIO(21,28,29,30,31,32,33,34,35,36,37) emmc_45 */
+       PINCTRL_PIN_GROUP("emmc_45", mt7988_emmc_45),
+       /*  @GPIO(32,33,34,35,36,37) sdcard */
+       PINCTRL_PIN_GROUP("sdcard", mt7988_sdcard),
+       /*  @GPIO(38,39,40,41,42,43,44,45,46,47,48,49) emmc_51 */
+       PINCTRL_PIN_GROUP("emmc_51", mt7988_emmc_51),
+       /*  @GPIO(28,29) 2p5g_ext_mdio */
+       PINCTRL_PIN_GROUP("2p5g_ext_mdio", mt7988_2p5g_ext_mdio),
+       /*  @GPIO(30,31) gbe_ext_mdio */
+       PINCTRL_PIN_GROUP("gbe_ext_mdio", mt7988_gbe_ext_mdio),
+       /*  @GPIO(50,51,52,53,54) i2s */
+       PINCTRL_PIN_GROUP("i2s", mt7988_i2s),
+       /*  @GPIO(50,51,52,53) pcm */
+       PINCTRL_PIN_GROUP("pcm", mt7988_pcm),
+       /*  @GPIO(55,56) uart0 */
+       PINCTRL_PIN_GROUP("uart0", mt7988_uart0),
+       /*  @GPIO(55,56) tops_uart0_2 */
+       PINCTRL_PIN_GROUP("tops_uart0_2", mt7988_tops_uart0_2),
+       /*  @GPIO(50,51,52,53) uart2_2 */
+       PINCTRL_PIN_GROUP("uart2_2", mt7988_uart2_2),
+       /*  @GPIO(50,51,52,53,54) wo0_jtag */
+       PINCTRL_PIN_GROUP("wo0_jtag", mt7988_wo0_jtag),
+       /*  @GPIO(50,51,52,53,54) wo1-wo1_jtag */
+       PINCTRL_PIN_GROUP("wo1_jtag", mt7988_wo1_jtag),
+       /*  @GPIO(50,51,52,53,54) wo2_jtag */
+       PINCTRL_PIN_GROUP("wo2_jtag", mt7988_wo2_jtag),
+       /*  @GPIO(57) pwm0 */
+       PINCTRL_PIN_GROUP("pwm0", mt7988_pwm0),
+       /*  @GPIO(58,59,60,61,62) jtag */
+       PINCTRL_PIN_GROUP("jtag", mt7988_jtag),
+       /*  @GPIO(58,59,60,61,62) tops_jtag0_1 */
+       PINCTRL_PIN_GROUP("tops_jtag0_1", mt7988_tops_jtag0_1),
+       /*  @GPIO(58,59,60,61) uart2_3 */
+       PINCTRL_PIN_GROUP("uart2_3", mt7988_uart2_3),
+       /*  @GPIO(58,59,60,61) uart1_1 */
+       PINCTRL_PIN_GROUP("uart1_1", mt7988_uart1_1),
+       /*  @GPIO(58,59,60,61) gbe_led1 */
+       PINCTRL_PIN_GROUP("gbe0_led1", mt7988_gbe0_led1),
+       PINCTRL_PIN_GROUP("gbe1_led1", mt7988_gbe1_led1),
+       PINCTRL_PIN_GROUP("gbe2_led1", mt7988_gbe2_led1),
+       PINCTRL_PIN_GROUP("gbe3_led1", mt7988_gbe3_led1),
+       /*  @GPIO(62) 2p5gbe_led1 */
+       PINCTRL_PIN_GROUP("2p5gbe_led1", mt7988_2p5gbe_led1),
+       /*  @GPIO(64,65,66,67) gbe_led0 */
+       PINCTRL_PIN_GROUP("gbe0_led0", mt7988_gbe0_led0),
+       PINCTRL_PIN_GROUP("gbe1_led0", mt7988_gbe1_led0),
+       PINCTRL_PIN_GROUP("gbe2_led0", mt7988_gbe2_led0),
+       PINCTRL_PIN_GROUP("gbe3_led0", mt7988_gbe3_led0),
+       /*  @GPIO(68) 2p5gbe_led0 */
+       PINCTRL_PIN_GROUP("2p5gbe_led0", mt7988_2p5gbe_led0),
+       /*  @GPIO(63) drv_vbus_p1 */
+       PINCTRL_PIN_GROUP("drv_vbus_p1", mt7988_drv_vbus_p1),
+       /*  @GPIO(63) pcie_clk_req_n2_1 */
+       PINCTRL_PIN_GROUP("pcie_clk_req_n2_1", mt7988_pcie_clk_req_n2_1),
+       /*  @GPIO(69, 70) mdc_mdio1 */
+       PINCTRL_PIN_GROUP("mdc_mdio1", mt7988_mdc_mdio1),
+       /*  @GPIO(69, 70) i2c1_2 */
+       PINCTRL_PIN_GROUP("i2c1_2", mt7988_i2c1_2),
+       /*  @GPIO(69) pwm6 */
+       PINCTRL_PIN_GROUP("pwm6", mt7988_pwm6),
+       /*  @GPIO(70) pwm7 */
+       PINCTRL_PIN_GROUP("pwm7", mt7988_pwm7),
+       /*  @GPIO(69,70) i2c2_0 */
+       PINCTRL_PIN_GROUP("i2c2_0", mt7988_i2c2_0),
+       /*  @GPIO(71,72) i2c2_1 */
+       PINCTRL_PIN_GROUP("i2c2_1", mt7988_i2c2_1),
+       /*  @GPIO(73) pcie_2l_1_pereset */
+       PINCTRL_PIN_GROUP("pcie_2l_1_pereset", mt7988_pcie_2l_1_pereset),
+       /*  @GPIO(74) pcie_1l_0_pereset */
+       PINCTRL_PIN_GROUP("pcie_1l_0_pereset", mt7988_pcie_1l_0_pereset),
+       /*  @GPIO(75) pcie_wake_n1_0 */
+       PINCTRL_PIN_GROUP("pcie_wake_n1_0", mt7988_pcie_wake_n1_0),
+       /*  @GPIO(76) pcie_clk_req_n1 */
+       PINCTRL_PIN_GROUP("pcie_clk_req_n1", mt7988_pcie_clk_req_n1),
+       /*  @GPIO(77) pcie_wake_n2_0 */
+       PINCTRL_PIN_GROUP("pcie_wake_n2_0", mt7988_pcie_wake_n2_0),
+       /*  @GPIO(78) pcie_clk_req_n2_0 */
+       PINCTRL_PIN_GROUP("pcie_clk_req_n2_0", mt7988_pcie_clk_req_n2_0),
+       /*  @GPIO(79) drv_vbus */
+       PINCTRL_PIN_GROUP("drv_vbus", mt7988_drv_vbus),
+       /*  @GPIO(79) pcie_wake_n2_1 */
+       PINCTRL_PIN_GROUP("pcie_wake_n2_1", mt7988_pcie_wake_n2_1),
+       /*  @GPIO(80,81,82,83) uart1_2 */
+       PINCTRL_PIN_GROUP("uart1_2", mt7988_uart1_2),
+       /*  @GPIO(80,81) uart1_2_lite */
+       PINCTRL_PIN_GROUP("uart1_2_lite", mt7988_uart1_2_lite),
+       /*  @GPIO(80) pwm2 */
+       PINCTRL_PIN_GROUP("pwm2", mt7988_pwm2),
+       /*  @GPIO(81) pwm3 */
+       PINCTRL_PIN_GROUP("pwm3", mt7988_pwm3),
+       /*  @GPIO(82) pwm4 */
+       PINCTRL_PIN_GROUP("pwm4", mt7988_pwm4),
+       /*  @GPIO(83) pwm5 */
+       PINCTRL_PIN_GROUP("pwm5", mt7988_pwm5),
+       /*  @GPIO(80) net_wo0_uart_txd_0 */
+       PINCTRL_PIN_GROUP("net_wo0_uart_txd_0", mt7988_net_wo0_uart_txd_0),
+       /*  @GPIO(81) net_wo1_uart_txd_0 */
+       PINCTRL_PIN_GROUP("net_wo1_uart_txd_0", mt7988_net_wo1_uart_txd_0),
+       /*  @GPIO(82) net_wo2_uart_txd_0 */
+       PINCTRL_PIN_GROUP("net_wo2_uart_txd_0", mt7988_net_wo2_uart_txd_0),
+       /*  @GPIO(80,81) tops_uart1_2 */
+       PINCTRL_PIN_GROUP("tops_uart1_2", mt7988_tops_uart1_2),
+       /*  @GPIO(80) net_wo0_uart_txd_1 */
+       PINCTRL_PIN_GROUP("net_wo0_uart_txd_1", mt7988_net_wo0_uart_txd_1),
+       /*  @GPIO(81) net_wo1_uart_txd_1 */
+       PINCTRL_PIN_GROUP("net_wo1_uart_txd_1", mt7988_net_wo1_uart_txd_1),
+       /*  @GPIO(82) net_wo2_uart_txd_1 */
+       PINCTRL_PIN_GROUP("net_wo2_uart_txd_1", mt7988_net_wo2_uart_txd_1),
+};
+
+/* Joint those groups owning the same capability in user point of view which
+ * allows that people tend to use through the device tree.
+ */
+static const char * const mt7988_jtag_groups[] = {
+       "tops_jtag0_0", "wo0_jtag", "wo1_jtag",
+       "wo2_jtag",     "jtag",     "tops_jtag0_1",
+};
+static const char * const mt7988_int_usxgmii_groups[] = {
+       "int_usxgmii",
+};
+static const char * const mt7988_pwm_groups[] = {
+       "pwm0", "pwm1", "pwm2", "pwm3", "pwm4", "pwm5", "pwm6", "pwm7"
+};
+static const char * const mt7988_dfd_groups[] = {
+       "dfd",
+};
+static const char * const mt7988_i2c_groups[] = {
+       "xfi_phy0_i2c0",
+       "xfi_phy1_i2c0",
+       "xfi_phy_pll_i2c0",
+       "xfi_phy_pll_i2c1",
+       "i2c0_0",
+       "i2c1_sfp",
+       "xfi_pextp_phy0_i2c",
+       "xfi_pextp_phy1_i2c",
+       "i2c0_1",
+       "u30_phy_i2c0",
+       "u32_phy_i2c0",
+       "xfi_phy0_i2c1",
+       "xfi_phy1_i2c1",
+       "xfi_phy_pll_i2c2",
+       "i2c1_0",
+       "u30_phy_i2c1",
+       "u32_phy_i2c1",
+       "xfi_phy_pll_i2c3",
+       "sgmii0_i2c",
+       "sgmii1_i2c",
+       "i2c1_2",
+       "i2c2_0",
+       "i2c2_1",
+};
+static const char * const mt7988_ethernet_groups[] = {
+       "mdc_mdio0",
+       "2p5g_ext_mdio",
+       "gbe_ext_mdio",
+       "mdc_mdio1",
+};
+static const char * const mt7988_pcie_groups[] = {
+       "pcie_wake_n0_0",    "pcie_clk_req_n0_0", "pcie_wake_n3_0",
+       "pcie_clk_req_n3",   "pcie_p0_phy_i2c",   "pcie_p1_phy_i2c",
+       "pcie_p3_phy_i2c",   "pcie_p2_phy_i2c",   "ckm_phy_i2c",
+       "pcie_wake_n0_1",    "pcie_wake_n3_1",    "pcie_2l_0_pereset",
+       "pcie_1l_1_pereset", "pcie_clk_req_n2_1", "pcie_2l_1_pereset",
+       "pcie_1l_0_pereset", "pcie_wake_n1_0",    "pcie_clk_req_n1",
+       "pcie_wake_n2_0",    "pcie_clk_req_n2_0", "pcie_wake_n2_1",
+       "pcie_clk_req_n0_1"
+};
+static const char * const mt7988_pmic_groups[] = {
+       "pmic",
+};
+static const char * const mt7988_wdt_groups[] = {
+       "watchdog",
+};
+static const char * const mt7988_spi_groups[] = {
+       "spi0", "spi0_wp_hold", "spi1", "spi2", "spi2_wp_hold",
+};
+static const char * const mt7988_flash_groups[] = { "emmc_45", "sdcard", "snfi",
+                                                   "emmc_51" };
+static const char * const mt7988_uart_groups[] = {
+       "uart2",
+       "tops_uart0_0",
+       "uart2_0",
+       "uart1_0",
+       "uart2_1",
+       "net_wo0_uart_txd_0",
+       "net_wo1_uart_txd_0",
+       "net_wo2_uart_txd_0",
+       "tops_uart1_0",
+       "ops_uart0_1",
+       "ops_uart1_1",
+       "uart0",
+       "tops_uart0_2",
+       "uart1_1",
+       "uart2_3",
+       "uart1_2",
+       "uart1_2_lite",
+       "tops_uart1_2",
+       "net_wo0_uart_txd_1",
+       "net_wo1_uart_txd_1",
+       "net_wo2_uart_txd_1",
+};
+static const char * const mt7988_udi_groups[] = {
+       "udi",
+};
+static const char * const mt7988_audio_groups[] = {
+       "i2s", "pcm",
+};
+static const char * const mt7988_led_groups[] = {
+       "gbe0_led1", "gbe1_led1", "gbe2_led1", "gbe3_led1", "2p5gbe_led1",
+       "gbe0_led0", "gbe1_led0", "gbe2_led0", "gbe3_led0", "2p5gbe_led0",
+       "wf5g_led0",   "wf5g_led1",
+};
+static const char * const mt7988_usb_groups[] = {
+       "drv_vbus",
+       "drv_vbus_p1",
+};
+
+static const struct function_desc mt7988_functions[] = {
+       { "audio", mt7988_audio_groups, ARRAY_SIZE(mt7988_audio_groups) },
+       { "jtag", mt7988_jtag_groups, ARRAY_SIZE(mt7988_jtag_groups) },
+       { "int_usxgmii", mt7988_int_usxgmii_groups,
+         ARRAY_SIZE(mt7988_int_usxgmii_groups) },
+       { "pwm", mt7988_pwm_groups, ARRAY_SIZE(mt7988_pwm_groups) },
+       { "dfd", mt7988_dfd_groups, ARRAY_SIZE(mt7988_dfd_groups) },
+       { "i2c", mt7988_i2c_groups, ARRAY_SIZE(mt7988_i2c_groups) },
+       { "eth", mt7988_ethernet_groups, ARRAY_SIZE(mt7988_ethernet_groups) },
+       { "pcie", mt7988_pcie_groups, ARRAY_SIZE(mt7988_pcie_groups) },
+       { "pmic", mt7988_pmic_groups, ARRAY_SIZE(mt7988_pmic_groups) },
+       { "watchdog", mt7988_wdt_groups, ARRAY_SIZE(mt7988_wdt_groups) },
+       { "spi", mt7988_spi_groups, ARRAY_SIZE(mt7988_spi_groups) },
+       { "flash", mt7988_flash_groups, ARRAY_SIZE(mt7988_flash_groups) },
+       { "uart", mt7988_uart_groups, ARRAY_SIZE(mt7988_uart_groups) },
+       { "udi", mt7988_udi_groups, ARRAY_SIZE(mt7988_udi_groups) },
+       { "usb", mt7988_usb_groups, ARRAY_SIZE(mt7988_usb_groups) },
+       { "led", mt7988_led_groups, ARRAY_SIZE(mt7988_led_groups) },
+};
+
+static const struct mtk_eint_hw mt7988_eint_hw = {
+       .port_mask = 7,
+       .ports = 7,
+       .ap_num = ARRAY_SIZE(mt7988_pins),
+       .db_cnt = 16,
+};
+
+static const char * const mt7988_pinctrl_register_base_names[] = {
+       "gpio_base",     "iocfg_tr_base", "iocfg_br_base",
+       "iocfg_rb_base", "iocfg_lb_base", "iocfg_tl_base",
+};
+
+static struct mtk_pin_soc mt7988_data = {
+       .reg_cal = mt7988_reg_cals,
+       .pins = mt7988_pins,
+       .npins = ARRAY_SIZE(mt7988_pins),
+       .grps = mt7988_groups,
+       .ngrps = ARRAY_SIZE(mt7988_groups),
+       .funcs = mt7988_functions,
+       .nfuncs = ARRAY_SIZE(mt7988_functions),
+       .eint_hw = &mt7988_eint_hw,
+       .gpio_m = 0,
+       .ies_present = false,
+       .base_names = mt7988_pinctrl_register_base_names,
+       .nbase_names = ARRAY_SIZE(mt7988_pinctrl_register_base_names),
+       .bias_disable_set = mtk_pinconf_bias_disable_set,
+       .bias_disable_get = mtk_pinconf_bias_disable_get,
+       .bias_set = mtk_pinconf_bias_set,
+       .bias_get = mtk_pinconf_bias_get,
+       .pull_type = mt7988_pull_type,
+       .bias_set_combo = mtk_pinconf_bias_set_combo,
+       .bias_get_combo = mtk_pinconf_bias_get_combo,
+       .drive_set = mtk_pinconf_drive_set_rev1,
+       .drive_get = mtk_pinconf_drive_get_rev1,
+       .adv_pull_get = mtk_pinconf_adv_pull_get,
+       .adv_pull_set = mtk_pinconf_adv_pull_set,
+};
+
+static const struct of_device_id mt7988_pinctrl_of_match[] = {
+       {
+               .compatible = "mediatek,mt7988-pinctrl",
+       },
+       {}
+};
+
+static int mt7988_pinctrl_probe(struct platform_device *pdev)
+{
+       return mtk_moore_pinctrl_probe(pdev, &mt7988_data);
+}
+
+static struct platform_driver mt7988_pinctrl_driver = {
+       .driver = {
+               .name = "mt7988-pinctrl",
+               .of_match_table = mt7988_pinctrl_of_match,
+       },
+       .probe = mt7988_pinctrl_probe,
+};
+
+static int __init mt7988_pinctrl_init(void)
+{
+       return platform_driver_register(&mt7988_pinctrl_driver);
+}
+arch_initcall(mt7988_pinctrl_init);