[Change and sync linux version from OpenWRT]
[Description]
Change and sync linux version from OpenWRT
1. sync kernel to Openwrt21.02 : v5.4.188
2. sync mtk kernel patch from mtk_feed
[Release-log]
N/A
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986-clkitg.dtsi b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986-clkitg.dtsi
index 70b56f2..b148f6d 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986-clkitg.dtsi
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986-clkitg.dtsi
@@ -152,8 +152,8 @@
<&topckgen CK_TOP_SPINFI_BCK>,
<&topckgen CK_TOP_I2C_BCK>,
<&topckgen CK_TOP_PEXTP_TL>,
- <&topckgen CK_TOP_EMMC_250M>,
- <&topckgen CK_TOP_EMMC_416M>,
+ <&clk40m>,
+ <&clk40m>,
<&topckgen CK_TOP_F_26M_ADC_CK>,
<&topckgen CK_TOP_SYSAXI>,
<&topckgen CK_TOP_NETSYS_WED_MCU>,
@@ -176,8 +176,8 @@
<&topckgen CK_TOP_PWM_SEL>,
<&topckgen CK_TOP_I2C_SEL>,
<&topckgen CK_TOP_PEXTP_TL_SEL>,
- <&topckgen CK_TOP_EMMC_250M_SEL >,
- <&topckgen CK_TOP_EMMC_416M_SEL >,
+ <&clk40m>,
+ <&clk40m>,
<&topckgen CK_TOP_F_26M_ADC_SEL>,
<&topckgen CK_TOP_DRAMC_SEL>,
<&topckgen CK_TOP_DRAMC_MD32_SEL>,
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986a-2500wan-gsw-spim-nand-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986a-2500wan-gsw-spim-nand-rfb.dts
index cb80e99..6f2d966 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986a-2500wan-gsw-spim-nand-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986a-2500wan-gsw-spim-nand-rfb.dts
@@ -3,7 +3,7 @@
#include "mt7986a-pinctrl.dtsi"
#include "mt7986-spim-nand-partition.dtsi"
/ {
- model = "MediaTek MT7986b gsw RFB";
+ model = "MediaTek MT7986a gsw RFB";
compatible = "mediatek,mt7986a-2500wan-gsw-spim-snand-rfb";
chosen {
bootargs = "console=ttyS0,115200n1 loglevel=8 \
@@ -145,7 +145,7 @@
port6: port@6 {
compatible = "mediatek,mt753x-port";
- mediatek,ssc-on;
+ /* mediatek,ssc-on; */
reg = <6>;
phy-mode = "sgmii";
fixed-link {
@@ -157,7 +157,7 @@
&hnat {
mtketh-wan = "eth1";
- mtketh-lan = "lan";
+ mtketh-lan = "eth0";
mtketh-max-gmac = <2>;
status = "okay";
};
@@ -204,9 +204,6 @@
&wbsys {
mediatek,mtd-eeprom = <&factory 0x0000>;
status = "okay";
- pinctrl-names = "default", "dbdc";
- pinctrl-0 = <&wf_2g_5g_pins>;
- pinctrl-1 = <&wf_dbdc_pins>;
};
&pio {
@@ -226,39 +223,4 @@
mediatek,pull-down-adv = <0>; /* bias-disable */
};
};
-
- 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 = <MTK_DRIVE_4mA>;
- };
- };
-
- 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 = <MTK_DRIVE_4mA>;
- };
- };
-
};
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-2500wan-gsw-spim-nand-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-2500wan-gsw-spim-nand-rfb.dts
index 840b52f..d6eee2c 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-2500wan-gsw-spim-nand-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-2500wan-gsw-spim-nand-rfb.dts
@@ -4,7 +4,7 @@
#include "mt7986-spim-nand-partition.dtsi"
/ {
model = "MediaTek MT7986b gsw RFB";
- compatible = "mediatek,mt7986b-gsw-spim-snand-rfb";
+ compatible = "mediatek,mt7986b-2500wan-gsw-spim-snand-rfb";
chosen {
bootargs = "console=ttyS0,115200n1 loglevel=8 \
earlycon=uart8250,mmio32,0x11002000";
@@ -121,7 +121,7 @@
port6: port@6 {
compatible = "mediatek,mt753x-port";
- mediatek,ssc-on;
+ /* mediatek,ssc-on; */
reg = <6>;
phy-mode = "sgmii";
fixed-link {
@@ -133,7 +133,7 @@
&hnat {
mtketh-wan = "eth1";
- mtketh-lan = "lan";
+ mtketh-lan = "eth0";
mtketh-max-gmac = <2>;
status = "okay";
};
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-snfi-nand-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-snfi-nand-rfb.dts
index b260808..06efb78 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-snfi-nand-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm/boot/dts/mt7986b-snfi-nand-rfb.dts
@@ -4,7 +4,7 @@
#include "mt7986-snfi-nand-partition.dtsi"
/ {
model = "MediaTek MT7986b RFB";
- compatible = "mediatek,mt7986b-snfi-snand-rfb";
+ compatible = "mediatek,mt7986b-2500wan-snfi-snand-rfb";
chosen {
bootargs = "console=ttyS0,115200n1 loglevel=8 \
earlycon=uart8250,mmio32,0x11002000";
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7981-snfi-nand-2500wan-p5.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7981-snfi-nand-2500wan-p5.dts
index ad1dbfa..ea663eb 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7981-snfi-nand-2500wan-p5.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7981-snfi-nand-2500wan-p5.dts
@@ -2,7 +2,7 @@
#include "mt7981.dtsi"
/ {
model = "MediaTek MT7981 RFB";
- compatible = "mediatek,mt7981-snand-pcie-2500wan-p5-rfb";
+ compatible = "mediatek,mt7981-snfi-snand-pcie-2500wan-p5-rfb";
chosen {
bootargs = "console=ttyS0,115200n1 loglevel=8 \
earlycon=uart8250,mmio32,0x11002000";
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7981-spim-nand-2500wan-gmac2.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7981-spim-nand-2500wan-gmac2.dts
index 904d529..6c24709 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7981-spim-nand-2500wan-gmac2.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7981-spim-nand-2500wan-gmac2.dts
@@ -2,7 +2,7 @@
#include "mt7981.dtsi"
/ {
model = "MediaTek MT7981 RFB";
- compatible = "mediatek,mt7981-spim-snand-rfb";
+ compatible = "mediatek,mt7981-spim-snand-2500wan-gmac2-rfb";
chosen {
bootargs = "console=ttyS0,115200n1 loglevel=8 \
earlycon=uart8250,mmio32,0x11002000";
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986-clkitg.dtsi b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986-clkitg.dtsi
index 70b56f2..b148f6d 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986-clkitg.dtsi
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986-clkitg.dtsi
@@ -152,8 +152,8 @@
<&topckgen CK_TOP_SPINFI_BCK>,
<&topckgen CK_TOP_I2C_BCK>,
<&topckgen CK_TOP_PEXTP_TL>,
- <&topckgen CK_TOP_EMMC_250M>,
- <&topckgen CK_TOP_EMMC_416M>,
+ <&clk40m>,
+ <&clk40m>,
<&topckgen CK_TOP_F_26M_ADC_CK>,
<&topckgen CK_TOP_SYSAXI>,
<&topckgen CK_TOP_NETSYS_WED_MCU>,
@@ -176,8 +176,8 @@
<&topckgen CK_TOP_PWM_SEL>,
<&topckgen CK_TOP_I2C_SEL>,
<&topckgen CK_TOP_PEXTP_TL_SEL>,
- <&topckgen CK_TOP_EMMC_250M_SEL >,
- <&topckgen CK_TOP_EMMC_416M_SEL >,
+ <&clk40m>,
+ <&clk40m>,
<&topckgen CK_TOP_F_26M_ADC_SEL>,
<&topckgen CK_TOP_DRAMC_SEL>,
<&topckgen CK_TOP_DRAMC_MD32_SEL>,
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986a-2500wan-gsw-spim-nand-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986a-2500wan-gsw-spim-nand-rfb.dts
index 21d5dc8..6f2d966 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986a-2500wan-gsw-spim-nand-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986a-2500wan-gsw-spim-nand-rfb.dts
@@ -3,7 +3,7 @@
#include "mt7986a-pinctrl.dtsi"
#include "mt7986-spim-nand-partition.dtsi"
/ {
- model = "MediaTek MT7986b gsw RFB";
+ model = "MediaTek MT7986a gsw RFB";
compatible = "mediatek,mt7986a-2500wan-gsw-spim-snand-rfb";
chosen {
bootargs = "console=ttyS0,115200n1 loglevel=8 \
@@ -145,7 +145,7 @@
port6: port@6 {
compatible = "mediatek,mt753x-port";
- mediatek,ssc-on;
+ /* mediatek,ssc-on; */
reg = <6>;
phy-mode = "sgmii";
fixed-link {
@@ -157,7 +157,7 @@
&hnat {
mtketh-wan = "eth1";
- mtketh-lan = "lan";
+ mtketh-lan = "eth0";
mtketh-max-gmac = <2>;
status = "okay";
};
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-2500wan-gsw-spim-nand-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-2500wan-gsw-spim-nand-rfb.dts
index 840b52f..d6eee2c 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-2500wan-gsw-spim-nand-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-2500wan-gsw-spim-nand-rfb.dts
@@ -4,7 +4,7 @@
#include "mt7986-spim-nand-partition.dtsi"
/ {
model = "MediaTek MT7986b gsw RFB";
- compatible = "mediatek,mt7986b-gsw-spim-snand-rfb";
+ compatible = "mediatek,mt7986b-2500wan-gsw-spim-snand-rfb";
chosen {
bootargs = "console=ttyS0,115200n1 loglevel=8 \
earlycon=uart8250,mmio32,0x11002000";
@@ -121,7 +121,7 @@
port6: port@6 {
compatible = "mediatek,mt753x-port";
- mediatek,ssc-on;
+ /* mediatek,ssc-on; */
reg = <6>;
phy-mode = "sgmii";
fixed-link {
@@ -133,7 +133,7 @@
&hnat {
mtketh-wan = "eth1";
- mtketh-lan = "lan";
+ mtketh-lan = "eth0";
mtketh-max-gmac = <2>;
status = "okay";
};
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-snfi-nand-rfb.dts b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-snfi-nand-rfb.dts
index b260808..06efb78 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-snfi-nand-rfb.dts
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/mt7986b-snfi-nand-rfb.dts
@@ -4,7 +4,7 @@
#include "mt7986-snfi-nand-partition.dtsi"
/ {
model = "MediaTek MT7986b RFB";
- compatible = "mediatek,mt7986b-snfi-snand-rfb";
+ compatible = "mediatek,mt7986b-2500wan-snfi-snand-rfb";
chosen {
bootargs = "console=ttyS0,115200n1 loglevel=8 \
earlycon=uart8250,mmio32,0x11002000";
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_soc.c
index 1bf43b3..a50c25f 100755
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -485,10 +485,9 @@
mtk_w32(mac->hw, mcr, MTK_MAC_MCR(mac->id));
}
-static void mtk_mac_link_up(struct phylink_config *config,
- struct phy_device *phy,
- unsigned int mode, phy_interface_t interface,
- int speed, int duplex, bool tx_pause, bool rx_pause)
+static void mtk_mac_link_up(struct phylink_config *config, unsigned int mode,
+ phy_interface_t interface,
+ struct phy_device *phy)
{
struct mtk_mac *mac = container_of(config, struct mtk_mac,
phylink_config);
@@ -2679,7 +2678,7 @@
netif_start_queue(dev);
phy_node = of_parse_phandle(mac->of_node, "phy-handle", 0);
if (!phy_node) {
- regmap_write(eth->sgmii->regmap[0], SGMSYS_QPHY_PWR_STATE_CTRL, 0);
+ regmap_write(eth->sgmii->regmap[mac->id], SGMSYS_QPHY_PWR_STATE_CTRL, 0);
}
return 0;
}
@@ -2723,9 +2722,9 @@
val |= BMCR_PDOWN;
_mtk_mdio_write(eth, 0, 0, val);
}else {
- regmap_read(eth->sgmii->regmap[0], SGMSYS_QPHY_PWR_STATE_CTRL, &val);
+ regmap_read(eth->sgmii->regmap[mac->id], SGMSYS_QPHY_PWR_STATE_CTRL, &val);
val |= SGMII_PHYA_PWD;
- regmap_write(eth->sgmii->regmap[0], SGMSYS_QPHY_PWR_STATE_CTRL, val);
+ regmap_write(eth->sgmii->regmap[mac->id], SGMSYS_QPHY_PWR_STATE_CTRL, val);
}
//GMAC RX disable
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_soc.h b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_soc.h
index a31c4f6..4cd18bc 100755
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_soc.h
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_eth_soc.h
@@ -364,7 +364,7 @@
#define MTK_CHK_DDONE_EN BIT(28)
#define MTK_DMAD_WR_WDONE BIT(26)
#define MTK_WCOMP_EN BIT(24)
-#define MTK_RESV_BUF (0x40 << 16)
+#define MTK_RESV_BUF (0x80 << 16)
#define MTK_MUTLI_CNT (0x4 << 12)
/* QDMA Reset Index Register */
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_hnat/hnat.c b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_hnat/hnat.c
index 58a83b8..68aad32 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_hnat/hnat.c
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_hnat/hnat.c
@@ -351,7 +351,7 @@
/* enable FOE */
cr_set_bits(hnat_priv->ppe_base[ppe_id] + PPE_FLOW_CFG,
- BIT_UDP_IP4F_NAT_EN | BIT_IPV4_NAT_EN | BIT_IPV4_NAPT_EN |
+ BIT_IPV4_NAT_EN | BIT_IPV4_NAPT_EN |
BIT_IPV4_NAT_FRAG_EN | BIT_IPV4_HASH_GREK |
BIT_IPV4_DSL_EN | BIT_IPV6_6RD_EN |
BIT_IPV6_3T_ROUTE_EN | BIT_IPV6_5T_ROUTE_EN);
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_hnat/hnat_debugfs.c b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_hnat/hnat_debugfs.c
index a5403a8..69f1c21 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_hnat/hnat_debugfs.c
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_hnat/hnat_debugfs.c
@@ -1036,10 +1036,52 @@
return single_open(file, hnat_whnat_show, file->private_data);
}
+static ssize_t hnat_whnat_write(struct file *file, const char __user *buf,
+ size_t length, loff_t *offset)
+{
+ char line[64] = {0};
+ struct net_device *dev;
+ int enable;
+ char name[32];
+ size_t size;
+
+ if (length >= sizeof(line))
+ return -EINVAL;
+
+ if (copy_from_user(line, buf, length))
+ return -EFAULT;
+
+ if (sscanf(line, "%s %d", name, &enable) != 2)
+ return -EFAULT;
+
+ line[length] = '\0';
+
+ dev = dev_get_by_name(&init_net, name);
+
+ if (dev) {
+ if (enable) {
+ mtk_ppe_dev_register_hook(dev);
+ pr_info("register wifi extern if = %s\n", dev->name);
+ } else {
+ mtk_ppe_dev_unregister_hook(dev);
+ pr_info("unregister wifi extern if = %s\n", dev->name);
+ }
+ } else {
+ pr_info("no such device!\n");
+ }
+
+ size = strlen(line);
+ *offset += size;
+
+ return length;
+}
+
+
static const struct file_operations hnat_whnat_fops = {
.open = hnat_whnat_open,
.read = seq_read,
.llseek = seq_lseek,
+ .write = hnat_whnat_write,
.release = single_release,
};
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_hnat/hnat_nf_hook.c b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_hnat/hnat_nf_hook.c
index 24275a0..8d199ef 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_hnat/hnat_nf_hook.c
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/ethernet/mediatek/mtk_hnat/hnat_nf_hook.c
@@ -1027,7 +1027,6 @@
entry.bfib1.vpm = (entry.bfib1.vlan_layer) ? 1 : 0;
entry.bfib1.ttl = 1;
entry.bfib1.cah = 1;
- entry.bfib1.ka = 1;
entry.bfib1.time_stamp = (hnat_priv->data->version == MTK_HNAT_V4) ?
readl(hnat_priv->fe_base + 0x0010) & (0xFF) :
readl(hnat_priv->fe_base + 0x0010) & (0x7FFF);
@@ -1108,6 +1107,8 @@
return 0;
entry.bfib1.pkt_type = foe->udib1.pkt_type; /* Get packte type state*/
+ entry.bfib1.state = foe->udib1.state;
+
#if defined(CONFIG_MEDIATEK_NETSYS_V2)
entry.bfib1.sp = foe->udib1.sp;
#endif
@@ -1558,13 +1559,13 @@
if (!whnat)
entry.bfib1.state = BIND;
+ wmb();
memcpy(foe, &entry, sizeof(entry));
/*reset statistic for this entry*/
if (hnat_priv->data->per_flow_accounting)
memset(&hnat_priv->acct[skb_hnat_ppe(skb)][skb_hnat_entry(skb)],
0, sizeof(struct mib_entry));
- wmb();
skb_hnat_filled(skb) = HNAT_INFO_FILLED;
return 0;
@@ -1574,6 +1575,7 @@
{
struct foe_entry *entry;
struct ethhdr *eth;
+ struct hnat_bind_info_blk bfib1_tx;
if (skb_hnat_alg(skb) || !is_hnat_info_filled(skb) ||
!is_magic_tag_valid(skb) || !IS_SPACE_AVAILABLE_HEAD(skb))
@@ -1604,6 +1606,7 @@
return NF_ACCEPT;
eth = eth_hdr(skb);
+ memcpy(&bfib1_tx, &entry->bfib1, sizeof(entry->bfib1));
/*not bind multicast if PPE mcast not enable*/
if (!hnat_priv->data->mcast) {
@@ -1619,7 +1622,7 @@
/* Some mt_wifi virtual interfaces, such as apcli,
* will change the smac for specail purpose.
*/
- switch (entry->bfib1.pkt_type) {
+ switch (bfib1_tx.pkt_type) {
case IPV4_HNAPT:
case IPV4_HNAT:
entry->ipv4_hnapt.smac_hi = swab32(*((u32 *)eth->h_source));
@@ -1636,24 +1639,18 @@
}
if (skb->vlan_tci) {
- entry->bfib1.vlan_layer += 1;
- entry->bfib1.vpm = 1;
+ bfib1_tx.vlan_layer = 1;
+ bfib1_tx.vpm = 1;
if (IS_IPV4_GRP(entry)) {
entry->ipv4_hnapt.etype = htons(ETH_P_8021Q);
- if(entry->ipv4_hnapt.vlan1)
- entry->ipv4_hnapt.vlan2 = skb->vlan_tci;
- else
- entry->ipv4_hnapt.vlan1 = skb->vlan_tci;
+ entry->ipv4_hnapt.vlan1 = skb->vlan_tci;
} else if (IS_IPV6_GRP(entry)) {
entry->ipv6_5t_route.etype = htons(ETH_P_8021Q);
- if(entry->ipv6_5t_route.vlan1)
- entry->ipv6_5t_route.vlan2 = skb->vlan_tci;
- else
- entry->ipv6_5t_route.vlan1 = skb->vlan_tci;
+ entry->ipv6_5t_route.vlan1 = skb->vlan_tci;
}
} else {
- entry->bfib1.vpm = 0;
- entry->bfib1.vlan_layer = 0;
+ bfib1_tx.vpm = 0;
+ bfib1_tx.vlan_layer = 0;
}
/* MT7622 wifi hw_nat not support QoS */
@@ -1666,7 +1663,6 @@
entry->ipv4_hnapt.winfo.bssid = skb_hnat_bss_id(skb);
entry->ipv4_hnapt.winfo.wcid = skb_hnat_wc_id(skb);
#if defined(CONFIG_MEDIATEK_NETSYS_V2)
- entry->ipv4_hnapt.iblk2.fqos = (IS_HQOS_MODE) ? 1 : 0;
entry->ipv4_hnapt.iblk2.rxid = skb_hnat_rx_id(skb);
entry->ipv4_hnapt.iblk2.winfoi = 1;
#else
@@ -1676,8 +1672,8 @@
#endif
} else {
if (IS_GMAC1_MODE && !hnat_dsa_is_enable(hnat_priv)) {
- entry->bfib1.vpm = 1;
- entry->bfib1.vlan_layer = 1;
+ bfib1_tx.vpm = 1;
+ bfib1_tx.vlan_layer = 1;
if (FROM_GE_LAN(skb))
entry->ipv4_hnapt.vlan1 = 1;
@@ -1687,8 +1683,8 @@
if (IS_HQOS_MODE &&
(FROM_GE_LAN(skb) || FROM_GE_WAN(skb) || FROM_GE_VIRTUAL(skb))) {
- entry->bfib1.vpm = 0;
- entry->bfib1.vlan_layer = 1;
+ bfib1_tx.vpm = 0;
+ bfib1_tx.vlan_layer = 1;
entry->ipv4_hnapt.etype = htons(HQOS_MAGIC_TAG);
entry->ipv4_hnapt.vlan1 = skb_hnat_entry(skb);
entry->ipv4_hnapt.iblk2.fqos = 1;
@@ -1704,7 +1700,6 @@
entry->ipv6_5t_route.winfo.bssid = skb_hnat_bss_id(skb);
entry->ipv6_5t_route.winfo.wcid = skb_hnat_wc_id(skb);
#if defined(CONFIG_MEDIATEK_NETSYS_V2)
- entry->ipv6_5t_route.iblk2.fqos = (IS_HQOS_MODE) ? 1 : 0;
entry->ipv6_5t_route.iblk2.rxid = skb_hnat_rx_id(skb);
entry->ipv6_5t_route.iblk2.winfoi = 1;
#else
@@ -1714,8 +1709,8 @@
#endif
} else {
if (IS_GMAC1_MODE && !hnat_dsa_is_enable(hnat_priv)) {
- entry->bfib1.vpm = 1;
- entry->bfib1.vlan_layer = 1;
+ bfib1_tx.vpm = 1;
+ bfib1_tx.vlan_layer = 1;
if (FROM_GE_LAN(skb))
entry->ipv6_5t_route.vlan1 = 1;
@@ -1725,8 +1720,8 @@
if (IS_HQOS_MODE &&
(FROM_GE_LAN(skb) || FROM_GE_WAN(skb) || FROM_GE_VIRTUAL(skb))) {
- entry->bfib1.vpm = 0;
- entry->bfib1.vlan_layer = 1;
+ bfib1_tx.vpm = 0;
+ bfib1_tx.vlan_layer = 1;
entry->ipv6_5t_route.etype = htons(HQOS_MAGIC_TAG);
entry->ipv6_5t_route.vlan1 = skb_hnat_entry(skb);
entry->ipv6_5t_route.iblk2.fqos = 1;
@@ -1735,7 +1730,9 @@
entry->ipv6_5t_route.iblk2.dp = gmac_no;
}
- entry->bfib1.state = BIND;
+ bfib1_tx.state = BIND;
+ wmb();
+ memcpy(&entry->bfib1, &bfib1_tx, sizeof(bfib1_tx));
return NF_ACCEPT;
}
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/wireless/wifi_utility/Makefile b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/wireless/wifi_utility/Makefile
deleted file mode 100644
index 25cc107..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/wireless/wifi_utility/Makefile
+++ /dev/null
@@ -1,4 +0,0 @@
-#always build-in
-obj-y += mt_wifi_mtd.o
-obj-y += pci_mediatek_rbus.o
-
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/wireless/wifi_utility/mt_wifi_mtd.c b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/wireless/wifi_utility/mt_wifi_mtd.c
deleted file mode 100644
index 9294c73..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/wireless/wifi_utility/mt_wifi_mtd.c
+++ /dev/null
@@ -1,98 +0,0 @@
-#include <linux/version.h>
-#include <linux/module.h>
-#include <linux/types.h>
-#include <linux/init.h>
-#include <linux/kernel.h>
-#include <linux/err.h>
-#include <linux/slab.h>
-#include <asm/io.h>
-#include <linux/mtd/mtd.h>
-#include <linux/mtd/map.h>
-#include <linux/mtd/concat.h>
-#include <linux/mtd/partitions.h>
-#if defined (CONFIG_MIPS)
-#include <asm/addrspace.h>
-#endif
-
-int mt_mtd_write_nm_wifi(char *name, loff_t to, size_t len, const u_char *buf)
-{
- int ret = -1;
- size_t rdlen, wrlen;
- struct mtd_info *mtd;
- struct erase_info ei;
- u_char *bak = NULL;
-
- mtd = get_mtd_device_nm(name);
- if (IS_ERR(mtd))
- return -1;
-
- if (len > mtd->erasesize) {
- put_mtd_device(mtd);
- return -E2BIG;
- }
-
- bak = kmalloc(mtd->erasesize, GFP_KERNEL);
- if (bak == NULL) {
- put_mtd_device(mtd);
- return -ENOMEM;
- }
-
- ret = mtd_read(mtd, 0, mtd->erasesize, &rdlen, bak);
-
- if (ret != 0) {
- put_mtd_device(mtd);
- kfree(bak);
- return ret;
- }
-
- if (rdlen != mtd->erasesize)
- printk("warning: ra_mtd_write: rdlen is not equal to erasesize\n");
-
- memcpy(bak + to, buf, len);
-
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 19, 0))
- ei.mtd = mtd;
- ei.callback = NULL;
- ei.priv = 0;
-#endif
- ei.addr = 0;
- ei.len = mtd->erasesize;
- ret = mtd_erase(mtd, &ei);
-
- if (ret != 0) {
- put_mtd_device(mtd);
- kfree(bak);
- return ret;
- }
-
- ret = mtd_write(mtd, 0, mtd->erasesize, &wrlen, bak);
-
-
-
- put_mtd_device(mtd);
- kfree(bak);
- return ret;
-}
-EXPORT_SYMBOL(mt_mtd_write_nm_wifi);
-
-
-int mt_mtd_read_nm_wifi(char *name, loff_t from, size_t len, u_char *buf)
-{
- int ret;
- size_t rdlen;
- struct mtd_info *mtd;
-
- mtd = get_mtd_device_nm(name);
- if (IS_ERR(mtd))
- return -1;
-
- ret = mtd_read(mtd, from, len, &rdlen, buf);
-
- if (rdlen != len)
- printk("warning: ra_mtd_read_nm: rdlen is not equal to len\n");
-
- put_mtd_device(mtd);
-
- return ret;
-}
-EXPORT_SYMBOL(mt_mtd_read_nm_wifi);
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/wireless/wifi_utility/pci_mediatek_rbus.c b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/wireless/wifi_utility/pci_mediatek_rbus.c
deleted file mode 100644
index 840834d..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/net/wireless/wifi_utility/pci_mediatek_rbus.c
+++ /dev/null
@@ -1,361 +0,0 @@
-/*
- * Copyright (c) 2017 MediaTek Inc.
- * Author: Star Chang <star.chang@mediatek.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- */
-
-#include <linux/interrupt.h>
-#include <linux/irq.h>
-#include <linux/irqdomain.h>
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/of_address.h>
-#include <linux/of_irq.h>
-#include <linux/of_pci.h>
-#include <linux/of_platform.h>
-#include <linux/pci.h>
-#include <linux/platform_device.h>
-#include <linux/slab.h>
-#include <linux/resource.h>
-#include <linux/types.h>
-#include <linux/pinctrl/consumer.h>
-
-
-/*platform device & platform driver match name*/
-#define OF_RBUS_NAME "mediatek,wbsys"
-#define OF_PIO_NAME "mediatek,mt7622-pctl-a-syscfg"
-
-#define RBUS_VENDOR_ID_OFFSET 0
-#define RBUS_CHIP_ID_OFFSET 2
-#define RBUS_BAR_OFFSET 0x10
-#define RBUS_DEFAULT_CHIP_ID 0x7622
-#define RBUS_DEFAULT_VEND_ID 0x14c3
-#define RBUS_TSSI_CTRL_OFFSET 0x34
-#define RBUS_TSSI_CTRL_MASK 0x1
-#define RBUS_PA_LNA_CTRL_OFFSET 0x38
-#define RBUS_PA_LNA_CTRL_MASK 0x3
-
-#define GPIO_G2_MISC_OFFSET 0x00000AF0
-#define GPIO_G2_MISC_MASK 0xffffff00
-
-static char rbus_string[] = "rbus";
-unsigned int dev_second_irq = 0;
-unsigned int multi_intr_2nd = 0;
-unsigned int multi_intr_3rd = 0;
-unsigned int multi_intr_4th = 0;
-EXPORT_SYMBOL(dev_second_irq);
-EXPORT_SYMBOL(multi_intr_2nd);
-EXPORT_SYMBOL(multi_intr_3rd);
-EXPORT_SYMBOL(multi_intr_4th);
-
-static const struct of_device_id rbus_of_ids[] = {
- { .compatible = OF_RBUS_NAME, },
- { },
-};
-
-struct rbus_dev {
- char name[36];
- struct device *dev;
- struct resource *res;
- struct list_head resources;
- unsigned int base_addr;
- unsigned int irq;
- unsigned int chip_id;
- unsigned int vend_id;
-};
-
-enum {
- TSSI_MODE_DIS=0,
- TSSI_MODE_EN=1
-};
-
-enum {
- IPA_ILNA_MODE=0,
- IPA_ELNA_MODE=1,
- EPA_ELNA_MODE=2,
- EPA_ILNA_MODE=3
-};
-
-#define RBUS_IO_READ32(_A, _R, _pV) (*(_pV) = readl((void *)(_A + _R)))
-#define RBUS_IO_WRITE32(_A, _R, _V) writel(_V, (void *)(_A + _R))
-
-/*fake configure space*/
-static unsigned char rbus_conf_space[] = {
- 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x76, 0xc3, 0x14,
- 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x60, 0x61, 0x12, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x05, 0x78, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0xc3, 0x01, 0x08, 0x00, 0x00, 0x00,
- 0x10, 0x00, 0x02, 0x00, 0x40, 0x83, 0x00, 0x00, 0x10, 0x08, 0x00, 0x00, 0x12, 0x8c, 0x40, 0x01,
- 0x43, 0x00, 0x12, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-};
-
-static int
-rbus_tssi_config(struct platform_device *pdev, unsigned char mode)
-{
- struct device_node *node = NULL;
- unsigned long addr;
- unsigned int value = 0;
-
- node = of_find_compatible_node(NULL, NULL, OF_PIO_NAME);
- if (!node) {
- dev_err(&pdev->dev, "%s(): can't find node for %s\n", __func__, OF_PIO_NAME);
- return -ENODEV;
- }
-
- addr = (unsigned long) of_iomap(node, 0);
- RBUS_IO_READ32(addr, GPIO_G2_MISC_OFFSET, &value);
-
- if (mode == TSSI_MODE_EN) {
- value &= GPIO_G2_MISC_MASK;
- RBUS_IO_WRITE32(addr, GPIO_G2_MISC_OFFSET, value);
- }
-
- RBUS_IO_READ32(addr, GPIO_G2_MISC_OFFSET, &value);
- return 0;
-}
-
-static int
-rbus_pa_lan_config(struct platform_device *pdev, unsigned int devfn, unsigned char mode)
-{
- struct pinctrl *p;
- struct pinctrl_state *s;
- unsigned char state[32] = "";
- int ret = 0;
-
- if (mode != IPA_ELNA_MODE && mode != EPA_ELNA_MODE)
- return ret;
-
- p = devm_pinctrl_get(&pdev->dev);
-
- if (!p) {
- dev_err(&pdev->dev, "%s(): can't get pinctrl by dev:%p\n", __func__, &pdev->dev);
- return ret;
- }
-
- strncpy(state, "state_epa", sizeof("state_epa"));
-
- s = pinctrl_lookup_state(p, state);
-
- if (!s) {
- dev_err(&pdev->dev, "%s(): can't find pinctrl state: %s\n", __func__, state);
- return ret;
- }
-
- ret = pinctrl_select_state(p, s);
-
- if (ret < 0)
- dev_err(&pdev->dev, "%s(): pinctrl select to %s fail!, ret=%d\n", __func__, state, ret);
-
- return ret;
-}
-
-static void
-rbus_init_config(struct rbus_dev *rbus)
-{
- rbus_conf_space[RBUS_VENDOR_ID_OFFSET] = rbus->vend_id & 0xff;
- rbus_conf_space[RBUS_VENDOR_ID_OFFSET + 1] = (rbus->vend_id >> 8) & 0xff;
- rbus_conf_space[RBUS_CHIP_ID_OFFSET] = rbus->chip_id & 0xff;
- rbus_conf_space[RBUS_CHIP_ID_OFFSET + 1] = (rbus->chip_id >> 8) & 0xff;
- rbus_conf_space[RBUS_BAR_OFFSET + 3] = (rbus->base_addr >> 24) & 0xff;
- rbus_conf_space[RBUS_BAR_OFFSET + 2] = (rbus->base_addr >> 16) & 0xff;
- rbus_conf_space[RBUS_BAR_OFFSET + 1] = (rbus->base_addr >> 8) & 0xff;
-}
-
-static int
-rbus_read_config(struct pci_bus *bus, unsigned int devfn, int where,
- int size, u32 *value)
-{
- u32 *cr;
-
- if(where >= sizeof(rbus_conf_space))
- return PCIBIOS_BUFFER_TOO_SMALL;
-
- cr = (u32 *) &rbus_conf_space[where];
-
- if(devfn == 0)
- *value = *cr;
- return PCIBIOS_SUCCESSFUL;
-}
-
-static int
-rbus_write_config(struct pci_bus *bus, unsigned int devfn, int where,
- int size, u32 value)
-{
- int i;
- struct platform_device *pdev = bus->sysdata;
-
- if (devfn != 0)
- goto end;
-
- for (i = 0 ; i < size ; i++) {
- rbus_conf_space[where + i] = (value << (i * 8)) & 0xff;
- }
- /*handle vendor specific action*/
- switch(where) {
- case RBUS_TSSI_CTRL_OFFSET:
- rbus_tssi_config(pdev, (value & RBUS_TSSI_CTRL_MASK));
- break;
- case RBUS_PA_LNA_CTRL_OFFSET:
- rbus_pa_lan_config(pdev, devfn, (value & RBUS_PA_LNA_CTRL_MASK));
- break;
- default:
- break;
- }
-end:
- return PCIBIOS_SUCCESSFUL;
-}
-
-
-struct pci_ops rbus_ops = {
- .read = rbus_read_config,
- .write = rbus_write_config,
-};
-
-static int rbus_add_port(struct rbus_dev *rbus,
- struct platform_device *pdev)
-{
- struct pci_bus *bus;
- struct pci_dev *pci;
-
- bus = pci_scan_root_bus(&pdev->dev, 0, &rbus_ops,
- pdev, &rbus->resources);
-
- if (!bus)
- return -ENOMEM;
-
- pci_bus_add_devices(bus);
-
- pci = pci_scan_single_device(bus, 0);
-
- if (pci) {
- /*re-assign hw resource*/
- pci->irq = rbus->irq;
- pci->resource[0].start = rbus->res->start;
- pci->resource[0].end = rbus->res->end;
- }
- return 0;
-}
-
-static int rbus_add_res(struct rbus_dev *rbus)
-{
- struct device *dev = rbus->dev;
- struct platform_device *pdev = to_platform_device(dev);
- struct resource bus_range;
-
- INIT_LIST_HEAD(&rbus->resources);
- /*resource allocate*/
- rbus->res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
- rbus->irq = platform_get_irq(pdev, 0);
- rbus->base_addr = (unsigned int)rbus->res->start;
- if (rbus->chip_id == 0x7629)
- dev_second_irq = platform_get_irq(pdev, 1);
- else if (rbus->chip_id == 0x7986) {
- multi_intr_2nd = platform_get_irq(pdev, 1);
- multi_intr_3rd = platform_get_irq(pdev, 2);
- multi_intr_4th = platform_get_irq(pdev, 3);
- }
-
- pci_add_resource(&rbus->resources, rbus->res);
-
- bus_range = (struct resource) {
- .name = "rbus_range",
- .start = 0,
- .end = 0xff,
- .flags = IORESOURCE_BUS,
- };
-
- pci_add_resource(&rbus->resources, &bus_range);
- return 0;
-}
-
-/*
-*
-*/
-static int rbus_probe(struct platform_device *pdev)
-{
- struct device_node *node = NULL;
- struct rbus_dev *rbus;
-
- node = of_find_compatible_node(NULL, NULL, OF_RBUS_NAME);
- if (!node)
- return -ENODEV;
-
- rbus = devm_kzalloc(&pdev->dev, sizeof(*rbus), GFP_KERNEL);
- if (!rbus)
- return -ENOMEM;
-
- rbus->dev = &pdev->dev;
-
- if (of_property_read_u32_index(node, "chip_id", 0, &rbus->chip_id)) {
- rbus->chip_id = RBUS_DEFAULT_CHIP_ID;
- }
-
- if (of_property_read_u32_index(node, "vend_id", 0, &rbus->vend_id)) {
- rbus->vend_id = RBUS_DEFAULT_VEND_ID;
- }
- /*set priv_data to pdev*/
- snprintf(rbus->name,sizeof(rbus->name),"mediatek-rbus");
- platform_set_drvdata(pdev, rbus);
- rbus_add_res(rbus);
- /*init config, need run before add port*/
- rbus_init_config(rbus);
- /*add pci bus & device*/
- rbus_add_port(rbus, pdev);
- return -ENODEV;
-}
-
-/*
-*
-*/
-static int rbus_remove(struct platform_device *pdev)
-{
- struct rbus_dev *rbus = platform_get_drvdata(pdev);
- dev_err(&pdev->dev, "remove rbus name: %s\n", rbus->name);
- return 0;
-}
-
-
-/*
-* global resource preparing
-*/
-static struct platform_driver rbus_driver = {
- .probe = rbus_probe,
- .remove = rbus_remove,
- .driver = {
- .name = rbus_string,
- .owner = THIS_MODULE,
-#ifdef CONFIG_OF
- .of_match_table = rbus_of_ids,
-#endif /*CONFIG_OF*/
- },
-};
-
-/* PCIe driver does not allow module unload */
-static int __init rbus_init(void)
-{
- return platform_driver_probe(&rbus_driver, rbus_probe);
-}
-
-subsys_initcall_sync(rbus_init);
-
-MODULE_DESCRIPTION("Mediatek RBUS host controller driver");
-MODULE_LICENSE("GPL v2");
-
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/unusual-declaration.h b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/unusual-declaration.h
index f517e20..70db398 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/unusual-declaration.h
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/unusual-declaration.h
@@ -13,6 +13,7 @@
DEVICE_ATTR_DECLARED(RG_USB20_HSTX_SRCTRL);
DEVICE_ATTR_DECLARED(RG_USB20_DISCTH);
DEVICE_ATTR_DECLARED(RG_CHGDT_EN);
+ DEVICE_ATTR_DECLARED(reg);
#define HQA_INFORMACTION_COLLECTS() do {\
ECHO_HQA(USB20_PHY_USBPHYACR0, RG_USB20_INTR_EN, 1); \
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/unusual-statement.h b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/unusual-statement.h
index b929342..e898a26 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/unusual-statement.h
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/unusual-statement.h
@@ -13,4 +13,5 @@
UNUSUAL_DEVICE_ATTR(RG_USB20_HSTX_SRCTRL),
UNUSUAL_DEVICE_ATTR(RG_USB20_DISCTH),
UNUSUAL_DEVICE_ATTR(RG_CHGDT_EN),
+UNUSUAL_DEVICE_ATTR(reg),
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/xhci-mtk-chgdt-en.c b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/xhci-mtk-chgdt-en.c
index 13626c1..575680e 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/xhci-mtk-chgdt-en.c
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/xhci-mtk-chgdt-en.c
@@ -21,6 +21,7 @@
struct xhci_hcd_mtk *mtk = dev_get_drvdata(dev);
struct usb_hcd *hcd = mtk->hcd;
struct xhci_hcd *xhci = hcd_to_xhci(hcd);
+ struct device_node *node = dev->of_node;
ssize_t cnt = 0;
void __iomem *addr;
u32 val;
@@ -64,8 +65,8 @@
cnt += sprintf(buf + cnt,
"USB20 Port%i: 0x%08X\n", i, val);
- ret = query_phy_addr(dev->of_node,
- &index, &io, &length);
+ ret = query_phy_addr(node,
+ &index, &io, &length, PHY_TYPE_USB2);
if (ret && ret != -EACCES) {
if (ret == -EPERM)
cnt += sprintf(buf + cnt,
@@ -139,7 +140,7 @@
hqa_info(mtk, " params: %i %i %s\n",
port, index, str);
- ret = query_phy_addr(node, &index, &io, &length);
+ ret = query_phy_addr(node, &index, &io, &length, PHY_TYPE_USB2);
if (ret && ret != -EACCES)
goto error;
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/xhci-mtk-discth.c b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/xhci-mtk-discth.c
index 66a024a..83a94bd 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/xhci-mtk-discth.c
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/xhci-mtk-discth.c
@@ -21,6 +21,7 @@
struct xhci_hcd_mtk *mtk = dev_get_drvdata(dev);
struct usb_hcd *hcd = mtk->hcd;
struct xhci_hcd *xhci = hcd_to_xhci(hcd);
+ struct device_node *node = dev->of_node;
ssize_t cnt = 0;
void __iomem *addr;
u32 val;
@@ -66,8 +67,8 @@
cnt += sprintf(buf + cnt,
"USB20 Port%i: 0x%08X\n", i, val);
- ret = query_phy_addr(dev->of_node,
- &index, &io, &length);
+ ret = query_phy_addr(node,
+ &index, &io, &length, PHY_TYPE_USB2);
if (ret && ret != -EACCES) {
if (ret == -EPERM)
cnt += sprintf(buf + cnt,
@@ -141,7 +142,7 @@
hqa_info(mtk, " params: %i %i %s\n",
port, index, str);
- ret = query_phy_addr(node, &index, &io, &length);
+ ret = query_phy_addr(node, &index, &io, &length, PHY_TYPE_USB2);
if (ret && ret != -EACCES)
goto error;
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/xhci-mtk-hstx-srctrl.c b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/xhci-mtk-hstx-srctrl.c
index a7791cf..a387798 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/xhci-mtk-hstx-srctrl.c
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/xhci-mtk-hstx-srctrl.c
@@ -21,6 +21,7 @@
struct xhci_hcd_mtk *mtk = dev_get_drvdata(dev);
struct usb_hcd *hcd = mtk->hcd;
struct xhci_hcd *xhci = hcd_to_xhci(hcd);
+ struct device_node *node = dev->of_node;
ssize_t cnt = 0;
void __iomem *addr;
u32 val;
@@ -66,8 +67,8 @@
cnt += sprintf(buf + cnt,
"USB20 Port%i: 0x%08X\n", i, val);
- ret = query_phy_addr(dev->of_node,
- &index, &io, &length);
+ ret = query_phy_addr(node,
+ &index, &io, &length, PHY_TYPE_USB2);
if (ret && ret != -EACCES) {
if (ret == -EPERM)
cnt += sprintf(buf + cnt,
@@ -141,7 +142,7 @@
hqa_info(mtk, " params: %i %i %s\n",
port, index, str);
- ret = query_phy_addr(node, &index, &io, &length);
+ ret = query_phy_addr(node, &index, &io, &length, PHY_TYPE_USB2);
if (ret && ret != -EACCES)
goto error;
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/xhci-mtk-intr-en.c b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/xhci-mtk-intr-en.c
index acdaf8b..3922c73 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/xhci-mtk-intr-en.c
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/xhci-mtk-intr-en.c
@@ -21,6 +21,7 @@
struct xhci_hcd_mtk *mtk = dev_get_drvdata(dev);
struct usb_hcd *hcd = mtk->hcd;
struct xhci_hcd *xhci = hcd_to_xhci(hcd);
+ struct device_node *node = dev->of_node;
ssize_t cnt = 0;
void __iomem *addr;
u32 val;
@@ -65,8 +66,8 @@
cnt += sprintf(buf + cnt,
"USB20 Port%i: 0x%08X\n", i, val);
- ret = query_phy_addr(dev->of_node,
- &index, &io, &length);
+ ret = query_phy_addr(node,
+ &index, &io, &length, PHY_TYPE_USB2);
if (ret && ret != -EACCES) {
if (ret == -EPERM)
cnt += sprintf(buf + cnt,
@@ -140,7 +141,7 @@
hqa_info(mtk, " params: %i %i %s\n",
port, index, str);
- ret = query_phy_addr(node, &index, &io, &length);
+ ret = query_phy_addr(node, &index, &io, &length, PHY_TYPE_USB2);
if (ret && ret != -EACCES)
goto error;
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/xhci-mtk-reg.c b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/xhci-mtk-reg.c
new file mode 100644
index 0000000..366747d
--- /dev/null
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/xhci-mtk-reg.c
@@ -0,0 +1,392 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * xHCI host controller toolkit driver for intr-en
+ *
+ * Copyright (C) 2021 MediaTek Inc.
+ *
+ * Author: Zhanyong Wang <zhanyong.wang@mediatek.com>
+ */
+
+
+#include <linux/platform_device.h>
+#include <linux/module.h>
+#include <linux/slab.h>
+#include <linux/usb.h>
+#include "xhci-mtk.h"
+#include "xhci-mtk-test.h"
+#include "xhci-mtk-unusual.h"
+
+#define REGS_LIMIT_XHCI 0x1000
+#define REGS_LIMIT_MU3D 0x2e00
+static ssize_t reg_show(struct device *dev,
+ struct device_attribute *attr, char *buf)
+{
+ struct xhci_hcd_mtk *mtk = dev_get_drvdata(dev);
+ ssize_t cnt = 0;
+
+ cnt += sprintf(buf + cnt,
+ "SSUSB register operation interface help info.\n"
+ " rx - read xhci reg: offset [len]\n"
+ " rm - read mu3d reg: offset [len]\n"
+ " ri - read ippc reg: offset [len]\n"
+ " rp - read phy reg: offset [len]\n"
+ " wx - write xhci reg: offset value\n"
+ " wm - write mu3d reg: offset value\n"
+ " wi - write ippc reg: offset value\n"
+ " wp - write phy reg: offset value\n"
+ " sx - set xhci mac reg bits: offset bit_start mask value\n"
+ " sm - set mu3d mac reg bits: offset bit_start mask value\n"
+ " si - set ippc reg bits: offset bit_start mask value\n"
+ " sp - set phy reg bits: offset bit_start mask value\n"
+ " px - print xhci mac reg bits: offset bit_start mask\n"
+ " pm - print mu3d mac reg bits: offset bit_start mask\n"
+ " pi - print ippc reg bits: offset bit_start mask\n"
+ " pp - print phy reg bits: offset bit_start mask\n"
+ " NOTE: numbers should be HEX, except bit_star(DEC)\n");
+
+ if (mtk->hqa_pos) {
+ cnt += sprintf(buf + cnt, "%s", mtk->hqa_buf);
+ mtk->hqa_pos = 0;
+ }
+
+ return cnt;
+}
+
+/* base address: return value; limit is put into @limit */
+static void __iomem *get_reg_base_limit(struct xhci_hcd_mtk *mtk,
+ const char *buf, u32 *limit)
+{
+ struct usb_hcd *hcd = mtk->hcd;
+ struct xhci_hcd *xhci = hcd_to_xhci(hcd);
+ struct platform_device *device = to_platform_device(mtk->dev);
+ void __iomem *base = NULL;
+ struct device_node *node = mtk->dev->of_node;
+ u32 io = 0;
+ u32 range = 0;
+ u32 len = 0;
+ int index = 0;
+ int ret = 0;
+
+ switch (buf[1]) {
+ case 'x':
+ ret = query_reg_addr(device, &io, &range, "mac");
+ if (ret) break;
+
+ base = ioremap(io, range);
+
+ xhci_info(xhci, "xhci's reg: [0x%08X ~ 0x%08X]\n",
+ io, io + range);
+ hqa_info (mtk, "xhci's reg: [0x%08X ~ 0x%08X]\n",
+ io, io + range);
+ break;
+ case 'm':
+ if (!mtk->has_ippc)
+ device = to_platform_device(device->dev.parent);
+
+ ret = query_reg_addr(device, &io, &range, "mac");
+ if (ret) break;
+
+ if (mtk->has_ippc) {
+ io += REGS_LIMIT_XHCI;
+ range = REGS_LIMIT_MU3D;
+ }
+
+ base = ioremap(io, range);
+ xhci_info(xhci, "mu3d's reg: [0x%08X ~ 0x%08X]\n",
+ io, io + range);
+ hqa_info (mtk, "mu3d's reg: [0x%08X ~ 0x%08X]\n",
+ io, io + range);
+ break;
+ case 'i':
+ ret = query_reg_addr(device, &io, &range, "ippc");
+ if (ret) break;
+
+ base = ioremap(io, range);
+ xhci_info(xhci, "ippc's reg: [0x%08X ~ 0x%08X]\n",
+ io, io + range);
+ hqa_info (mtk, "ippc's reg: [0x%08X ~ 0x%08X]\n",
+ io, io + range);
+ break;
+ case 'p':
+ ret = query_phy_addr(node, &index, &io, &len, PHY_TYPE_USB3);
+ if (ret && ret != -EACCES) break;
+
+ range = io & 0x0000FFFF;
+ range += len;
+
+ io &= 0xFFFF0000;
+
+ base = ioremap(io, range);
+ xhci_info(xhci, "phy's reg: [0x%08X ~ 0x%08X]\n",
+ io, io + range);
+ hqa_info (mtk, "phy's reg: [0x%08X ~ 0x%08X]\n",
+ io, io + range);
+ break;
+ default:
+ base = NULL;
+ }
+
+ *limit = range;
+
+ return base;
+}
+
+static void ssusb_write_reg(struct xhci_hcd_mtk *mtk, const char *buf)
+{
+ struct usb_hcd *hcd = mtk->hcd;
+ struct xhci_hcd *xhci = hcd_to_xhci(hcd);
+ void __iomem *base;
+ u32 offset = 0;
+ u32 value = 0;
+ u32 old_val = 0;
+ u32 limit = 0;
+ u32 param;
+
+ param = sscanf(buf, "%*s 0x%x 0x%x", &offset, &value);
+ xhci_info(xhci, "params-%d (offset: %#x, value: %#x)\n",
+ param, offset, value);
+ hqa_info (mtk, "params-%d (offset: %#x, value: %#x)\n",
+ param, offset, value);
+
+ base = get_reg_base_limit(mtk, buf, &limit);
+ if (!base || (param != 2)) {
+ xhci_err(xhci, "params are invalid!\n");
+ hqa_info(mtk, "params are invalid since %p, %u!\n",
+ base, param);
+ return;
+ }
+
+ offset &= ~0x3; /* 4-bytes align */
+ if (offset >= limit) {
+ xhci_err(xhci, "reg's offset overrun!\n");
+ hqa_info(mtk, "reg's offset overrun since %u >= %u!\n",
+ offset, limit);
+ return;
+ }
+ old_val = readl(base + offset);
+ writel(value, base + offset);
+ xhci_info(xhci, "0x%8.8x : 0x%8.8x --> 0x%8.8x\n", offset, old_val,
+ readl(base + offset));
+ hqa_info (mtk, "0x%8.8x : 0x%8.8x --> 0x%8.8x\n", offset, old_val,
+ readl(base + offset));
+
+ base = (void __iomem *)((unsigned long)base & 0xFFFF0000);
+ iounmap(base);
+}
+
+static void read_single_reg(struct xhci_hcd_mtk *mtk,
+ void __iomem *base, u32 offset, u32 limit)
+{
+ struct usb_hcd *hcd = mtk->hcd;
+ struct xhci_hcd *xhci = hcd_to_xhci(hcd);
+ u32 value;
+
+ offset &= ~0x3; /* 4-bytes align */
+ if (offset >= limit) {
+ xhci_err(xhci, "reg's offset overrun!\n");
+ hqa_info(mtk, "reg's offset overrun since %u >= %u!\n",
+ offset, limit);
+ return;
+ }
+ value = readl(base + offset);
+ xhci_err(xhci, "0x%8.8x : 0x%8.8x\n", offset, value);
+ hqa_info(mtk, "0x%8.8x : 0x%8.8x\n", offset, value);
+}
+
+static void read_multi_regs(struct xhci_hcd_mtk *mtk,
+ void __iomem *base, u32 offset, u32 len, u32 limit)
+{
+ struct usb_hcd *hcd = mtk->hcd;
+ struct xhci_hcd *xhci = hcd_to_xhci(hcd);
+ int i;
+
+ /* at least 4 ints */
+ offset &= ~0xF;
+ len = (len + 0x3) & ~0x3;
+
+ if (offset + len > limit) {
+ xhci_err(xhci, "reg's offset overrun!\n");
+ hqa_info(mtk, "reg's offset overrun since %u > %u!\n",
+ offset + len, limit);
+ return;
+ }
+
+ len >>= 2;
+ xhci_info(xhci, "read regs [%#x, %#x)\n", offset, offset + (len << 4));
+ hqa_info (mtk, "read regs [%#x, %#x)\n", offset, offset + (len << 4));
+ for (i = 0; i < len; i++) {
+ xhci_err(xhci, "0x%8.8x : 0x%8.8x 0x%8.8x 0x%8.8x 0x%8.8x\n",
+ offset, readl(base + offset),
+ readl(base + offset + 0x4),
+ readl(base + offset + 0x8),
+ readl(base + offset + 0xc));
+ hqa_info(mtk, "0x%8.8x : 0x%8.8x 0x%8.8x 0x%8.8x 0x%8.8x\n",
+ offset, readl(base + offset),
+ readl(base + offset + 0x4),
+ readl(base + offset + 0x8),
+ readl(base + offset + 0xc));
+ offset += 0x10;
+ }
+}
+
+static void ssusb_read_regs(struct xhci_hcd_mtk *mtk, const char *buf)
+{
+ struct usb_hcd *hcd = mtk->hcd;
+ struct xhci_hcd *xhci = hcd_to_xhci(hcd);
+ void __iomem *base;
+ u32 offset = 0;
+ u32 len = 0;
+ u32 limit = 0;
+ u32 param;
+
+ param = sscanf(buf, "%*s 0x%x 0x%x", &offset, &len);
+ xhci_info(xhci, "params-%d (offset: %#x, len: %#x)\n",
+ param, offset, len);
+ hqa_info (mtk, "params-%d (offset: %#x, len: %#x)\n",
+ param, offset, len);
+
+ base = get_reg_base_limit(mtk, buf, &limit);
+ if (!base || !param) {
+ xhci_err(xhci, "params are invalid!\n");
+ hqa_info(mtk, "params are invalid since %p, %u!\n",
+ base, param);
+ return;
+ }
+
+ if (param == 1)
+ read_single_reg(mtk, base, offset, limit);
+ else
+ read_multi_regs(mtk, base, offset, len, limit);
+
+ base = (void __iomem *)((unsigned long)base & 0xFFFF0000);
+ iounmap(base);
+}
+
+static void ssusb_set_reg_bits(struct xhci_hcd_mtk *mtk, const char *buf)
+{
+ struct usb_hcd *hcd = mtk->hcd;
+ struct xhci_hcd *xhci = hcd_to_xhci(hcd);
+ void __iomem *base;
+ u32 offset = 0;
+ u32 bit_start = 0;
+ u32 mask = 0;
+ u32 value = 0;
+ u32 old_val = 0;
+ u32 new_val = 0;
+ u32 limit = 0;
+ u32 param;
+
+ param = sscanf(buf, "%*s 0x%x %d 0x%x 0x%x",
+ &offset, &bit_start, &mask, &value);
+ xhci_info(xhci, "params-%d (offset:%#x,bit_start:%d,mask:%#x,value:%#x)\n",
+ param, offset, bit_start, mask, value);
+ hqa_info(mtk, "params-%d (offset:%#x,bit_start:%d,mask:%#x,value:%#x)\n",
+ param, offset, bit_start, mask, value);
+
+ base = get_reg_base_limit(mtk, buf, &limit);
+ if (!base || (param != 4) || (bit_start > 31)) {
+ xhci_err(xhci, "params are invalid!\n");
+ hqa_info(mtk, "params are invalid since %p, %u, %u\n",
+ base, param, bit_start);
+ return;
+ }
+
+ offset &= ~0x3; /* 4-bytes align */
+ if (offset >= limit) {
+ xhci_err(xhci, "reg's offset overrun!\n");
+ hqa_info(mtk, "reg's offset overrun since %u >= %u!\n",
+ offset, limit);
+ return;
+ }
+ old_val = readl(base + offset);
+ new_val = old_val;
+ new_val &= ~(mask << bit_start);
+ new_val |= (value << bit_start);
+ writel(new_val, base + offset);
+ xhci_info(xhci, "0x%8.8x : 0x%8.8x --> 0x%8.8x\n", offset, old_val,
+ readl(base + offset));
+ hqa_info (mtk, "0x%8.8x : 0x%8.8x --> 0x%8.8x\n", offset, old_val,
+ readl(base + offset));
+
+ base = (void __iomem *)((unsigned long)base & 0xFFFF0000);
+ iounmap(base);
+}
+
+static void ssusb_print_reg_bits(struct xhci_hcd_mtk *mtk, const char *buf)
+{
+ struct usb_hcd *hcd = mtk->hcd;
+ struct xhci_hcd *xhci = hcd_to_xhci(hcd);
+ void __iomem *base;
+ u32 offset = 0;
+ u32 bit_start = 0;
+ u32 mask = 0;
+ u32 old_val = 0;
+ u32 new_val = 0;
+ u32 limit = 0;
+ u32 param;
+
+ param = sscanf(buf, "%*s 0x%x %d 0x%x", &offset, &bit_start, &mask);
+ xhci_info(xhci, "params-%d (offset: %#x, bit_start: %d, mask: %#x)\n",
+ param, offset, bit_start, mask);
+ hqa_info (mtk, "params-%d (offset: %#x, bit_start: %d, mask: %#x)\n",
+ param, offset, bit_start, mask);
+
+ base = get_reg_base_limit(mtk, buf, &limit);
+ if (!base || (param != 3) || (bit_start > 31)) {
+ xhci_err(xhci, "params are invalid!\n");
+ hqa_info(mtk, "params are invalid since %p, %u, %u\n",
+ base, param, bit_start);
+ return;
+ }
+
+ offset &= ~0x3; /* 4-bytes align */
+ if (offset >= limit) {
+ xhci_err(xhci, "reg's offset overrun!\n");
+ hqa_info(mtk, "reg's offset overrun since %u >= %u!\n",
+ offset, limit);
+ return;
+ }
+
+ old_val = readl(base + offset);
+ new_val = old_val;
+ new_val >>= bit_start;
+ new_val &= mask;
+ xhci_info(xhci, "0x%8.8x : 0x%8.8x (0x%x)\n", offset, old_val, new_val);
+ hqa_info (mtk, "0x%8.8x : 0x%8.8x (0x%x)\n", offset, old_val, new_val);
+
+ base = (void __iomem *)((unsigned long)base & 0xFFFF0000);
+ iounmap(base);
+}
+
+static ssize_t
+reg_store(struct device *dev, struct device_attribute *attr,
+ const char *buf, size_t n)
+{
+ struct xhci_hcd_mtk *mtk = dev_get_drvdata(dev);
+ struct usb_hcd *hcd = mtk->hcd;
+ struct xhci_hcd *xhci = hcd_to_xhci(hcd);
+
+ xhci_info(xhci, "cmd:%s\n", buf);
+ hqa_info (mtk, "cmd:%s\n", buf);
+
+ switch (buf[0]) {
+ case 'w':
+ ssusb_write_reg(mtk, buf);
+ break;
+ case 'r':
+ ssusb_read_regs(mtk, buf);
+ break;
+ case 's':
+ ssusb_set_reg_bits(mtk, buf);
+ break;
+ case 'p':
+ ssusb_print_reg_bits(mtk, buf);
+ break;
+ default:
+ xhci_err(xhci, "No such cmd\n");
+ hqa_info(mtk, "No such cmd\n");
+ }
+
+ return n;
+}
+DEVICE_ATTR_RW(reg);
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/xhci-mtk-term-vref.c b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/xhci-mtk-term-vref.c
index 3b40ef9..31861be 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/xhci-mtk-term-vref.c
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/xhci-mtk-term-vref.c
@@ -22,6 +22,7 @@
struct xhci_hcd_mtk *mtk = dev_get_drvdata(dev);
struct usb_hcd *hcd = mtk->hcd;
struct xhci_hcd *xhci = hcd_to_xhci(hcd);
+ struct device_node *node = dev->of_node;
ssize_t cnt = 0;
void __iomem *addr;
u32 val;
@@ -67,8 +68,8 @@
cnt += sprintf(buf + cnt,
"USB20 Port%i: 0x%08X\n", i, val);
- ret = query_phy_addr(dev->of_node,
- &index, &io, &length);
+ ret = query_phy_addr(node,
+ &index, &io, &length, PHY_TYPE_USB2);
if (ret && ret != -EACCES) {
if (ret == -EPERM)
cnt += sprintf(buf + cnt,
@@ -143,7 +144,7 @@
hqa_info(mtk, " params: %i %i %s\n",
port, index, str);
- ret = query_phy_addr(node, &index, &io, &length);
+ ret = query_phy_addr(node, &index, &io, &length, PHY_TYPE_USB2);
if (ret && ret != -EACCES)
goto error;
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/xhci-mtk-test.c b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/xhci-mtk-test.c
index 4939e55..36564d2 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/xhci-mtk-test.c
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/xhci-mtk-test.c
@@ -16,6 +16,8 @@
#include <linux/kobject.h>
#include <linux/of.h>
#include <linux/of_address.h>
+#include <linux/usb.h>
+#include <linux/usb/hcd.h>
#include <dt-bindings/phy/phy.h>
#include "../core/usb.h"
#include "xhci-mtk.h"
@@ -32,20 +34,50 @@
int argc, char **argv);
static int t_test_enumerate_bus(struct xhci_hcd_mtk *mtk,
int argc, char **argv);
+static int t_debug_port(struct xhci_hcd_mtk *mtk, int argc, char **argv);
static int t_power_u1u2(struct xhci_hcd_mtk *mtk, int argc, char **argv);
#define PORT_PLS_VALUE(p) ((p >> 5) & 0xf)
+/* ip_xhci_cap register */
+#define CAP_U3_PORT_NUM(p) ((p) & 0xff)
+#define CAP_U2_PORT_NUM(p) (((p) >> 8) & 0xff)
#define MAX_NAME_SIZE 32
#define MAX_ARG_SIZE 4
+struct class_info {
+ int class;
+ char *class_name;
+};
+
+static const struct class_info clas_info[] = {
+ /* max. 5 chars. per name string */
+ {USB_CLASS_PER_INTERFACE, ">ifc"},
+ {USB_CLASS_AUDIO, "audio"},
+ {USB_CLASS_COMM, "comm."},
+ {USB_CLASS_HID, "HID"},
+ {USB_CLASS_PHYSICAL, "PID"},
+ {USB_CLASS_STILL_IMAGE, "still"},
+ {USB_CLASS_PRINTER, "print"},
+ {USB_CLASS_MASS_STORAGE, "stor."},
+ {USB_CLASS_HUB, "hub"},
+ {USB_CLASS_CDC_DATA, "data"},
+ {USB_CLASS_CSCID, "scard"},
+ {USB_CLASS_CONTENT_SEC, "c-sec"},
+ {USB_CLASS_VIDEO, "video"},
+ {USB_CLASS_WIRELESS_CONTROLLER, "wlcon"},
+ {USB_CLASS_MISC, "misc"},
+ {USB_CLASS_APP_SPEC, "app."},
+ {USB_CLASS_VENDOR_SPEC, "vend."},
+ {-1, "unk."} /* leave as last */
+};
+
struct hqa_test_cmd {
char name[MAX_NAME_SIZE];
int (*cb_func)(struct xhci_hcd_mtk *mtk, int argc, char **argv);
char *discription;
};
-
struct hqa_test_cmd xhci_mtk_hqa_cmds[] = {
{"test.j", &t_test_j, "Test_J"},
{"test.k", &t_test_k, "Test_K"},
@@ -56,10 +88,20 @@
{"test.enumbus", &t_test_enumerate_bus, "Enumerate Bus"},
{"test.getdesc", &t_test_get_device_descriptor,
"Get Device Discriptor"},
+ {"test.debug", &t_debug_port, "debug Port infor"},
{"pm.u1u2", &t_power_u1u2, "Port U1,U2"},
{"", NULL, ""},
};
+static const char *class_decode(const int class)
+{
+ int i;
+
+ for (i = 0; clas_info[i].class != -1; i++)
+ if (clas_info[i].class == class)
+ break;
+ return clas_info[i].class_name;
+}
int call_hqa_func(struct xhci_hcd_mtk *mtk, char *buf)
{
@@ -256,6 +298,82 @@
return retval;
}
+static void show_string(struct usb_device *udev, char *id, char *string)
+{
+ if (!string)
+ return;
+ dev_info(&udev->dev, "%s: %s\n", id, string);
+}
+
+static void announce_device(struct usb_device *udev)
+{
+ u16 bcdDevice = le16_to_cpu(udev->descriptor.bcdDevice);
+
+ dev_info(&udev->dev,
+ "New USB device found, idVendor=%04x, idProduct=%04x, bcdDevice=%2x.%02x\n",
+ le16_to_cpu(udev->descriptor.idVendor),
+ le16_to_cpu(udev->descriptor.idProduct),
+ bcdDevice >> 8, bcdDevice & 0xff);
+ dev_info(&udev->dev,
+ "New USB device strings: Mfr=%d, Product=%d, SerialNumber=%d\n",
+ udev->descriptor.iManufacturer,
+ udev->descriptor.iProduct,
+ udev->descriptor.iSerialNumber);
+ show_string(udev, "Product", udev->product);
+ show_string(udev, "Manufacturer", udev->manufacturer);
+ show_string(udev, "SerialNumber", udev->serial);
+}
+
+static int t_debug_port(struct xhci_hcd_mtk *mtk, int argc, char **argv)
+{
+ struct usb_hcd *hcd = mtk->hcd;
+ struct xhci_hcd *xhci = hcd_to_xhci(hcd);
+ struct usb_device *usb2_rh;
+ struct usb_device *udev;
+ long port_id;
+ const struct usb_device_descriptor *desc;
+ u16 bcdUSB;
+ u16 bcdDevice;
+
+ port_id = 2;
+
+ if (argc > 1 && kstrtol(argv[1], 10, &port_id))
+ xhci_err(xhci, "mu3h %s get port-id failed\n", __func__);
+
+ xhci_err(xhci, "mu3h %s test port%d\n", __func__, (int)port_id);
+
+
+ usb2_rh = hcd->self.root_hub;
+ udev = usb_hub_find_child(usb2_rh, port_id - 1);
+ if (udev == NULL) {
+ xhci_err(xhci, "mu3h %s usb_hub_find_child(..., %i) failed\n", __func__, (int)port_id);
+ return -EPERM;
+ }
+
+ dev_info(&udev->dev, "%s\n", usb_state_string(udev->state));
+ if (udev && udev->state == USB_STATE_CONFIGURED) {
+ announce_device(udev);
+ desc = (const struct usb_device_descriptor *)&udev->descriptor;
+ bcdUSB = le16_to_cpu(desc->bcdUSB);
+ bcdDevice = le16_to_cpu(desc->bcdDevice);
+
+ dev_info(&udev->dev, "D: Ver=%2x.%02x Cls=%02x(%-5s) Sub=%02x Prot=%02x MxPS=%2d #Cfgs=%3d\n",
+ bcdUSB >> 8, bcdUSB & 0xff,
+ desc->bDeviceClass,
+ class_decode(desc->bDeviceClass),
+ desc->bDeviceSubClass,
+ desc->bDeviceProtocol,
+ desc->bMaxPacketSize0,
+ desc->bNumConfigurations);
+
+ dev_info(&udev->dev, "P: Vendor=%04x ProdID=%04x Rev=%2x.%02x\n",
+ le16_to_cpu(desc->idVendor),
+ le16_to_cpu(desc->idProduct),
+ bcdDevice >> 8, bcdDevice & 0xff);
+ }
+
+ return 0;
+}
static int t_test_suspend(struct xhci_hcd_mtk *mtk, int argc, char **argv)
{
@@ -447,33 +565,43 @@
u32 val;
u32 ports;
int len = 0;
- int bufLen = PAGE_SIZE;
struct hqa_test_cmd *hqa;
int i;
- len += snprintf(buf+len, bufLen-len, "info:\n");
- len += snprintf(buf+len, bufLen-len,
+ len += sprintf(buf+len, "info:\n");
+ len += sprintf(buf+len,
"\techo -n item port-id > hqa\n");
- len += snprintf(buf+len, bufLen-len,
+ len += sprintf(buf+len,
"\tport-id : based on number of usb3-port, e.g.\n");
- len += snprintf(buf+len, bufLen-len,
+ len += sprintf(buf+len,
"\t\txHCI with 1 u3p, 2 u2p: 1st u2p-id is 2(1+1), 2nd is 3\n");
- len += snprintf(buf+len, bufLen-len, "items:\n");
+ len += sprintf(buf+len, "items:\n");
for (i = 0; i < ARRAY_SIZE(xhci_mtk_hqa_cmds); i++) {
hqa = &xhci_mtk_hqa_cmds[i];
- len += snprintf(buf+len, bufLen-len,
+ len += sprintf(buf+len,
"\t%s: %s\n", hqa->name, hqa->discription);
}
ports = mtk->num_u3_ports + mtk->num_u2_ports;
- for (i = mtk->num_u3_ports + 1; i <= ports; i++) {
- addr = &xhci->op_regs->port_power_base +
+ for (i = 1; i <= ports; i++) {
+ addr = &xhci->op_regs->port_status_base +
NUM_PORT_REGS * ((i - 1) & 0xff);
val = readl(addr);
- len += snprintf(buf+len, bufLen-len,
- "USB20 Port%i PORTMSC[31,28] 4b'0000: 0x%08X\n",
- i, val);
+ if (i <= mtk->num_u3_ports)
+ len += sprintf(buf + len,
+ "USB30 Port%i: 0x%08X\n", i, val);
+ else {
+ len += sprintf(buf + len,
+ "USB20 Port%i: 0x%08X\n", i, val);
+
+ addr = &xhci->op_regs->port_power_base +
+ NUM_PORT_REGS * ((i - 1) & 0xff);
+ val = readl(addr);
+ len += sprintf(buf+len,
+ "USB20 Port%i PORTMSC[31,28] 4b'0000: 0x%08X\n",
+ i, val);
+ }
}
return len;
@@ -511,17 +639,17 @@
int ports;
cnt += sprintf(buf + cnt, "usb3hqa usage:\n");
- cnt += sprintf(buf + cnt, " echo u3port >usb3hqa\n");
+ cnt += sprintf(buf + cnt, " echo [u3port] >usb3hqa\n");
ports = mtk->num_u3_ports + mtk->num_u2_ports;
for (i = 1; i <= ports; i++) {
addr = &xhci->op_regs->port_status_base +
NUM_PORT_REGS * ((i - 1) & 0xff);
val = readl(addr);
- if (i < mtk->num_u3_ports)
+ if (i <= mtk->num_u3_ports)
cnt += sprintf(buf + cnt,
"USB30 Port%i: 0x%08X\n", i, val);
- else
+ else
cnt += sprintf(buf + cnt,
"USB20 Port%i: 0x%08X\n", i, val);
}
@@ -554,8 +682,8 @@
words = sscanf(buf, "%d", &port);
if ((words != 1) ||
(port < 1 || port > mtk->num_u3_ports)) {
- hqa_info(mtk, "usb3hqa: param number:%i, port:%i failure\n",
- words, port);
+ hqa_info(mtk, "usb3hqa: param number:%i, port:%i (%i) failure\n",
+ words, port, mtk->num_u3_ports);
return -EINVAL;
}
@@ -580,9 +708,16 @@
int hqa_create_attr(struct device *dev)
{
- int idx, err = 0;
- int num = ARRAY_SIZE(mu3h_hqa_attr_list);
struct xhci_hcd_mtk *mtk = dev_get_drvdata(dev);
+ struct usb_hcd *hcd = mtk->hcd;
+ struct mu3c_ippc_regs __iomem *ippc = mtk->ippc_regs;
+ struct platform_device *device = to_platform_device(dev);
+ int num = ARRAY_SIZE(mu3h_hqa_attr_list);
+ int idx;
+ int err = 0;
+ u32 value;
+ u32 addr = hcd->rsrc_start;
+ u32 length;
if (dev == NULL || mtk == NULL)
return -EINVAL;
@@ -593,6 +728,19 @@
if (!mtk->hqa_buf)
return -ENOMEM;
+ if (!mtk->has_ippc) {
+ err = query_reg_addr(device, &addr, &length, "ippc");
+ if (err)
+ return -EINVAL;
+
+ mtk->ippc_regs = ioremap(addr, length);
+ }
+
+ ippc = mtk->ippc_regs;
+ value = readl(&ippc->ip_xhci_cap);
+ mtk->num_u3_ports = CAP_U3_PORT_NUM(value);
+ mtk->num_u2_ports = CAP_U2_PORT_NUM(value);
+
for (idx = 0; idx < num; idx++) {
err = device_create_file(dev, mu3h_hqa_attr_list[idx]);
if (err)
@@ -614,4 +762,8 @@
kfree(mtk->hqa_buf);
mtk->hqa_size = 0;
mtk->hqa_pos = 0;
+ if (!mtk->has_ippc) {
+ iounmap(mtk->ippc_regs);
+ mtk->ippc_regs = NULL;
+ }
}
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/xhci-mtk-test.h b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/xhci-mtk-test.h
index 83e1542..7f76d29 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/xhci-mtk-test.h
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/xhci-mtk-test.h
@@ -15,6 +15,8 @@
#ifdef CONFIG_USB_XHCI_MTK_DEBUGFS
int hqa_create_attr(struct device *dev);
void hqa_remove_attr(struct device *dev);
+void ssusb_remap_ip_regs(struct device *dev);
+
#else
static inline int hqa_create_attr(struct device *dev)
{
@@ -23,5 +25,8 @@
static inline void hqa_remove_attr(struct device *dev)
{
}
+static inline void ssusb_remap_ip_regs(struct device *dev)
+{
+}
#endif
#endif /* __XHCI_MTK_TEST_H */
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/xhci-mtk-unusual.c b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/xhci-mtk-unusual.c
index 14d7d0b..01029fb 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/xhci-mtk-unusual.c
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/xhci-mtk-unusual.c
@@ -13,7 +13,6 @@
#include <linux/usb.h>
#include <linux/of.h>
#include <linux/of_address.h>
-#include <dt-bindings/phy/phy.h>
#include "xhci-mtk.h"
#include "xhci-mtk-test.h"
#include "xhci-mtk-unusual.h"
@@ -127,42 +126,81 @@
return value;
}
-int query_phy_addr(struct device_node *np, int *start, u32 *addr, u32 *length)
+int query_phy_addr(struct device_node *np, int *start, u32 *addr, u32 *length, int type)
{
int ret = -EPERM;
struct of_phandle_args args;
struct resource res;
+ struct device_node *node = np;
int numphys = 0;
int index;
- if (start == NULL || addr == NULL || length == NULL)
+ if (np == NULL || start == NULL || addr == NULL || length == NULL)
return -EINVAL;
- numphys = of_count_phandle_with_args(np, "phys", "#phy-cells");
- for ( index = *start; (numphys > 0) && index < numphys; index++) {
- ret = of_parse_phandle_with_args(np, "phys", "#phy-cells",
+ while (node) {
+ numphys = of_count_phandle_with_args(node,
+ "phys", "#phy-cells");
+ for (index = *start;
+ (numphys > 0) && index < numphys; index++) {
+ ret = of_parse_phandle_with_args(node,
+ "phys", "#phy-cells",
index, &args);
- if (ret < 0)
- break;
+ if (ret < 0)
+ break;
+
+ if (args.args[0] == type) {
+ ret = of_address_to_resource(args.np,
+ 0, &res);
+ if (ret < 0) {
+ of_node_put(args.np);
+ break;
+ }
- if (args.args[0] == PHY_TYPE_USB2) {
- ret = of_address_to_resource(args.np, 0, &res);
- if (ret < 0) {
+ *addr = res.start;
+ *length = (u32)resource_size(&res);
+ *start = index;
+ if (!of_device_is_available(args.np))
+ ret = -EACCES;
+
of_node_put(args.np);
break;
}
+ }
+ if (index < numphys)
+ break;
- *addr = res.start;
- *length = (u32)resource_size(&res);
- *start = index;
- if (!of_device_is_available(args.np))
- ret = -EACCES;
+ node = node->parent;
+ }
+
+ ret = index < numphys ? ret : -EPERM;
+ return ret;
+}
- of_node_put(args.np);
+int query_reg_addr(struct platform_device *pdev, u32 *addr, u32 *length, const char* name)
+{
+ int ret = -EPERM;
+ struct resource *pres;
+ struct platform_device *device = pdev;
+
+ if (pdev == NULL || addr == NULL || length == NULL)
+ return -EINVAL;
+
+ while (device) {
+ pres = platform_get_resource_byname(device, IORESOURCE_MEM, name);
+ if (pres != NULL) {
+ *addr = pres->start;
+ *length = (u32)resource_size(pres);
+ ret = 0;
break;
}
+
+ if (device->dev.parent == NULL)
+ break;
+
+ device = to_platform_device(device->dev.parent);
}
- ret = index < numphys ? ret : -EPERM;
return ret;
}
+
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/xhci-mtk-unusual.h b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/xhci-mtk-unusual.h
index ddbf4e3..0bc6dd8 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/xhci-mtk-unusual.h
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/xhci-mtk-unusual.h
@@ -10,6 +10,8 @@
#ifndef __XHCI_MTK_UNUSUAL_H
#define __XHCI_MTK_UNUSUAL_H
+#include <dt-bindings/phy/phy.h>
+
#define HQA_PREFIX_SIZE 4*1024
#define BIT_WIDTH_1 1
@@ -131,7 +133,10 @@
u32 shift, const char *buf);
u32 bin2str(u32 value, u32 width, char *buffer);
int query_phy_addr(struct device_node *np, int *start,
- u32 *addr, u32 *length);
+ u32 *addr, u32 *length, int type);
+int query_reg_addr(struct platform_device *pdev, u32 *addr,
+ u32 *length, const char* name);
+
static inline int remaining(struct xhci_hcd_mtk *mtk)
{
u32 surplus = 0;
@@ -178,7 +183,12 @@
return 0;
};
static inline int query_phy_addr(struct device_node *np, int *start,
- u32 *addr, u32 *length)
+ u32 *addr, u32 *length, int type)
+{
+ return -EPERM;
+}
+static inline int query_reg_addr(struct platform_device *pdev, u32 *addr,
+ u32 *length, const char* name)
{
return -EPERM;
}
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/xhci-mtk-vrt-vref.c b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/xhci-mtk-vrt-vref.c
index ec0ef75..1a6d611 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/xhci-mtk-vrt-vref.c
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/drivers/usb/host/xhci-mtk-vrt-vref.c
@@ -21,6 +21,7 @@
struct xhci_hcd_mtk *mtk = dev_get_drvdata(dev);
struct usb_hcd *hcd = mtk->hcd;
struct xhci_hcd *xhci = hcd_to_xhci(hcd);
+ struct device_node *node = dev->of_node;
ssize_t cnt = 0;
void __iomem *addr;
u32 val;
@@ -66,8 +67,8 @@
cnt += sprintf(buf + cnt,
"USB20 Port%i: 0x%08X\n", i, val);
- ret = query_phy_addr(dev->of_node,
- &index, &io, &length);
+ ret = query_phy_addr(node,
+ &index, &io, &length, PHY_TYPE_USB2);
if (ret && ret != -EACCES) {
if (ret == -EPERM)
cnt += sprintf(buf + cnt,
@@ -95,7 +96,7 @@
}
if (mtk->hqa_pos) {
- cnt += sprintf(buf + cnt, "%s", mtk->hqa_buf);
+ cnt += sprintf(buf + cnt, "%s", mtk->hqa_buf);
mtk->hqa_pos = 0;
}
@@ -142,8 +143,8 @@
hqa_info(mtk, " params: %i %i %s\n",
port, index, str);
- ret = query_phy_addr(node, &index, &io, &length);
- if (ret && ret != -EACCES)
+ ret = query_phy_addr(node, &index, &io, &length, PHY_TYPE_USB2);
+ if (ret && ret != -EACCES)
goto error;
io += (length != 0x100) ? 0x300 : 0;
@@ -156,7 +157,7 @@
iounmap(addr);
ret = n;
-
+
error:
kfree(str);
return ret;
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/include/uapi/linux/mtk_nl80211_inc/mtk_vendor_nl80211.h b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/include/uapi/linux/mtk_nl80211_inc/mtk_vendor_nl80211.h
deleted file mode 100755
index 22ada41..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/include/uapi/linux/mtk_nl80211_inc/mtk_vendor_nl80211.h
+++ /dev/null
@@ -1,667 +0,0 @@
-/*
- * Copyright (c) [2020], MediaTek Inc. All rights reserved.
- *
- * This software/firmware and related documentation ("MediaTek Software") are
- * protected under relevant copyright laws.
- * The information contained herein is confidential and proprietary to
- * MediaTek Inc. and/or its licensors.
- * Except as otherwise provided in the applicable licensing terms with
- * MediaTek Inc. and/or its licensors, any reproduction, modification, use or
- * disclosure of MediaTek Software, and information contained herein, in whole
- * or in part, shall be strictly prohibited.
-*/
-
-#ifndef __MTK_VENDOR_NL80211_H
-#define __MTK_VENDOR_NL80211_H
-/*
- * This header file defines the userspace API to the wireless stack. Please
- * be careful not to break things - i.e. don't move anything around or so
- * unless you can demonstrate that it breaks neither API nor ABI.
- *
- */
-
-#include <linux/types.h>
-
-#ifndef GNU_PACKED
-#define GNU_PACKED __attribute__ ((packed))
-#endif /* GNU_PACKED */
-
-#define MTK_NL80211_VENDOR_ID 0x0ce7
-
-/**
- * enum mtk_nl80211_vendor_commands - supported mtk nl80211 vendor commands
- *
- * @MTK_NL80211_VENDOR_SUBCMD_UNSPEC: Reserved value 0
- * @MTK_NL80211_VENDOR_SUBCMD_TEST: Test for nl80211command/event
- * @MTK_NL80211_VENDOR_SUBCMD_AMNT_CTRL = 0x000000ae:
- * @MTK_NL80211_VENDOR_SUBCMD_CSI_CTRL = 0x000000c2:
- * @MTK_NL80211_VENDOR_SUBCMD_RFEATURE_CTRL:
- * @MTK_NL80211_VENDOR_SUBCMD_WIRELESS_CTRL:
- * @MTK_NL80211_VENDOR_SUBCMD_SET_DOT11V_WNM:
- * @MTK_NL80211_VENDOR_SUBCMD_SET_WAPP:
- * @MTK_NL80211_VENDOR_SUBCMD_SET_CH_MONITOR:
- * @MTK_NL80211_VENDOR_SUBCMD_BSS_INFO:
- * @MTK_NL80211_VENDOR_SUBCMD_SET_MAP_R3:
- * @MTK_NL80211_VENDOR_SUBCMD_SET_HS_ANQP_RSP:
- * @MTK_NL80211_VENDOR_SUBCMD_SET_HS:
- * @MTK_NL80211_VENDOR_SUBCMD_SET_OFFCH_SCAN:
- * @MTK_NL80211_VENDOR_SUBCMD_SET_DFS_INFO:
- * @MTK_NL80211_VENDOR_SUBCMD_SET_WSC:
- * @MTK_NL80211_VENDOR_SUBCMD_SET_MBO_MSG:
- * @MTK_NL80211_VENDOR_SUBCMD_SET_RRM_COMMAND:
- * @MTK_NL80211_VENDOR_SUBCMD_SET_QOS:
- * @MTK_NL80211_VENDOR_SUBCMD_GET_CAP: command to get capability information
- * from wifi driver, it requres mtk_nl80211_vendor_attr_get_cap attributes.
- * @MTK_NL80211_VENDOR_SUBCMD_GET_RUNTIME_INFO: command to get run time information
- * from wifi driver, it requres mtk_nl80211_vendor_attr_get_runtime_info attributes.
- * @MTK_NL80211_VENDOR_SUBCMD_GET_STATISTIC: command to get statistic information
- * from wifi driver, it requres mtk_nl80211_vendor_attr_get_static_info attributes.
- * @MTK_NL80211_VENDOR_SUBCMD_GET_SRG_BITMAP:
- * @MTK_NL80211_VENDOR_SUBCMD_GET_STATIC_INFO:
- * @MTK_NL80211_VENDOR_SUBCMD_GET_WNM:
- * @MTK_NL80211_VENDOR_SUBCMD_GET_HS:
- * @MTK_NL80211_VENDOR_SUBCMD_GET_WSC:
- * @MTK_NL80211_VENDOR_SUBCMD_GET_DFS_ZERO_WAIT:
- * @MTK_NL80211_VENDOR_SUBCMD_GET_FRAME:
- * @MTK_NL80211_VENDOR_SUBCMD_GET_APCLI_INFO:
- * @MTK_NL80211_VENDOR_SUBCMD_BBP:
- * @MTK_NL80211_VENDOR_SUBCMD_MAC: command to set or get mac register
- * information to/from wifi driver, require mtk_nl80211_vendor_attrs_mac
- * attributes.
- * @MTK_NL80211_VENDOR_SUBCMD_E2P:
- * @MTK_NL80211_VENDOR_SUBCMD_ATE:
- * @MTK_NL80211_VENDOR_SUBCMD_STATISTICS: command to get statistic information
- * in string from wifi driver, this command is used to be compatible with
- * old iwpriv stat command, it requres mtk_nl80211_vendor_attrs_statistics
- * attributes.
- * @MTK_NL80211_VENDOR_SUBCMD_ADD_PMKID_CACHE:
- * @MTK_NL80211_VENDOR_SUBCMD_RADIUS_DATA:
- * @MTK_NL80211_VENDOR_SUBCMD_GSITESURVEY:
- * @MTK_NL80211_VENDOR_SUBCMD_GET_MAC_TABLE:
- * @MTK_NL80211_VENDOR_SUBCMD_STATIC_WEP_COPY:
- * @MTK_NL80211_VENDOR_SUBCMD_WSC_PROFILE:
- * @MTK_NL80211_VENDOR_SUBCMD_RF:
- * @MTK_NL80211_VENDOR_SUBCMD_SET_WSC_PROFILE_U32_ITEM:
- * @MTK_NL80211_VENDOR_SUBCMD_QUERY_BATABLE:
- * @MTK_NL80211_VENDOR_SUBCMD_RD:
- * @MTK_NL80211_VENDOR_SUBCMD_SET_FT_PARAM:
- * @MTK_NL80211_VENDOR_SUBCMD_SET_WSCOOB:
- * @MTK_NL80211_VENDOR_SUBCMD_WSC_CALLBACK:
- * @MTK_NL80211_VENDOR_SUBCMD_RX_STATISTICS:
- * @MTK_NL80211_VENDOR_SUBCMD_GET_DRIVER_INFO:
- * @MTK_NL80211_VENDOR_SUBCMD_STA_VLAN:
- * @MTK_NL80211_VENDOR_SUBCMD_PHY_STATE:
- * @MTK_NL80211_VENDOR_SUBCMD_VENDOR_SET: command to set old iwpriv set command
- * string to wifi driver, it requires mtk_nl80211_vendor_attrs_vendor_set attributes,
- * please note that this command is just used to be compatible with old iwpriv
- * set command, and it will be discarded in some time.
- *
- * @MTK_NL80211_VENDOR_SUBCMD_VENDOR_SHOW: command to set old iwpriv show command
- * string to wifi driver, require mtk_nl80211_vendor_attrs_vendor_show attributes,
- * please note that this command is just used to be compatible with old iwpriv
- * show command, and it will be discarded in some time.
- *
- * @MTK_NL80211_VENDOR_SUBCMD_HS:
- * @MTK_NL80211_VENDOR_SUBCMD_WNM:
- * @MTK_NL80211_VENDOR_SUBCMD_MBO_MSG:
- * @MTK_NL80211_VENDOR_SUBCMD_NEIGHBOR_REPORT:
- * @MTK_NL80211_VENDOR_SUBCMD_OFFCHANNEL_INFO:
- * @MTK_NL80211_VENDOR_SUBCMD_OCE_MSG:
- * @MTK_NL80211_VENDOR_SUBCMD_WAPP_REQ: command to set or get wapp requred
- * information from wifi driver, require mtk_nl80211_vendor_attr_wapp_req attributes.
- * @MTK_NL80211_VENDOR_SUBCMD_SET_AP_SECURITY: command to set ap security configurations
- * to a specific bss in wifi driver, it requires mtk_nl80211_vendor_attrs_ap_security
- * attributes.
- * @MTK_NL80211_VENDOR_SUBCMD_SET_AP_VOW: command to set ap vow configurations
- * it requires mtk_nl80211_vendor_attrs_ap_vow attributes.
- * @MTK_NL80211_VENDOR_CMD_MAX: highest used command number
- * @__MTK_NL80211_VENDOR_CMD_AFTER_LAST: internal use
- */
-enum mtk_nl80211_vendor_commands {
- MTK_NL80211_VENDOR_SUBCMD_UNSPEC = 0,
- MTK_NL80211_VENDOR_SUBCMD_TEST = 1,
-
-/* don't change the order or add anything between, this is ABI! */
- MTK_NL80211_VENDOR_SUBCMD_AMNT_CTRL = 0x000000ae,
- MTK_NL80211_VENDOR_SUBCMD_CSI_CTRL = 0x000000c2,
- MTK_NL80211_VENDOR_SUBCMD_RFEATURE_CTRL,
- MTK_NL80211_VENDOR_SUBCMD_WIRELESS_CTRL,
- MTK_NL80211_VENDOR_SUBCMD_SET_DOT11V_WNM,
- MTK_NL80211_VENDOR_SUBCMD_SET_WAPP,
- MTK_NL80211_VENDOR_SUBCMD_SET_CH_MONITOR,
- MTK_NL80211_VENDOR_SUBCMD_BSS_INFO,
- MTK_NL80211_VENDOR_SUBCMD_SET_MAP_R3,
- MTK_NL80211_VENDOR_SUBCMD_SET_HS_ANQP_RSP,
- MTK_NL80211_VENDOR_SUBCMD_SET_HS,
- MTK_NL80211_VENDOR_SUBCMD_SET_OFFCH_SCAN,
- MTK_NL80211_VENDOR_SUBCMD_SET_DFS_INFO,
- MTK_NL80211_VENDOR_SUBCMD_SET_WSC,
- MTK_NL80211_VENDOR_SUBCMD_SET_MBO_MSG,
- MTK_NL80211_VENDOR_SUBCMD_SET_RRM_COMMAND,
- MTK_NL80211_VENDOR_SUBCMD_SET_QOS,
- MTK_NL80211_VENDOR_SUBCMD_GET_CAP,
- MTK_NL80211_VENDOR_SUBCMD_GET_RUNTIME_INFO,
- MTK_NL80211_VENDOR_SUBCMD_GET_STATISTIC,
- MTK_NL80211_VENDOR_SUBCMD_GET_SRG_BITMAP,
- MTK_NL80211_VENDOR_SUBCMD_GET_STATIC_INFO,
- MTK_NL80211_VENDOR_SUBCMD_GET_WNM,
- MTK_NL80211_VENDOR_SUBCMD_GET_HS,
- MTK_NL80211_VENDOR_SUBCMD_GET_WSC,
- MTK_NL80211_VENDOR_SUBCMD_GET_DFS_ZERO_WAIT,
- MTK_NL80211_VENDOR_SUBCMD_GET_FRAME,
- MTK_NL80211_VENDOR_SUBCMD_GET_APCLI_INFO,
- MTK_NL80211_VENDOR_SUBCMD_BBP,
- MTK_NL80211_VENDOR_SUBCMD_MAC,
- MTK_NL80211_VENDOR_SUBCMD_E2P,
- MTK_NL80211_VENDOR_SUBCMD_ATE,
- MTK_NL80211_VENDOR_SUBCMD_STATISTICS,
- MTK_NL80211_VENDOR_SUBCMD_ADD_PMKID_CACHE,
- MTK_NL80211_VENDOR_SUBCMD_RADIUS_DATA,
- MTK_NL80211_VENDOR_SUBCMD_GSITESURVEY,
- MTK_NL80211_VENDOR_SUBCMD_GET_MAC_TABLE,
- MTK_NL80211_VENDOR_SUBCMD_STATIC_WEP_COPY,
- MTK_NL80211_VENDOR_SUBCMD_WSC_PROFILE ,
- MTK_NL80211_VENDOR_SUBCMD_RF,
- MTK_NL80211_VENDOR_SUBCMD_SET_WSC_PROFILE_U32_ITEM,
- MTK_NL80211_VENDOR_SUBCMD_QUERY_BATABLE,
- MTK_NL80211_VENDOR_SUBCMD_RD,
- MTK_NL80211_VENDOR_SUBCMD_SET_FT_PARAM,
- MTK_NL80211_VENDOR_SUBCMD_SET_WSCOOB,
- MTK_NL80211_VENDOR_SUBCMD_WSC_CALLBACK,
- MTK_NL80211_VENDOR_SUBCMD_RX_STATISTICS,
- MTK_NL80211_VENDOR_SUBCMD_GET_DRIVER_INFO,
- MTK_NL80211_VENDOR_SUBCMD_STA_VLAN,
- MTK_NL80211_VENDOR_SUBCMD_PHY_STATE,
- MTK_NL80211_VENDOR_SUBCMD_VENDOR_SET,
- MTK_NL80211_VENDOR_SUBCMD_VENDOR_SHOW,
- MTK_NL80211_VENDOR_SUBCMD_HS,
- MTK_NL80211_VENDOR_SUBCMD_WNM,
- MTK_NL80211_VENDOR_SUBCMD_MBO_MSG,
- MTK_NL80211_VENDOR_SUBCMD_NEIGHBOR_REPORT,
- MTK_NL80211_VENDOR_SUBCMD_OFFCHANNEL_INFO,
- MTK_NL80211_VENDOR_SUBCMD_OCE_MSG,
- MTK_NL80211_VENDOR_SUBCMD_WAPP_REQ,
- MTK_NL80211_VENDOR_SUBCMD_SET_AP_SECURITY,
- MTK_NL80211_VENDOR_SUBCMD_SET_AP_VOW,
- /* add new commands above here */
- /* used to define NL80211_CMD_MAX below */
- __MTK_NL80211_VENDOR_CMD_AFTER_LAST,
- MTK_NL80211_VENDOR_CMD_MAX = __MTK_NL80211_VENDOR_CMD_AFTER_LAST - 1
-};
-
-/**
- * enum mtk_nl80211_vendor_events - MediaTek nl80211 asynchoronous event identifiers
- *
- * @MTK_NL80211_VENDOR_EVENT_UNSPEC: Reserved value 0
- *
- * @MTK_NL80211_VENDOR_EVENT_TEST: Test for nl80211command/event
- */
-enum mtk_nl80211_vendor_events {
- /* don't change the order or add anything between, this is ABI! */
- MTK_NL80211_VENDOR_EVENT_UNSPEC = 0,
- MTK_NL80211_VENDOR_EVENT_TEST,
-
- MTK_NL80211_VENDOR_EVENT_RSP_WAPP_EVENT,
-
- /* add new events above here */
-};
-
-/**
- * enum mtk_nl80211_vendor_attr_test - Specifies the values for vendor test
- * command MTK_NL80211_VENDOR_ATTR_TEST
- * @MTK_NL80211_VENDOR_ATTR_TEST:enable nl80211 test
- */
-enum mtk_nl80211_vendor_attr_test {
- /* don't change the order or add anything between, this is ABI! */
- MTK_NL80211_VENDOR_ATTR_TEST_INVALID = 0,
-
- MTK_NL80211_VENDOR_ATTR_TEST,
-
- __MTK_NL80211_VENDOR_ATTR_TEST_LAST,
- MTK_NL80211_VENDOR_ATTR_TEST_MAX =
- __MTK_NL80211_VENDOR_ATTR_TEST_LAST - 1
-};
-
-/**
- * enum mtk_nl80211_vendor_attr_event_test - Specifies the values for vendor test
- * event MTK_NL80211_VENDOR_ATTR_TEST
- * @MTK_NL80211_VENDOR_ATTR_TEST:receive nl80211 test event
- */
-enum mtk_nl80211_vendor_attr_event_test {
- /* don't change the order or add anything between, this is ABI! */
- MTK_NL80211_VENDOR_ATTR_EVENT_TEST_INVALID = 0,
-
- MTK_NL80211_VENDOR_ATTR_EVENT_TEST,
-
- __MTK_NL80211_VENDOR_ATTR_EVENT_TEST_LAST,
- MTK_NL80211_VENDOR_ATTR_EVENT_TEST_MAX =
- __MTK_NL80211_VENDOR_ATTR_EVENT_TEST_LAST - 1
-};
-
-/**
- * enum mtk_nl80211_vendor_attrs_wnm - This enum defines
- * attributes required for MTK_NL80211_VENDOR_SUBCMD_SET_DOT11V_WNM.
- * Information in these attributes is used to set/get wnm information
- * to/from driver from/to user application.
- *
- * @MTK_NL80211_VENDOR_ATTR_WNM_CMD:
- * @MTK_NL80211_VENDOR_ATTR_WNM_BTM_REQ: BTM request frame
- * @MTK_NL80211_VENDOR_ATTR_WNM_BTM_RSP:
- */
-enum mtk_nl80211_vendor_attrs_dot11v_wnm {
-/* don't change the order or add anything between, this is ABI! */
- MTK_NL80211_VENDOR_ATTR_DOT11V_WNM_INVALID = 0,
- MTK_NL80211_VENDOR_ATTR_DOT11V_WNM_CMD,
- MTK_NL80211_VENDOR_ATTR_DOT11V_WNM_BTM_REQ,
- MTK_NL80211_VENDOR_ATTR_DOT11V_WNM_BTM_RSP,
- /* add attributes here, update the policy in nl80211.c */
-
- __MTK_NL80211_VENDOR_ATTR_DOT11V_WNM_AFTER_LAST,
- MTK_NL80211_VENDOR_DOT11V_WNM_ATTR_MAX = __MTK_NL80211_VENDOR_ATTR_DOT11V_WNM_AFTER_LAST - 1
-};
-
-/**
- * enum mtk_nl80211_vendor_attrs_vendor_set - This enum defines
- * attributes required for MTK_NL80211_VENDOR_SUBCMD_VENDOR_SET.
- * Information in these attributes is used to set information
- * to driver from user application.
- *
- * @MTK_NL80211_VENDOR_ATTR_VENDOR_SET_CMD_STR: command string
- */
-enum mtk_nl80211_vendor_attrs_vendor_set {
-/* don't change the order or add anything between, this is ABI! */
- MTK_NL80211_VENDOR_ATTR_VENDOR_SET_INVALID = 0,
- MTK_NL80211_VENDOR_ATTR_VENDOR_SET_CMD_STR,
- /* add attributes here, update the policy in nl80211.c */
-
- __MTK_NL80211_VENDOR_ATTR_VENDOR_SET_AFTER_LAST,
- MTK_NL80211_VENDOR_ATTR_VENDOR_SET_ATTR_MAX = __MTK_NL80211_VENDOR_ATTR_VENDOR_SET_AFTER_LAST - 1
-};
-
-/**
- * enum mtk_nl80211_vendor_attrs_vendor_show - This enum defines
- * attributes required for MTK_NL80211_VENDOR_SUBCMD_VENDOR_SHOW.
- * Information in these attributes is used to get information
- * from driver to user application.
- *
- * @MTK_NL80211_VENDOR_ATTR_VENDOR_SHOW_CMD_STR: command string
- * @MTK_NL80211_VENDOR_ATTR_VENDOR_SHOW_RSP_STR: show rsp string buffer
- */
-enum mtk_nl80211_vendor_attrs_vendor_show {
-/* don't change the order or add anything between, this is ABI! */
- MTK_NL80211_VENDOR_ATTR_VENDOR_SHOW_INVALID = 0,
- MTK_NL80211_VENDOR_ATTR_VENDOR_SHOW_CMD_STR,
- MTK_NL80211_VENDOR_ATTR_VENDOR_SHOW_RSP_STR,
- /* add attributes here, update the policy in nl80211.c */
-
- __MTK_NL80211_VENDOR_ATTR_VENDOR_SHOW_AFTER_LAST,
- MTK_NL80211_VENDOR_ATTR_VENDOR_SHOW_ATTR_MAX = __MTK_NL80211_VENDOR_ATTR_VENDOR_SHOW_AFTER_LAST - 1
-};
-
-/**
- * enum mtk_nl80211_vendor_attrs_statistics - This enum defines
- * attributes required for MTK_NL80211_VENDOR_SUBCMD_STATISTICS.
- * Information in these attributes is used to get wnm information
- * to/from driver from/to user application.
- *
- * @MTK_NL80211_VENDOR_ATTR_STATISTICS_STR: statistic information string
- */
-enum mtk_nl80211_vendor_attrs_statistics {
-/* don't change the order or add anything between, this is ABI! */
- MTK_NL80211_VENDOR_ATTR_STATISTICS_INVALID = 0,
- MTK_NL80211_VENDOR_ATTR_STATISTICS_STR,
- /* add attributes here, update the policy in nl80211.c */
-
- __MTK_NL80211_VENDOR_ATTR_STATISTICS_AFTER_LAST,
- MTK_NL80211_VENDOR_ATTR_STATISTICS_ATTR_MAX = __MTK_NL80211_VENDOR_ATTR_STATISTICS_AFTER_LAST - 1
-};
-
-/**
- * structure mac_param - This structure defines the payload format of
- * MTK_NL80211_VENDOR_ATTR_MAC_WRITE_PARAM and MTK_NL80211_VENDOR_ATTR_MAC_SHOW_PARAM.
- * Information in this structure is used to get/set mac register information
- * from/to driver.
- *
- * @start: start mac address
- * @end: end mac address
- * @value: value for the mac register
- */
-struct GNU_PACKED mac_param {
- unsigned int start;
- unsigned int end;
- unsigned int value;
-};
-
-/**
- * enum mtk_nl80211_vendor_attrs_mac - This enum defines
- * attributes required for MTK_NL80211_VENDOR_SUBCMD_MAC.
- * Information in these attributes is used to get/set mac information
- * from/to driver.
- *
- * @MTK_NL80211_VENDOR_ATTR_MAC_WRITE_PARAM: params, refer to struct GNU_PACKED mac_param
- * @MTK_NL80211_VENDOR_ATTR_MAC_SHOW_PARAM: params, refer to struct GNU_PACKED mac_param
- * @MTK_NL80211_VENDOR_ATTR_MAC_RSP_STR: RSP string
- */
-enum mtk_nl80211_vendor_attrs_mac {
-/* don't change the order or add anything between, this is ABI! */
- MTK_NL80211_VENDOR_ATTR_MAC_INVALID = 0,
- MTK_NL80211_VENDOR_ATTR_MAC_WRITE_PARAM,
- MTK_NL80211_VENDOR_ATTR_MAC_SHOW_PARAM,
- MTK_NL80211_VENDOR_ATTR_MAC_RSP_STR,
- /* add attributes here, update the policy in nl80211.c */
-
- __MTK_NL80211_VENDOR_ATTR_MAC_AFTER_LAST,
- MTK_NL80211_VENDOR_ATTR_MAC_ATTR_MAX = __MTK_NL80211_VENDOR_ATTR_MAC_AFTER_LAST - 1
-};
-
-/**
- * enum mtk_vendor_attr_authmode - This enum defines the value of
- * MTK_NL80211_VENDOR_ATTR_AP_SECURITY_AUTHMODE.
- * Information in these attributes is used set auth mode of a specific bss.
- */
-enum mtk_vendor_attr_authmode {
- NL80211_AUTH_OPEN,
- NL80211_AUTH_SHARED,
- NL80211_AUTH_WEPAUTO,
- NL80211_AUTH_WPA,
- NL80211_AUTH_WPAPSK,
- NL80211_AUTH_WPANONE,
- NL80211_AUTH_WPA2,
- NL80211_AUTH_WPA2MIX,
- NL80211_AUTH_WPA2PSK,
- NL80211_AUTH_WPA3,
- NL80211_AUTH_WPA3_192,
- NL80211_AUTH_WPA3PSK,
- NL80211_AUTH_WPA2PSKWPA3PSK,
- NL80211_AUTH_WPA2PSKMIXWPA3PSK,
- NL80211_AUTH_WPA1WPA2,
- NL80211_AUTH_WPAPSKWPA2PSK,
- NL80211_AUTH_WPA_AES_WPA2_TKIPAES,
- NL80211_AUTH_WPA_AES_WPA2_TKIP,
- NL80211_AUTH_WPA_TKIP_WPA2_AES,
- NL80211_AUTH_WPA_TKIP_WPA2_TKIPAES,
- NL80211_AUTH_WPA_TKIPAES_WPA2_AES,
- NL80211_AUTH_WPA_TKIPAES_WPA2_TKIPAES,
- NL80211_AUTH_WPA_TKIPAES_WPA2_TKIP,
- NL80211_AUTH_OWE,
- NL80211_AUTH_FILS_SHA256,
- NL80211_AUTH_FILS_SHA384,
- NL80211_AUTH_WAICERT,
- NL80211_AUTH_WAIPSK,
- NL80211_AUTH_DPP,
- NL80211_AUTH_DPPWPA2PSK,
- NL80211_AUTH_DPPWPA3PSK,
- NL80211_AUTH_DPPWPA3PSKWPA2PSK,
- NL80211_AUTH_WPA2_ENT_OSEN
-};
-
-/**
- * enum mtk_vendor_attr_encryptype - This enum defines the value of
- * MTK_NL80211_VENDOR_ATTR_AP_SECURITY_ENCRYPTYPE.
- * Information in these attributes is used set encryption type of a specific bss.
- */
-enum mtk_vendor_attr_encryptype {
- NL80211_ENCRYPTYPE_NONE,
- NL80211_ENCRYPTYPE_WEP,
- NL80211_ENCRYPTYPE_TKIP,
- NL80211_ENCRYPTYPE_AES,
- NL80211_ENCRYPTYPE_CCMP128,
- NL80211_ENCRYPTYPE_CCMP256,
- NL80211_ENCRYPTYPE_GCMP128,
- NL80211_ENCRYPTYPE_GCMP256,
- NL80211_ENCRYPTYPE_TKIPAES,
- NL80211_ENCRYPTYPE_TKIPCCMP128,
- NL80211_ENCRYPTYPE_WPA_AES_WPA2_TKIPAES,
- NL80211_ENCRYPTYPE_WPA_AES_WPA2_TKIP,
- NL80211_ENCRYPTYPE_WPA_TKIP_WPA2_AES,
- NL80211_ENCRYPTYPE_WPA_TKIP_WPA2_TKIPAES,
- NL80211_ENCRYPTYPE_WPA_TKIPAES_WPA2_AES,
- NL80211_ENCRYPTYPE_WPA_TKIPAES_WPA2_TKIPAES,
- NL80211_ENCRYPTYPE_WPA_TKIPAES_WPA2_TKIP,
- NL80211_ENCRYPTYPE_SMS4
-};
-
-#define MAX_WEP_KEY_LEN 32
-/**
- * structure wep_key_param - This structure defines the payload format of
- * MTK_NL80211_VENDOR_ATTR_AP_SECURITY_WEPKEY. Information in this structure
- * is used to set wep key information to a specific bss in wifi driver.
- *
- * @key_idx: key index
- * @key_len: key length
- * @key: key value
- */
-struct GNU_PACKED wep_key_param {
- unsigned char key_idx;
- unsigned int key_len;
- unsigned char key[MAX_WEP_KEY_LEN];
-};
-
-/**
- * structure vow_group_en_param - This structure defines the payload format of
- * MTK_NL80211_VENDOR_ATTR_AP_VOW_ATC_EN_INFO &
- * MTK_NL80211_VENDOR_ATTR_AP_VOW_BW_CTL_EN_INFO.
- * Information in this structure is used to set vow airtime control enable configuration
- * to a specific group in wifi driver.
- *
- * @group: vow group
- * @en: Enable/Disable
- */
-struct GNU_PACKED vow_group_en_param {
- unsigned int group;
- unsigned int en;
-};
-
-/**
- * structure vow_group_en_param - This structure defines the payload format of
- * MTK_NL80211_VENDOR_ATTR_AP_VOW_MIN_RATE_INFO &
- * MTK_NL80211_VENDOR_ATTR_AP_VOW_MAX_RATE_INFO.
- * Information in this structure is used to set vow airtime rate configuration
- * to a specific group in wifi driver.
- *
- * @group: vow group
- * @rate: vow rate
- */
-struct GNU_PACKED vow_rate_param {
- unsigned int group;
- unsigned int rate;
-};
-
-/**
- * structure vow_group_en_param - This structure defines the payload format of
- * MTK_NL80211_VENDOR_ATTR_AP_VOW_MIN_RATIO_INFO &
- * MTK_NL80211_VENDOR_ATTR_AP_VOW_MAX_RATIO_INFO.
- * Information in this structure is used to set vow airtime ratio configuration
- * to a specific group in wifi driver.
- *
- * @group: vow group
- * @ratio: vow ratio
- */
-struct GNU_PACKED vow_ratio_param {
- unsigned int group;
- unsigned int ratio;
-};
-
-/**
- * enum mtk_nl80211_vendor_attrs_ap_vow - This enum defines
- * attributes required for MTK_NL80211_VENDOR_SUBCMD_SET_AP_VOW.
- * Information in these attributes is used to set vow configuration
- * to driver from user application.
- *
- * @MTK_NL80211_VENDOR_ATTR_AP_VOW_ATF_EN_INFO: u8, air time fairness enable attributes
- * @MTK_NL80211_VENDOR_ATTR_AP_VOW_ATC_EN_INFO: refer to vow_group_en_param
- * @MTK_NL80211_VENDOR_ATTR_AP_VOW_BW_EN_INFO: u8, air time bw enalbe attributes
- * @MTK_NL80211_VENDOR_ATTR_AP_VOW_BW_CTL_EN_INFO: refer to vow_group_en_param
- * @MTK_NL80211_VENDOR_ATTR_AP_VOW_MIN_RATE_INFO: refer to vow_rate_param
- * @MTK_NL80211_VENDOR_ATTR_AP_VOW_MAX_RATE_INFO: refer to vow_rate_param
- * @MTK_NL80211_VENDOR_ATTR_AP_VOW_MIN_RATIO_INFO: refer to vow_ratio_param
- * @MTK_NL80211_VENDOR_ATTR_AP_VOW_MAX_RATIO_INFO: refer to vow_ratio_param
- */
-enum mtk_nl80211_vendor_attrs_ap_vow{
-/* don't change the order or add anything between, this is ABI! */
- MTK_NL80211_VENDOR_ATTR_AP_VOW_INVALID = 0,
- MTK_NL80211_VENDOR_ATTR_AP_VOW_ATF_EN_INFO,
- MTK_NL80211_VENDOR_ATTR_AP_VOW_ATC_EN_INFO,
- MTK_NL80211_VENDOR_ATTR_AP_VOW_BW_EN_INFO,
- MTK_NL80211_VENDOR_ATTR_AP_VOW_BW_CTL_EN_INFO,
- MTK_NL80211_VENDOR_ATTR_AP_VOW_MIN_RATE_INFO,
- MTK_NL80211_VENDOR_ATTR_AP_VOW_MAX_RATE_INFO,
- MTK_NL80211_VENDOR_ATTR_AP_VOW_MIN_RATIO_INFO,
- MTK_NL80211_VENDOR_ATTR_AP_VOW_MAX_RATIO_INFO,
- __MTK_NL80211_VENDOR_ATTR_AP_VOW_AFTER_LAST,
- MTK_NL80211_VENDOR_AP_VOW_ATTR_MAX = __MTK_NL80211_VENDOR_ATTR_AP_VOW_AFTER_LAST - 1
-};
-/**
- * enum mtk_nl80211_vendor_attrs_ap_security - This enum defines
- * attributes required for MTK_NL80211_VENDOR_SUBCMD_SET_AP_SECURITY.
- * Information in these attributes is used to set security information
- * to driver from user application.
- *
- * @MTK_NL80211_VENDOR_ATTR_AP_SECURITY_AUTHMODE: u32, auth mode attributes, refer to mtk_vendor_attr_authmode
- * @MTK_NL80211_VENDOR_ATTR_AP_SECURITY_ENCRYPTYPE: u32, encryptype, refer to mtk_vendor_attr_encryptype
- * @MTK_NL80211_VENDOR_ATTR_AP_SECURITY_REKEYINTERVAL: u32, rekey interval in seconds
- * @MTK_NL80211_VENDOR_ATTR_AP_SECURITY_REKEYMETHOD: u8, 0-by time, 1-by pkt count
- * @MTK_NL80211_VENDOR_ATTR_AP_SECURITY_DEFAULTKEYID: u8, default key index
- * @MTK_NL80211_VENDOR_ATTR_AP_SECURITY_WEPKEY: refer to wep_key_param
- * @MTK_NL80211_VENDOR_ATTR_AP_SECURITY_PASSPHRASE: string
- * @MTK_NL80211_VENDOR_ATTR_AP_SECURITY_PMF: u8 1-support pmf, 0-not support pmf
- * @MTK_NL80211_VENDOR_ATTR_AP_SECURITY_PMF_REQUIRE: u8 1-pmf is required, 0-pmf is not required
- * @MTK_NL80211_VENDOR_ATTR_AP_SECURITY_PMF_SHA256: u8 1-pmfsha256 is desired, 0-pmfsha256 is not desired
- */
-enum mtk_nl80211_vendor_attrs_ap_security {
-/* don't change the order or add anything between, this is ABI! */
- MTK_NL80211_VENDOR_ATTR_AP_SECURITY_INVALID = 0,
- MTK_NL80211_VENDOR_ATTR_AP_SECURITY_AUTHMODE,
- MTK_NL80211_VENDOR_ATTR_AP_SECURITY_ENCRYPTYPE,
- MTK_NL80211_VENDOR_ATTR_AP_SECURITY_REKEYINTERVAL,
- MTK_NL80211_VENDOR_ATTR_AP_SECURITY_REKEYMETHOD,
- MTK_NL80211_VENDOR_ATTR_AP_SECURITY_DEFAULTKEYID,
- MTK_NL80211_VENDOR_ATTR_AP_SECURITY_WEPKEY,
- MTK_NL80211_VENDOR_ATTR_AP_SECURITY_PASSPHRASE,
- MTK_NL80211_VENDOR_ATTR_AP_SECURITY_PMF_CAPABLE,
- MTK_NL80211_VENDOR_ATTR_AP_SECURITY_PMF_REQUIRE,
- MTK_NL80211_VENDOR_ATTR_AP_SECURITY_PMF_SHA256,
- /* add attributes here, update the policy in nl80211.c */
-
- __MTK_NL80211_VENDOR_ATTR_AP_SECURITY_AFTER_LAST,
- MTK_NL80211_VENDOR_AP_SECURITY_ATTR_MAX = __MTK_NL80211_VENDOR_ATTR_AP_SECURITY_AFTER_LAST - 1
-};
-
-/**
- * enum mtk_nl80211_vendor_attr_get_static_info - Specifies the vendor attribute values
- * to get static info
- */
-enum mtk_nl80211_vendor_attr_get_static_info {
- /* don't change the order or add anything between, this is ABI! */
- MTK_NL80211_VENDOR_ATTR_GET_STATIC_INFO_INVALID = 0,
-
- MTK_NL80211_VENDOR_ATTR_GET_STATIC_INFO_CHIP_ID,
- MTK_NL80211_VENDOR_ATTR_GET_STATIC_INFO_DRIVER_VER,
- MTK_NL80211_VENDOR_ATTR_GET_STATIC_INFO_COEXISTENCE,
- MTK_NL80211_VENDOR_ATTR_GET_STATIC_INFO_WIFI_VER,
- MTK_NL80211_VENDOR_ATTR_GET_STATIC_INFO_WAPP_SUPPORT_VER,
-
- __MTK_NL80211_VENDOR_ATTR_GET_STATIC_INFO_LAST,
- MTK_NL80211_VENDOR_ATTR_GET_STATIC_INFO_MAX =
- __MTK_NL80211_VENDOR_ATTR_GET_STATIC_INFO_LAST - 1
-};
-
-/**
- * enum mtk_nl80211_vendor_attr_get_runtime_info - Specifies the vendor attribute values
- * to get runtime info
- */
-enum mtk_nl80211_vendor_attr_get_runtime_info {
- /* don't change the order or add anything between, this is ABI! */
- MTK_NL80211_VENDOR_ATTR_GET_RUNTIME_INFO_INVALID = 0,
-
- MTK_NL80211_VENDOR_ATTR_GET_RUNTIME_INFO_GET_MAX_NUM_OF_STA,
- MTK_NL80211_VENDOR_ATTR_GET_RUNTIME_INFO_GET_CHAN_LIST,
- MTK_NL80211_VENDOR_ATTR_GET_RUNTIME_INFO_GET_OP_CLASS,
- MTK_NL80211_VENDOR_ATTR_GET_RUNTIME_INFO_GET_BSS_INFO,
- MTK_NL80211_VENDOR_ATTR_GET_RUNTIME_INFO_GET_NOP_CHANNEL_LIST,
- MTK_NL80211_VENDOR_ATTR_GET_RUNTIME_INFO_GET_WMODE,
- MTK_NL80211_VENDOR_ATTR_GET_RUNTIME_INFO_GET_WAPP_WSC_PROFILES,
- MTK_NL80211_VENDOR_ATTR_GET_RUNTIME_INFO_GET_PMK_BY_PEER_MAC,
- MTK_NL80211_VENDOR_ATTR_GET_RUNTIME_INFO_GET_802_11_AUTHENTICATION_MODE,
- MTK_NL80211_VENDOR_ATTR_GET_RUNTIME_INFO_GET_802_11_MAC_ADDRESS,
- MTK_NL80211_VENDOR_ATTR_GET_RUNTIME_INFO_GET_802_11_CURRENTCHANNEL,
-
- __MTK_NL80211_VENDOR_ATTR_GET_RUNTIME_INFO_LAST,
- MTK_NL80211_VENDOR_ATTR_GET_RUNTIME_INFO_MAX =
- __MTK_NL80211_VENDOR_ATTR_GET_RUNTIME_INFO_LAST - 1
-};
-
-/**
- * enum mtk_nl80211_vendor_attr_get_statistic - Specifies the vendor attribute values
- * to get statistic info
- */
-enum mtk_nl80211_vendor_attr_get_statistic {
- /* don't change the order or add anything between, this is ABI! */
- MTK_NL80211_VENDOR_ATTR_GET_STATISTIC_INVALID = 0,
-
- MTK_NL80211_VENDOR_ATTR_GET_802_11_STATISTICS,
- MTK_NL80211_VENDOR_ATTR_GET_TX_PWR,
- MTK_NL80211_VENDOR_ATTR_GET_AP_METRICS,
- MTK_NL80211_VENDOR_ATTR_GET_802_11_PER_BSS_STATISTICS,
- MTK_NL80211_VENDOR_ATTR_GET_CPU_TEMPERATURE,
-
- _MTK_NL80211_VENDOR_ATTR_GET_STATISTIC_LAST,
- MTK_NL80211_VENDOR_ATTR_GET_STATISTIC_MAX =
- _MTK_NL80211_VENDOR_ATTR_GET_STATISTIC_LAST - 1
-};
-
-/**
- * enum mtk_nl80211_vendor_attr_wapp_req - Specifies the vendor attribute values
- * to request wifi info
- */
-enum mtk_nl80211_vendor_attr_wapp_req {
- /* don't change the order or add anything between, this is ABI! */
- MTK_NL80211_VENDOR_ATTR_WAPP_REQ_INVALID = 0,
-
- MTK_NL80211_VENDOR_ATTR_WAPP_REQ,
-
- __MTK_NL80211_VENDOR_ATTR_WAPP_REQ_LAST,
- MTK_NL80211_VENDOR_ATTR_WAPP_REQ_MAX =
- __MTK_NL80211_VENDOR_ATTR_WAPP_REQ_LAST - 1
-};
-
-/**
- * enum mtk_nl80211_vendor_attr_event_rsp_wapp_event - Specifies the vendor attribute values
- * to get wifi info event
- */
-enum mtk_nl80211_vendor_attr_event_rsp_wapp_event {
- /* don't change the order or add anything between, this is ABI! */
- MTK_NL80211_VENDOR_ATTR_EVENT_RSP_WAPP_EVENT_INVALID = 0,
-
- MTK_NL80211_VENDOR_ATTR_EVENT_RSP_WAPP_EVENT,
-
- __MTK_NL80211_VENDOR_ATTR_EVENT_RSP_WAPP_EVENT_LAST,
- MTK_NL80211_VENDOR_ATTR_EVENT_RSP_WAPP_EVENT_MAX =
- __MTK_NL80211_VENDOR_ATTR_EVENT_RSP_WAPP_EVENT_LAST - 1
-};
-
-/**
- * enum mtk_nl80211_vendor_attr_get_cap - Specifies the vendor attribute values
- * to get capability info
- */
-enum mtk_nl80211_vendor_attr_get_cap {
- /* don't change the order or add anything between, this is ABI! */
- MTK_NL80211_VENDOR_ATTR_GET_CAP_INFO_INVALID = 0,
-
- MTK_NL80211_VENDOR_ATTR_GET_CAP_INFO_CAC_CAP,
- MTK_NL80211_VENDOR_ATTR_GET_CAP_INFO_MISC_CAP,
- MTK_NL80211_VENDOR_ATTR_GET_CAP_INFO_HT_CAP,
- MTK_NL80211_VENDOR_ATTR_GET_CAP_INFO_VHT_CAP,
- MTK_NL80211_VENDOR_ATTR_GET_CAP_INFO_WF6_CAPABILTY,
- MTK_NL80211_VENDOR_ATTR_GET_CAP_INFO_HE_CAP,
- MTK_NL80211_VENDOR_ATTR_GET_CAP_QUERY_11H_CAPABILITY,
- MTK_NL80211_VENDOR_ATTR_GET_CAP_QUERY_RRM_CAPABILITY,
- MTK_NL80211_VENDOR_ATTR_GET_CAP_QUERY_KVR_CAPABILITY,
-
-
- __MTK_NL80211_VENDOR_ATTR_GET_CAP_INFO_LAST,
- MTK_NL80211_VENDOR_ATTR_GET_CAP_INFO_MAX =
- __MTK_NL80211_VENDOR_ATTR_GET_CAP_INFO_LAST - 1
-};
-
-#endif /* __MTK_VENDOR_NL80211_H */
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/include/uapi/linux/wapp/mt_wlan_cmm_oid.h b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/include/uapi/linux/wapp/mt_wlan_cmm_oid.h
deleted file mode 100644
index ce31b3b..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/include/uapi/linux/wapp/mt_wlan_cmm_oid.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- ***************************************************************************
- * Mediatek Tech Inc.
- * 4F, No. 2 Technology 5th Rd.
- * Science-based Industrial Park
- * Hsin-chu, Taiwan, R.O.C.
- *
- * (c) Copyright 2020-2021, Mediatek Technology, Inc.
- *
- * All rights reserved. Mediatek's source code is an unpublished work and the
- * use of a copyright notice does not imply otherwise. This source code
- * contains confidential trade secret material of Mediatek Tech. Any attemp
- * or participation in deciphering, decoding, reverse engineering or in any
- * way altering the source code is stricitly prohibited, unless the prior
- * written consent of Mediatek Technology, Inc. is obtained.
- ***************************************************************************
-
- Module Name:
- wapp_cmm_type.h
-
- Abstract:
-
- Revision History:
- Who When What
- -------- ---------- ----------------------------------------------
-*/
-/* This file is used by wifi driver and wapp.
- Keep data structure sync */
-
-#define OID_802_11_APCLI_ENABLE 0x09B0
-#define OID_802_11_AUTO_ROAM 0x09B1
-#define OID_802_11_APCLI_BSSID 0x09B2
-#define OID_802_11_APPROXY_REFRESH 0x09B3
-#define OID_802_11_AUTH_MODE 0x09B4
-#define OID_802_11_APCLI_PMFMFPC 0x09B5
-#define OID_802_11_APCLI_SSID 0x09B6
-#define OID_802_11_APCLI_WPAPSK 0x09B7
-#define OID_802_11_APCLI_AUTH_MODE 0x09B8
-#define OID_802_11_APCLI_ENCRY_TYPE 0x09B9
-#define OID_802_11_ACL_ADDENTRY 0x09BA
-#define OID_802_11_ACL_DELENTRY 0x09BB
-#define OID_802_11_ACL_CLEARALL 0x09BC
-#define OID_802_11_ACCESS_POLICY 0x09BD
-#define OID_802_11_APCLI_AUTO_CONNECT 0x09BE
-#define OID_802_11_BCNREQ 0x09BF
-#define OID_802_11_BLADD 0x09C0
-#define OID_802_11_BLDEL 0x09C1
-#define OID_802_11_BHBSS 0x09C2
-#define OID_802_11_SET_CHANNEL 0x09C3
-#define OID_802_11_DPP_ENABLE 0x09C4
-#define OID_802_11_DISCONNECT_STA 0x09C5
-#define OID_802_11_DEFAULT_KEYID 0x09C6
-#define OID_802_11_DISCONNECT_ALL_STA 0x09C7
-#define OID_802_11_ENCRYP_TYPE 0x09C8
-#define OID_802_11_FHBSS 0x09C9
-#define OID_802_11_HTBSSCOEX 0x09CA
-#define OID_802_11_HIDE_SSID 0x09CB
-#define OID_802_11_HTBW 0x09CC
-#define OID_802_11_KEY1 0x09CD
-#define OID_802_11_MAP_CHANNEL 0x09CE
-#define OID_802_11_MNT_ENABLE 0x09CF
-#define OID_802_11_MNT_RULE 0x09D0
-#define OID_802_11_MNT_STA0 0x09D1
-#define OID_802_11_MAP_CHANNEL_ENABLE 0x09D2
-#define OID_802_11_MAP_ENABLE 0x09D3
-#define OID_802_11_PMFMFPC 0x09D4
-#define OID_802_11_RADIOON 0x09D5
-#define OID_802_11_SITESURVEY 0x09D6
-#define OID_802_11_TS_BH_PRIMARY_VID 0x09D7
-#define OID_802_11_TS_BH_PRIMARY_PCP 0x09D8
-#define OID_802_11_TS_BH_VID 0x09D9
-#define OID_802_11_TS_FH_VID 0x09DA
-#define OID_802_11_TRANSPARENT_VID 0x09DB
-#define OID_802_11_VHTBW 0x09DC
-#define OID_802_11_V10_CONVERTER 0x09DD
-#define OID_802_11_WSC_STOP 0x09DE
-#define OID_802_11_WSCCONF_MODE 0x09DF
-#define OID_802_11_WSC_MODE 0x09E0
-#define OID_802_11_WSC_GET_CONF 0x09E1
-#define OID_802_11_WSCCONF_STATUS 0x09E2
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/include/uapi/linux/wapp/wapp_cmm_type.h b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/include/uapi/linux/wapp/wapp_cmm_type.h
deleted file mode 100755
index d9216c9..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/files-5.4/include/uapi/linux/wapp/wapp_cmm_type.h
+++ /dev/null
@@ -1,1139 +0,0 @@
-/*
- ***************************************************************************
- * Mediatek Tech Inc.
- * 4F, No. 2 Technology 5th Rd.
- * Science-based Industrial Park
- * Hsin-chu, Taiwan, R.O.C.
- *
- * (c) Copyright 2002-2011, Mediatek Technology, Inc.
- *
- * All rights reserved. Mediatek's source code is an unpublished work and the
- * use of a copyright notice does not imply otherwise. This source code
- * contains confidential trade secret material of Mediatek Tech. Any attemp
- * or participation in deciphering, decoding, reverse engineering or in any
- * way altering the source code is stricitly prohibited, unless the prior
- * written consent of Mediatek Technology, Inc. is obtained.
- ***************************************************************************
-
- Module Name:
- wapp_cmm_type.h
-
- Abstract:
-
- Revision History:
- Who When What
- -------- ---------- ----------------------------------------------
-*/
-/* This file is used by wifi driver and wapp.
- Keep data structure sync */
-
-#ifndef __WAPP_TYPES_H__
-#define __WAPP_TYPES_H__
-
-//#include <linux/if_ether.h>
-#ifdef WAPP_SUPPORT
-#define MAX_BSSLOAD_THRD 100
-#endif /* WAPP_SUPPORT */
-
-#ifndef GNU_PACKED
-#define GNU_PACKED (__attribute__ ((packed)))
-#endif /* GNU_PACKED */
-
-#ifndef MAC_ADDR_LEN
-#define MAC_ADDR_LEN 6
-#endif
-#ifndef LEN_PMK
-#define LEN_PMK 32
-#endif
-#ifndef LEN_PMK_MAX
-#define LEN_PMK_MAX 48
-#endif
-#ifndef LEN_PMKID
-#define LEN_PMKID 16
-#endif
-#ifndef LEN_MAX_PTK
-#define LEN_MAX_PTK 88
-#endif
-#ifndef LEN_PSK
-#define LEN_PSK 64
-#endif
-#ifndef LEN_MAX_URI
-#define LEN_MAX_URI 120
-#endif
-
-#ifndef AC_NUM
-#define AC_NUM 4
-#endif
-#define MAX_HE_MCS_LEN 12
-#define MAX_OP_CLASS 16
-#define MAX_LEN_OF_SSID 32
-#define MAX_NUM_OF_CHANNELS 59 // 14 channels @2.4G + 12@UNII(lower/middle) + 16@HiperLAN2 + 11@UNII(upper) + 0@Japan + 1 as NULL termination
-#define ASSOC_REQ_LEN 154
-#define ASSOC_REQ_LEN_MAX 512
-#define PREQ_IE_LEN 200
-#define BCN_RPT_LEN 200
-#define IWSC_MAX_SUB_MASK_LIST_COUNT 3
-#define WMODE_CAP_N(_x) (((_x) & (WMODE_GN | WMODE_AN)) != 0)
-#define WMODE_CAP_AC(_x) (((_x) & (WMODE_AC)) != 0)
-#define WMODE_CAP_AX(_x) ((_x) & (WMODE_AX_24G | WMODE_AX_5G | WMODE_AX_6G))
-#define WMODE_CAP(_x, _mode) (((_x) & (_mode)) != 0)
-
-#define MAX_SUPPORT_INF_NUM 17 * MAX_NUM_OF_RADIO /* 16MBSS+1APCLI */
-#define MAX_NUM_OF_WAPP_CHANNELS 59
-#define MAX_PROFILE_CNT 4
-#define PER_EVENT_LIST_MAX_NUM 5
-#define DAEMON_NEIGHBOR_REPORT_MAX_NUM 128
-#define VERSION_WAPP_CMM "v3.0.0.1"
-#ifdef MAP_R3_WF6
-#define MAX_TID 4
-#endif
-typedef enum {
- WAPP_STA_INVALID,
- WAPP_STA_DISCONNECTED,
- WAPP_STA_CONNECTED,
-} WAPP_STA_STATE;
-
-typedef enum {
- WAPP_BSS_STOP = 0,
- WAPP_BSS_START,
-} WAPP_BSS_STATE;
-
-typedef enum {
- WAPP_AUTH = 0,
- WAPP_ASSOC,
- WAPP_EAPOL
-} WAPP_CNNCT_STAGE;
-
-typedef enum {
- WAPP_BSSLOAD_NORMAL = 0,
- WAPP_BSSLOAD_HIGH,
- WAPP_BSSLOAD_LOW,
-} WAPP_BSSLOAD_STATE;
-
-typedef enum {
- NOT_FAILURE = 0,
- AP_NOT_READY,
- ACL_CHECK_FAIL,
- BSSID_NOT_FOUND,
- BSSID_MISMATCH,
- BSSID_IF_NOT_READY,
- BND_STRG_CONNECT_CHECK_FAIL,
- DISALLOW_NEW_ASSOCI,
- EZ_CONNECT_DISALLOW,
- EZ_SETUP_FUNC_DISABLED,
- FT_ERROR,
- GO_UPDATE_NOT_COMPLETE,
- MLME_NO_RESOURCE,
- MLME_ASSOC_REJ_TEMP,
- MLME_UNABLE_HANDLE_STA,
- MLME_EZ_CNNCT_LOOP,
- MLME_REQ_WITH_INVALID_PARAM,
- MLME_REJECT_TIMEOUT,
- MLME_UNSPECIFY_FAILURE,
- NOT_FOUND_IN_RADIUS_ACL,
- PEER_REQ_SANITY_FAIL,
-} WAPP_CNNCT_FAIL_REASON_LIST;
-
-typedef enum {
- WAPP_APCLI_DISASSOCIATED = 0,
- WAPP_APCLI_ASSOCIATED,
-} WAPP_APCLI_ASSOC_STATE;
-
-typedef enum {
- WAPP_DEV_QUERY_RSP = 1,
- WAPP_HT_CAP_QUERY_RSP,
- WAPP_VHT_CAP_QUERY_RSP,
- WAPP_HE_CAP_QUERY_RSP,
- WAPP_MISC_CAP_QUERY_RSP,
- WAPP_CLI_QUERY_RSP,
- WAPP_CLI_LIST_QUERY_RSP,
- WAPP_CLI_JOIN_EVENT,
- WAPP_CLI_LEAVE_EVENT,
- WAPP_CLI_PROBE_EVENT,
- WAPP_CHN_LIST_RSP,
- WAPP_OP_CLASS_RSP,
- WAPP_BSS_INFO_RSP,
- WAPP_AP_METRIC_RSP,
- WAPP_CH_UTIL_QUERY_RSP,
- WAPP_AP_CONFIG_RSP,
- WAPP_APCLI_QUERY_RSP,
- MAP_BH_STA_WPS_DONE,
- MAP_TRIGGER_RSSI_STEER,
- WAPP_RCEV_BCN_REPORT,
- WAPP_RCEV_BCN_REPORT_COMPLETE,
- WAPP_RCEV_MONITOR_INFO,
- WAPP_BSSLOAD_RSP,
- WAPP_BSSLOAD_CROSSING,
- WAPP_BSS_STATE_CHANGE,
- WAPP_CH_CHANGE,
- WAPP_TX_POWER_CHANGE,
- WAPP_APCLI_ASSOC_STATE_CHANGE,
- WAPP_STA_RSSI_RSP,
- WAPP_CLI_ACTIVE_CHANGE,
- WAPP_CSA_EVENT,
- WAPP_STA_CNNCT_REJ,
- WAPP_APCLI_RSSI_RSP,
- WAPP_SCAN_RESULT_RSP,
- WAPP_MAP_VENDOR_IE,
- WAPP_WSC_SCAN_COMP_NOTIF,
- WAPP_MAP_WSC_CONFIG,
- WAPP_WSC_EAPOL_START_NOTIF,
- WAPP_WSC_EAPOL_COMPLETE_NOTIF,
- WAPP_SCAN_COMPLETE_NOTIF,
- WAPP_A4_ENTRY_MISSING_NOTIF,
- WAPP_RADAR_DETECT_NOTIF,
- WAPP_APCLI_ASSOC_STATE_CHANGE_VENDOR10,
- WAPP_CAC_STOP, //MAP R2
- WAPP_STA_DISASSOC_EVENT,
- WAPP_RADIO_METRIC_RSP,
- WAPP_DPP_ACTION_FRAME_RECEIVED,
- WAPP_DPP_ACTION_FRAME_STATUS,
- WAPP_DPP_CCE_RSP,
- WAPP_CAC_PERIOD_EVENT,
- WAPP_UNSAFE_CHANNEL_EVENT,
- WAPP_BAND_STATUS_CHANGE_EVENT,
- WAPP_STA_INFO,
- WAPP_R3_RECONFIG_TRIGGER,
- WAPP_R3_DPP_URI_INFO,
- WAPP_NO_STA_CONNECT_TIMEOUT_EVENT,
- WAPP_NO_DATA_TRAFFIC_TIMEOUT_EVENT,
- WAPP_WIFI_UP_EVENT,
- WAPP_WIFI_DOWN_EVENT,
- WAPP_QOS_ACTION_FRAME_EVENT = 70,
- WAPP_MSCS_CLASSIFIER_PARAM_EVENT,
- WAPP_VEND_SPEC_UP_TUPLE_EVENT,
- WAPP_CH_CHANGE_R3,
- WAPP_SELF_SRG_BITMAP_EVENT,
- WAPP_UPLINK_TRAFFIC_EVENT,
- WAPP_CONFIG_WPS_EVENT,
-} WAPP_EVENT_ID;
-
-typedef enum {
- WAPP_DEV_QUERY_REQ = 1,
- WAPP_HT_CAP_QUERY_REQ,
- WAPP_VHT_CAP_QUERY_REQ,
- WAPP_HE_CAP_QUERY_REQ,
- WAPP_MISC_CAP_QUERY_REQ,
- WAPP_CLI_QUERY_REQ,
- WAPP_CLI_LIST_QUERY_REQ,
- WAPP_CHN_LIST_QUERY_REQ,
- WAPP_OP_CLASS_QUERY_REQ,
- WAPP_BSS_INFO_QUERY_REQ,
- WAPP_AP_METRIC_QUERY_REQ,
- WAPP_CH_UTIL_QUERY_REQ,
- WAPP_APCLI_QUERY_REQ,
- WAPP_BSS_START_REQ,
- WAPP_BSS_STOP_REQ,
- WAPP_TXPWR_PRCTG_REQ,
- WAPP_STEERING_POLICY_SET_REQ,
- WAPP_BSS_LOAD_THRD_SET_REQ,
- WAPP_AP_CONFIG_SET_REQ,
- WAPP_BSSLOAD_QUERY_REQ,
- WAPP_HECAP_QUERY_REQ,
- WAPP_STA_RSSI_QUERY_REQ,
- WAPP_APCLI_RSSI_QUERY_REQ,
- WAPP_GET_SCAN_RESULTS,
- WAPP_SEND_NULL_FRAMES,
- WAPP_WSC_PBC_EXEC,
- WAPP_WSC_SET_BH_PROFILE,
- WAPP_SET_SCAN_BH_SSIDS,
- WAPP_SET_AVOID_SCAN_CAC,
-#ifdef MAP_R2
- WAPP_RADIO_METRICS_REQ,
-#endif
-#ifdef DPP_R2_SUPPORT
- WAPP_GET_CCE_RESULT,
-#endif
- WAPP_SET_SRG_BITMAP,
- WAPP_SET_TOPOLOGY_UPDATE,
- WAPP_SET_SRG_UPLINK_STATUS,
-} WAPP_REQ_ID;
-
-typedef enum {
- PARAM_DGAF_DISABLED,
- PARAM_PROXY_ARP,
- PARAM_L2_FILTER,
- PARAM_ICMPV4_DENY,
- PARAM_MMPDU_SIZE,
- PARAM_EXTERNAL_ANQP_SERVER_TEST,
- PARAM_GAS_COME_BACK_DELAY,
- PARAM_WNM_NOTIFICATION,
- PARAM_QOSMAP,
- PARAM_WNM_BSS_TRANSITION_MANAGEMENT,
-} WAPP_PARAM;
-
-typedef struct GNU_PACKED _WAPP_CONNECT_FAILURE_REASON {
- u8 connect_stage;
- u16 reason;
-} WAPP_CONNECT_FAILURE_REASON;
-
-typedef struct GNU_PACKED _wapp_dev_info {
- u32 ifindex;
- u8 ifname[IFNAMSIZ];
- u8 mac_addr[MAC_ADDR_LEN];
- u8 dev_type;
- u8 radio_id;
- u16 wireless_mode;
- uintptr_t adpt_id;
- u8 dev_active;
-} wapp_dev_info;
-
-typedef struct GNU_PACKED _wdev_ht_cap {
- u8 tx_stream;
- u8 rx_stream;
- u8 sgi_20;
- u8 sgi_40;
- u8 ht_40;
-} wdev_ht_cap;
-
-typedef struct GNU_PACKED _wdev_vht_cap {
- u8 sup_tx_mcs[2];
- u8 sup_rx_mcs[2];
- u8 tx_stream;
- u8 rx_stream;
- u8 sgi_80;
- u8 sgi_160;
- u8 vht_160;
- u8 vht_8080;
- u8 su_bf;
- u8 mu_bf;
-} wdev_vht_cap;
-
-typedef struct GNU_PACKED _wdev_he_cap {
- unsigned char he_mcs_len;
- unsigned char he_mcs[MAX_HE_MCS_LEN];
- unsigned char tx_stream;
- unsigned char rx_stream;
- unsigned char he_8080;
- unsigned char he_160;
- unsigned char su_bf_cap;
- unsigned char mu_bf_cap;
- unsigned char ul_mu_mimo_cap;
- unsigned char ul_mu_mimo_ofdma_cap;
- unsigned char dl_mu_mimo_ofdma_cap;
- unsigned char ul_ofdma_cap;
- unsigned char dl_ofdma_cap;
- unsigned char gi; /* 0:auto;1:800;2:1600;3:3200 */
-} wdev_he_cap;
-
-
-#ifdef MAP_R2
-typedef struct GNU_PACKED _wdev_extended_ap_metrics {
- u32 uc_tx;
- u32 uc_rx;
- u32 mc_tx;
- u32 mc_rx;
- u32 bc_tx;
- u32 bc_rx;
-} wdev_extended_ap_metric;
-
-
-typedef struct GNU_PACKED _wdev_sta_extended_info {
-#if 0
- u8 bssid[MAC_ADDR_LEN];
-#endif
- u32 last_data_ul_rate;
- u32 last_data_dl_rate;
- u32 utilization_rx;
- u32 utilization_tx;
-} wdev_sta_ext_info;
-
-typedef struct GNU_PACKED _wdev_extended_sta_metrics {
-#if 0
- u8 sta_mac[MAC_ADDR_LEN];
- u8 extended_info_cnt;
-#endif
- wdev_sta_ext_info sta_info;
-} wdev_extended_sta_metrics;
-
-#endif
-typedef struct GNU_PACKED _wapp_cac_info {
- u8 channel;
- u8 ret;
- u8 cac_timer;
-} wapp_cac_info;
-#ifdef MAP_R2
-typedef enum cac_mode
-{
- CONTINUOUS_CAC,
- DEDICATED_CAC,
- REDUCED_MIMO_CAC,
-} CAC_MODE;
-#endif
-
-
-typedef struct GNU_PACKED _wdev_misc_cap {
- u8 max_num_of_cli;
- u8 max_num_of_bss;
- u8 num_of_bss;
- u8 max_num_of_block_cli;
-} wdev_misc_cap;
-
-struct GNU_PACKED he_nss{
- u16 nss_80:2;
- u16 nss_160:2;
- u16 nss_8080:2;
-};
-
-struct GNU_PACKED map_cli_cap {
- u16 bw:2;
- u16 phy_mode:3;
- u16 nss:2;
- u16 btm_capable:1;
- u16 rrm_capable:1;
- u16 mbo_capable:1;
- struct he_nss nss_he;
-};
-
-#ifdef MAP_R3_WF6
-struct GNU_PACKED assoc_wifi6_sta_info {
- unsigned char tid;
- unsigned char tid_q_size;
-};
-
-typedef struct GNU_PACKED _wdev_wf6_cap {
- unsigned char he_mcs_len;
- unsigned char he_mcs[MAX_HE_MCS_LEN];
- unsigned char tx_stream;
- unsigned char rx_stream;
- unsigned char he_8080;
- unsigned char he_160;
- unsigned char su_bf_cap;
- unsigned char mu_bf_cap;
- unsigned char ul_mu_mimo_cap;
- unsigned char ul_mu_mimo_ofdma_cap;
- unsigned char dl_mu_mimo_ofdma_cap;
- unsigned char ul_ofdma_cap;
- unsigned char dl_ofdma_cap;
- unsigned char agent_role;
- unsigned char su_beamformee_status;
- unsigned char beamformee_sts_less80;
- unsigned char beamformee_sts_more80;
- unsigned char max_user_dl_tx_mu_mimo;
- unsigned char max_user_ul_rx_mu_mimo;
- unsigned char max_user_dl_tx_ofdma;
- unsigned char max_user_ul_rx_ofdma;
- unsigned char rts_status;
- unsigned char mu_rts_status;
- unsigned char m_bssid_status;
- unsigned char mu_edca_status;
- unsigned char twt_requester_status;
- unsigned char twt_responder_status;
-} wdev_wf6_cap;
-
-typedef struct GNU_PACKED _wdev_wf6_cap_roles {
- unsigned char role_supp;
- wdev_wf6_cap wf6_role[2];
-} wdev_wf6_cap_roles;
-#endif
-
-typedef struct GNU_PACKED _wapp_client_info {
- u8 mac_addr[MAC_ADDR_LEN];
- u8 bssid[MAC_ADDR_LEN];
- u8 sta_status; /* WAPP_STA_STATE */
- u16 assoc_time;
- u16 downlink;
- u16 uplink;
- signed char uplink_rssi;
- /*traffic stats*/
- u32 bytes_sent;
- u32 bytes_received;
- u32 packets_sent;
- u32 packets_received;
- u32 tx_packets_errors;
- u32 rx_packets_errors;
- u32 retransmission_count;
- u16 link_availability;
- u16 assoc_req_len;
- u8 bLocalSteerDisallow;
- u8 bBTMSteerDisallow;
- u8 status;
- /* ht_cap */
- /* vht_cap */
-
- /* Throughput for Tx/Rx */
- u32 tx_tp;
- u32 rx_tp;
- struct map_cli_cap cli_caps;
-#ifdef MAP_R2
- wdev_extended_sta_metrics ext_metric_info;
-#endif
- u16 disassoc_reason;
-#ifdef MAP_R2
- u8 IsReassoc;
-#endif
- u8 is_APCLI;
-#ifdef MAP_R3_WF6
- u8 tid_cnt;
- struct assoc_wifi6_sta_info status_tlv[MAX_TID];
-#endif
-} wapp_client_info;
-
-struct GNU_PACKED chnList {
- u8 channel;
- u8 pref;
- u16 cac_timer;
-};
-
-typedef struct GNU_PACKED _wdev_chn_info {
- u8 op_ch;
- u8 op_class;
- u16 band; /* 24g; 5g1; 5g2 */
- u8 ch_list_num;
- u8 non_op_chn_num;
- u16 dl_mcs;
- struct chnList ch_list[32];
- u8 non_op_ch_list[32];
- u8 AutoChannelSkipListNum;
- u8 AutoChannelSkipList[MAX_NUM_OF_CHANNELS + 1];
-} wdev_chn_info;
-
-struct GNU_PACKED opClassInfo {
- u8 op_class;
- u8 num_of_ch;
- u8 ch_list[13];
-};
-
-typedef struct GNU_PACKED _wdev_op_class_info {
- u8 num_of_op_class;
- struct opClassInfo opClassInfo[MAX_OP_CLASS];
-} wdev_op_class_info;
-
-struct GNU_PACKED opClassInfoExt {
- u8 op_class;
- u8 num_of_ch;
- u8 ch_list[MAX_NUM_OF_CHANNELS];
-};
-
-struct GNU_PACKED _wdev_op_class_info_ext {
- u8 num_of_op_class;
- struct opClassInfoExt opClassInfoExt[MAX_OP_CLASS];
-};
-
-typedef struct GNU_PACKED _wdev_bss_info {
- u8 if_addr[MAC_ADDR_LEN];
- u8 bssid[MAC_ADDR_LEN];
- char ssid[MAX_LEN_OF_SSID + 1];
- u8 SsidLen;
- u8 map_role;
- u32 auth_mode;
- u32 enc_type;
- u8 key_len;
- u8 key[64 + 1];
- u8 hidden_ssid;
-} wdev_bss_info;
-
-typedef struct GNU_PACKED _wsc_apcli_config {
- char ssid[MAX_LEN_OF_SSID + 1];
- u8 SsidLen;
- u16 AuthType;
- u16 EncrType;
- u8 Key[64];
- u16 KeyLength;
- u8 KeyIndex;
- u8 bssid[MAC_ADDR_LEN];
- u8 peer_map_role;
- u8 own_map_role;
-} wsc_apcli_config;
-
-typedef struct GNU_PACKED _wsc_apcli_config_msg {
- u32 profile_count;
- wsc_apcli_config apcli_config[0];
-} wsc_apcli_config_msg, *p_wsc_apcli_config_msg;
-
-typedef struct GNU_PACKED _wdev_ap_metric {
- u8 bssid[MAC_ADDR_LEN];
- u8 cu;
- u8 ESPI_AC[AC_NUM][3];
-#ifdef MAP_R2
- wdev_extended_ap_metric ext_ap_metric;
-#endif
-} wdev_ap_metric;
-
-#ifdef MAP_R2
-typedef struct GNU_PACKED _wdev_radio_metric {
- u8 cu_noise;
- u8 cu_tx;
- u8 cu_rx;
- u8 cu_other;
- u32 edcca;
-} wdev_radio_metric;
-#endif
-typedef struct GNU_PACKED _wdev_ap_config {
- u8 sta_report_on_cop;
- u8 sta_report_not_cop;
- u8 rssi_steer;
-} wdev_ap_config;
-
-struct GNU_PACKED pwr_limit {
- u8 op_class;
- u8 max_pwr;
-};
-
-typedef struct GNU_PACKED _wdev_tx_power {
- u8 num_of_op_class;
- struct pwr_limit tx_pwr_limit[MAX_OP_CLASS];
- u16 tx_pwr;
-} wdev_tx_power;
-
-/*Driver detects sta needed to steer*/
-typedef struct GNU_PACKED _wdev_steer_sta {
- u8 mac_addr[MAC_ADDR_LEN];
-} wdev_steer_sta;
-
-typedef struct GNU_PACKED _wapp_probe_info {
- u8 mac_addr[MAC_ADDR_LEN];
- u8 channel;
- signed char rssi;
- u8 preq_len;
- u8 preq[PREQ_IE_LEN];
-} wapp_probe_info;
-
-typedef struct GNU_PACKED _wapp_bcn_rpt_info {
- u8 sta_addr[MAC_ADDR_LEN];
- u8 last_fragment;
- u16 bcn_rpt_len;
- u8 bcn_rpt[BCN_RPT_LEN];
-} wapp_bcn_rpt_info;
-
-typedef struct GNU_PACKED wapp_bhsta_info {
- u8 mac_addr[MAC_ADDR_LEN];
- u8 connected_bssid[MAC_ADDR_LEN];
- u8 peer_map_enable;
-} wapp_bhsta_info;
-
-typedef struct GNU_PACKED _wdev_steer_policy {
- u8 steer_policy;
- u8 cu_thr;
- u8 rcpi_thr;
-} wdev_steer_policy;
-
-typedef struct GNU_PACKED _bssload_threshold {
- u8 high_bssload_thrd;
- u8 low_bssload_thrd;
-} bssload_threshold;
-
-typedef struct GNU_PACKED _wapp_bssload_info {
- u16 sta_cnt;
- u8 ch_util;
- u16 AvalAdmCap;
-} wapp_bssload_info;
-
-/* By air monitor*/
-typedef struct GNU_PACKED _wapp_mnt_info {
- u8 sta_addr[MAC_ADDR_LEN];
- signed char rssi;
-} wapp_mnt_info;
-
-typedef struct GNU_PACKED _wapp_csa_info {
- u8 new_channel;
-} wapp_csa_info;
-
-#ifdef WPS_UNCONFIG_FEATURE_SUPPORT
-struct GNU_PACKED wapp_wps_config_info {
- u8 SSID[33]; /* mandatory */
- u8 channel;
- u16 AuthType; /* mandatory, 1: open, 2: wpa-psk, 4: shared, 8:wpa, 0x10: wpa2, 0x20: wpa2-psk */
- u16 EncrType; /* mandatory, 1: none, 2: wep, 4: tkip, 8: aes */
- u8 Key[64]; /* mandatory, Maximum 64 byte */
- u16 KeyLength;
- u8 MacAddr[MAC_ADDR_LEN]; /* mandatory, AP MAC address */
- u8 bss_role; /*0-Fronthaul, 1-Backhaul*/
- u8 index;
-};
-#endif
-typedef struct GNU_PACKED _wapp_bss_state_info {
- u32 interface_index;
- WAPP_BSS_STATE bss_state;
-} wapp_bss_state_info;
-
-typedef struct GNU_PACKED _wapp_ch_change_info {
- u32 interface_index;
- u8 new_ch;/*New channel IEEE number*/
- u8 op_class;
-} wapp_ch_change_info;
-
-typedef struct GNU_PACKED _wapp_txpower_change_info {
- u32 interface_index;
- u16 new_tx_pwr;/*New TX power*/
-} wapp_txpower_change_info;
-
-typedef struct GNU_PACKED _wapp_apcli_association_info {
- u32 interface_index;
- WAPP_APCLI_ASSOC_STATE apcli_assoc_state;
- signed char rssi;
- signed char PeerMAPEnable;
-} wapp_apcli_association_info;
-
-typedef struct GNU_PACKED _wapp_bssload_crossing_info {
- u32 interface_index;
- u8 bssload_high_thrd;
- u8 bssload_low_thrd;
- u8 bssload;
-} wapp_bssload_crossing_info;
-
-typedef struct GNU_PACKED _wapp_sta_cnnct_rejected_info {
- u32 interface_index;
- u8 sta_mac[MAC_ADDR_LEN];
- u8 bssid[MAC_ADDR_LEN];
- WAPP_CONNECT_FAILURE_REASON cnnct_fail;
-#ifdef MAP_R2
- u16 assoc_status_code;
- u16 assoc_reason_code;
-#endif
-} wapp_sta_cnnct_rej_info;
-
-struct GNU_PACKED map_vendor_ie
-{
- u8 type;
- u8 subtype;
- u8 root_distance;
- u8 connectivity_to_controller;
- u16 uplink_rate;
- u8 uplink_bssid[MAC_ADDR_LEN];
- u8 bssid_5g[MAC_ADDR_LEN];
- u8 bssid_2g[MAC_ADDR_LEN];
-};
-
-typedef struct _qbss_load_param {
- u8 bValid; /* 1: variable contains valid value */
- u16 StaNum;
- u8 ChannelUtilization;
- u16 RemainingAdmissionControl; /* in unit of 32-us */
-} QBSS_LOAD_PARM, *PQBSS_LOAD_PARM;
-
-#ifdef MAP_R2
-typedef struct GNU_PACKED _wapp_qbss_load {
- u8 bValid;/*1: variable contains valid value*/
- u16 StaNum;
- u8 ChannelUtilization;
- u16 RemainingAdmissionControl;/*in unit of 32-us*/
-} WAPP_QBSS_LOAD_PARM;
-
-#endif
-#ifdef MAP_6E_SUPPORT
-struct GNU_PACKED map_rnr {
- u8 channel;
- u8 op;
- u8 cce_ind;
-};
-#endif
-
-#ifdef DPP_R2_SUPPORT
-struct GNU_PACKED cce_vendor_ie
-{
- u8 value;
-};
-
-#define MAX_CCE_CHANNEL 128
-
-struct GNU_PACKED cce_vendor_ie_result {
- u8 num;
- u8 cce_ch[MAX_CCE_CHANNEL];//channel list, on which beacon includes cce ie
-};
-#endif
-
-struct GNU_PACKED scan_bss_info {
- u8 Bssid[MAC_ADDR_LEN];
- u8 Channel;
- u8 CentralChannel;
- signed char Rssi;
- signed char MinSNR;
- u8 Privacy;
-
- u8 SsidLen;
- u8 Ssid[MAX_LEN_OF_SSID];
-
- u16 AuthMode;
- u16 EncrypType;
- wdev_ht_cap ht_cap;
- wdev_vht_cap vht_cap;
- wdev_he_cap he_cap;
- u8 map_vendor_ie_found;
- struct map_vendor_ie map_info;
-#ifdef MAP_R2
- WAPP_QBSS_LOAD_PARM QbssLoad;
-#endif
-#ifdef MAP_6E_SUPPORT
- struct map_rnr rnr_6e;
-#endif
-};
-struct GNU_PACKED wapp_scan_info {
- u32 interface_index;
- u8 more_bss;
- u8 bss_count;
- struct scan_bss_info bss[0];
-};
-
-struct GNU_PACKED wapp_wsc_scan_info {
- u8 bss_count;
- u8 Uuid[16];
-};
-
-struct GNU_PACKED radar_notif_s
-{
- u32 channel;
- u32 status;
- u32 bw;
-};
-
-#ifdef WIFI_MD_COEX_SUPPORT
-struct GNU_PACKED unsafe_channel_notif_s
-{
- u32 ch_bitmap[4];
-};
-
-struct GNU_PACKED band_status_change {
- u8 status; /*0-radio temporarily cannot be used, 1-radio can be used*/
-};
-#endif
-
-typedef struct GNU_PACKED _NDIS_802_11_SSID {
- u32 SsidLength; /* length of SSID field below, in bytes; */
- /* this can be zero. */
- char Ssid[MAX_LEN_OF_SSID]; /* SSID information field */
-} NDIS_802_11_SSID, *PNDIS_802_11_SSID;
-struct GNU_PACKED nop_channel_list_s
-{
- u8 channel_count;
- u8 channel_list[MAX_NUM_OF_WAPP_CHANNELS];
-};
-
-/* WSC configured credential */
-typedef struct _WSC_CREDENTIAL {
- NDIS_802_11_SSID SSID; /* mandatory */
- u16 AuthType; /* mandatory, 1: open, 2: wpa-psk, 4: shared, 8:wpa, 0x10: wpa2, 0x20: wpa2-psk */
- u16 EncrType; /* mandatory, 1: none, 2: wep, 4: tkip, 8: aes */
- u8 Key[64]; /* mandatory, Maximum 64 byte */
- u16 KeyLength;
- u8 MacAddr[MAC_ADDR_LEN]; /* mandatory, AP MAC address */
- u8 KeyIndex; /* optional, default is 1 */
- u8 bFromUPnP; /* TRUE: This credential is from external UPnP registrar */
- u8 bss_role; /*0-Fronthaul, 1-Backhaul*/
- u8 DevPeerRole; /* Device role for the peer device sending M8 */
- u16 IpConfigMethod;
- u32 RegIpv4Addr;
- u32 Ipv4SubMask;
- u32 EnrIpv4Addr;
- u32 AvaIpv4SubmaskList[IWSC_MAX_SUB_MASK_LIST_COUNT];
-} WSC_CREDENTIAL, *PWSC_CREDENTIAL;
-
-struct scan_SSID
-{
- char ssid[MAX_LEN_OF_SSID+ 1];
- unsigned char SsidLen;
-};
-
-struct vendor_map_element {
- u8 eid;
- u8 length;
- char oui[3]; /* 0x50 6F 9A */
- char mtk_ie_element[4];
- char type;
- char subtype;
- char root_distance;
- char controller_connectivity;
- short uplink_rate;
- char uplink_bssid[MAC_ADDR_LEN];
- char _5g_bssid[MAC_ADDR_LEN];
- char _2g_bssid[MAC_ADDR_LEN];
-};
-
-struct GNU_PACKED scan_BH_ssids
-{
- unsigned long scan_cookie;
- unsigned char scan_channel_count;
- unsigned char scan_channel_list[32];
- unsigned char profile_cnt;
- struct scan_SSID scan_SSID_val[MAX_PROFILE_CNT];
-};
-
-struct GNU_PACKED action_frm_data {
- u32 ifindex;
- u8 bssid[MAC_ADDR_LEN];
- u8 destination_addr[MAC_ADDR_LEN];
- u8 transmitter_addr[MAC_ADDR_LEN];
- u32 chan;
- u32 wait_time;
- u32 no_cck;
- u32 frm_len;
- u16 seq_no;
- char frm[0];
-};
-
-struct GNU_PACKED roc_req {
- u32 ifindex;
- u32 chan;
- u32 wait_time;
-};
-
-#ifdef DPP_SUPPORT
-struct GNU_PACKED wapp_dpp_action_frame {
- u8 src[MAC_ADDR_LEN];
- u32 wapp_dpp_frame_id_no;
- u32 chan;
- u32 frm_len;
- u32 is_gas;
- u8 frm[0];
-};
-
-struct GNU_PACKED wapp_dpp_frm_tx_status {
- u8 tx_success;
- u16 seq_no;
-};
-
-struct GNU_PACKED pmk_req {
- u32 ifindex;
- u8 pmk[LEN_PMK];
- u8 pmk_len;
- u8 pmkid[LEN_PMKID];
- u8 authenticator_addr[MAC_ADDR_LEN];
- u8 supplicant_addr[MAC_ADDR_LEN];
- int timeout;
- int akmp;
- u8 ssid[MAX_LEN_OF_SSID];
- size_t ssidlen;
-};
-#endif /*DPP_SUPPORT*/
-#ifdef MAP_R3
-struct GNU_PACKED wapp_sta_info {
- u8 src[MAC_ADDR_LEN];
- char ssid[MAX_LEN_OF_SSID + 1];
- unsigned char SsidLen;
- u8 passphrase[LEN_PSK];
- u8 pmk_len;
- u8 pmk[LEN_PMK_MAX];
- u8 ptk_len;
- u8 ptk[LEN_MAX_PTK];
-};
-
-struct GNU_PACKED wapp_uri_info {
- u8 src_mac[MAC_ADDR_LEN];
- u8 uri_len;
- u8 rcvd_uri[LEN_MAX_URI];
-};
-#endif /* MAP_R3 */
-
-struct GNU_PACKED wapp_srg_bitmap {
- u32 color_31_0;
- u32 color_63_32;
- u32 bssid_31_0;
- u32 bssid_63_32;
-};
-
-struct GNU_PACKED wapp_mesh_sr_info {
- u8 sr_mode;
- u8 ul_traffic_status;
- struct wapp_srg_bitmap bm_info;
-};
-
-struct GNU_PACKED wapp_mesh_sr_topology {
- u8 map_dev_count;
- u8 map_dev_sr_support_mode;
- u8 self_role;
- u8 map_remote_al_mac[MAC_ADDR_LEN];
- u8 map_remote_fh_bssid[MAC_ADDR_LEN];
- u8 map_remote_bh_mac[MAC_ADDR_LEN];
- unsigned char ssid_len;
- unsigned char ssid[MAX_LEN_OF_SSID + 1];
-};
-
-typedef union GNU_PACKED _wapp_event_data {
- wapp_dev_info dev_info;
- wdev_ht_cap ht_cap;
- wdev_vht_cap vht_cap;
- wdev_misc_cap misc_cap;
- wapp_client_info cli_info;
- wdev_chn_info chn_list;
- wdev_op_class_info op_class;
- wdev_bss_info bss_info;
- wdev_ap_metric ap_metrics;
- wdev_ap_config ap_conf;
- wdev_tx_power tx_pwr;
- wdev_steer_sta str_sta;
- wapp_probe_info probe_info;
- wapp_bcn_rpt_info bcn_rpt_info;
- wapp_bssload_info bssload_info;
- wapp_bssload_crossing_info bssload_crossing_info;
- wapp_mnt_info mnt_info;
- wapp_bss_state_info bss_state_info;
- wapp_ch_change_info ch_change_info;
- wapp_txpower_change_info txpwr_change_info;
- wapp_apcli_association_info apcli_association_info;
- wapp_bhsta_info bhsta_info;
- wapp_csa_info csa_info;
- wapp_sta_cnnct_rej_info sta_cnnct_rej_info;
- u8 ch_util;
- struct wapp_scan_info scan_info;
- struct wapp_wsc_scan_info wsc_scan_info;
- u32 a4_missing_entry_ip;
- struct radar_notif_s radar_notif;
-#ifdef WPS_UNCONFIG_FEATURE_SUPPORT
- struct wapp_wps_config_info wps_conf_info;
-#endif
- wapp_cac_info cac_info;
-#ifdef MAP_R2
- wdev_extended_ap_metric ext_ap_metrics;
- wdev_radio_metric radio_metrics;
-#endif
-#ifdef DPP_SUPPORT
- u32 wapp_dpp_frame_id_no;
- struct wapp_dpp_action_frame frame;
- struct wapp_dpp_frm_tx_status tx_status;
-#ifdef DPP_R2_SUPPORT
- struct cce_vendor_ie_result cce_ie_result;
-#endif
-#endif /*DPP_SUPPORT*/
- unsigned char cac_enable;
-#ifdef WIFI_MD_COEX_SUPPORT
- struct unsafe_channel_notif_s unsafe_ch_notif;
- struct band_status_change band_status;
-#endif
-#ifdef MAP_R3
- struct wapp_sta_info sta_info;
- struct wapp_uri_info uri_info;
-#endif /* MAP_R3 */
-#ifdef QOS_R1
- u8 *qos_frm;
-#endif
- u8 ifname[IFNAMSIZ];
-#ifdef MAP_R3
- struct wapp_mesh_sr_info mesh_sr_info;
-#endif /* MAP_R3 */
-} wapp_event_data;
-struct GNU_PACKED _wapp_event2_data {
- wapp_client_info cli_info;
-};
-typedef struct GNU_PACKED _wapp_req_data {
- u32 ifindex;
- u8 mac_addr[MAC_ADDR_LEN];
- u32 value;
- bssload_threshold bssload_thrd;
- wdev_steer_policy str_policy;
- wdev_ap_config ap_conf;
- WSC_CREDENTIAL bh_wsc_profile;
- struct scan_BH_ssids scan_bh_ssids;
-#ifdef MAP_R3
- struct wapp_srg_bitmap bm_info;
- u8 band_index;
- struct wapp_mesh_sr_topology topology_update;
-#endif /* MAP_R3 */
-} wapp_req_data;
-
-struct GNU_PACKED wapp_req {
- u8 req_id;
- u8 data_len;
- wapp_req_data data;
-};
-
-struct GNU_PACKED wapp_event {
- u8 len;
- u8 event_id;
- u32 ifindex;
- wapp_event_data data;
-};
-struct GNU_PACKED wapp_event2 {
- u8 len;
- u8 event_id;
- u32 ifindex;
- struct _wapp_event2_data data;
-};
-typedef struct GNU_PACKED _tbtt_info_set {
- u8 NrAPTbttOffset;
- u32 ShortBssid;
-} tbtt_info_set;
-
-typedef struct GNU_PACKED _wapp_nr_info
-{
- u8 Bssid[MAC_ADDR_LEN];
- u32 BssidInfo;
- u8 RegulatoryClass;
- u8 ChNum;
- u8 PhyType;
- u8 CandidatePrefSubID;
- u8 CandidatePrefSubLen;
- u8 CandidatePref;
- /* extra sec info */
- u32 akm;
- u32 cipher;
- u8 TbttInfoSetNum;
- tbtt_info_set TbttInfoSet;
- u8 Rssi;
-} wapp_nr_info;
-
-/* for NR IE , append Bssid ~ CandidatePref */
-#define NEIGHBOR_REPORT_IE_SIZE sizeof(wapp_nr_info) - 15
-
-
-typedef struct daemon_nr_list {
- u8 CurrListNum;
- wapp_nr_info NRInfo[DAEMON_NEIGHBOR_REPORT_MAX_NUM];
-} DAEMON_NR_LIST, *P_DAEMON_NR_LIST;
-
-typedef struct GNU_PACKED daemon_neighbor_report_list {
- u8 Newlist;
- u8 TotalNum;
- u8 CurrNum;
- u8 reserved;
- wapp_nr_info EvtNRInfo[PER_EVENT_LIST_MAX_NUM];
-} DAEMON_EVENT_NR_LIST, *P_DAEMON_EVENT_NR_LIST;
-
-
-typedef struct GNU_PACKED neighbor_report_msg {
- DAEMON_EVENT_NR_LIST evt_nr_list;
-} DAEMON_NR_MSG, *P_DAEMON_NR_MSG;
-
-
-/* for coverting wireless mode to string */
-enum WIFI_MODE {
- WMODE_INVALID = 0,
- WMODE_A = 1 << 0,
- WMODE_B = 1 << 1,
- WMODE_G = 1 << 2,
- WMODE_GN = 1 << 3,
- WMODE_AN = 1 << 4,
- WMODE_AC = 1 << 5,
- WMODE_AX_24G = 1 << 6,
- WMODE_AX_5G = 1 << 7,
- WMODE_AX_6G = 1 << 8,
- WMODE_COMP = 9, /* total types of supported wireless mode, add this value once yow add new type */
-};
-typedef union GNU_PACKED _RRM_BSSID_INFO
-{
- struct GNU_PACKED
- {
-#ifdef RT_BIG_ENDIAN
- u32 Reserved:18;
- u32 FTM:1;
- u32 VHT:1;
- u32 HT:1;
- u32 MobilityDomain:1;
- u32 ImmediateBA:1;
- u32 DelayBlockAck:1;
- u32 RRM:1;
- u32 APSD:1;
- u32 Qos:1;
- u32 SpectrumMng:1;
- u32 KeyScope:1;
- u32 Security:1;
- u32 APReachAble:2;
-#else
- u32 APReachAble:2;
- u32 Security:1;
- u32 KeyScope:1;
- u32 SpectrumMng:1;
- u32 Qos:1;
- u32 APSD:1;
- u32 RRM:1;
- u32 DelayBlockAck:1;
- u32 ImmediateBA:1;
- u32 MobilityDomain:1;
- u32 HT:1;
- u32 VHT:1;
- u32 FTM:1;
- u32 Reserved:18;
-#endif
- } field;
- u32 word;
-} RRM_BSSID_INFO, *PRRM_BSSID_INFO;
-#endif /* __WAPP_TYPES_H__ */
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-32bit-5.4/401-pinctrl-add-mt7986-driver-32bit.patch b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-32bit-5.4/401-pinctrl-add-mt7986-driver-32bit.patch
new file mode 100644
index 0000000..5022e49
--- /dev/null
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-32bit-5.4/401-pinctrl-add-mt7986-driver-32bit.patch
@@ -0,0 +1,28 @@
+diff --git a/drivers/pinctrl/mediatek/Kconfig b/drivers/pinctrl/mediatek/Kconfig
+index 701f9af..9109f91 100644
+--- a/drivers/pinctrl/mediatek/Kconfig
++++ b/drivers/pinctrl/mediatek/Kconfig
+@@ -100,6 +100,11 @@ config PINCTRL_MT7622
+ default ARM64 && ARCH_MEDIATEK
+ select PINCTRL_MTK_MOORE
+
++config PINCTRL_MT7986
++ bool "Mediatek MT7986 pin control"
++ depends on OF
++ select PINCTRL_MTK_MOORE
++
+ config PINCTRL_MT8173
+ bool "Mediatek MT8173 pin control"
+ depends on OF
+diff --git a/drivers/pinctrl/mediatek/Makefile b/drivers/pinctrl/mediatek/Makefile
+index a74325a..d408585 100644
+--- a/drivers/pinctrl/mediatek/Makefile
++++ b/drivers/pinctrl/mediatek/Makefile
+@@ -15,6 +15,7 @@ obj-$(CONFIG_PINCTRL_MT6797) += pinctrl-mt6797.o
+ obj-$(CONFIG_PINCTRL_MT7622) += pinctrl-mt7622.o
+ obj-$(CONFIG_PINCTRL_MT7623) += pinctrl-mt7623.o
+ obj-$(CONFIG_PINCTRL_MT7629) += pinctrl-mt7629.o
++obj-$(CONFIG_PINCTRL_MT7986) += pinctrl-mt7986.o
+ obj-$(CONFIG_PINCTRL_MT8173) += pinctrl-mt8173.o
+ obj-$(CONFIG_PINCTRL_MT8183) += pinctrl-mt8183.o
+ obj-$(CONFIG_PINCTRL_MT8516) += pinctrl-mt8516.o
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/999-add_armv7_support_for_panther.patch b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-32bit-5.4/999-add_armv7_support_for_panther.patch
similarity index 100%
rename from recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/999-add_armv7_support_for_panther.patch
rename to recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-32bit-5.4/999-add_armv7_support_for_panther.patch
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/mt7986-32bit.cfg b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-32bit-5.4/mt7986-32bit.cfg
similarity index 100%
rename from recipes-kernel/linux/linux-mediatek-5.4/mediatek/mt7986-32bit.cfg
rename to recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-32bit-5.4/mt7986-32bit.cfg
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/0101-add-mtk-wifi-utility-rbus.patch b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/0101-add-mtk-wifi-utility-rbus.patch
deleted file mode 100644
index 211324b..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/0101-add-mtk-wifi-utility-rbus.patch
+++ /dev/null
@@ -1,11 +0,0 @@
-diff -urN a/drivers/net/wireless/Makefile b/drivers/net/wireless/Makefile
---- a/drivers/net/wireless/Makefile 2020-05-08 12:16:50.030922777 +0800
-+++ b/drivers/net/wireless/Makefile 2020-05-08 12:16:55.718755223 +0800
-@@ -12,6 +12,7 @@
- obj-$(CONFIG_WLAN_VENDOR_INTERSIL) += intersil/
- obj-$(CONFIG_WLAN_VENDOR_MARVELL) += marvell/
- obj-$(CONFIG_WLAN_VENDOR_MEDIATEK) += mediatek/
-+obj-y += wifi_utility/
- obj-$(CONFIG_WLAN_VENDOR_RALINK) += ralink/
- obj-$(CONFIG_WLAN_VENDOR_REALTEK) += realtek/
- obj-$(CONFIG_WLAN_VENDOR_RSI) += rsi/
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/0303-mtd-spinand-disable-on-die-ECC.patch b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/0303-mtd-spinand-disable-on-die-ECC.patch
new file mode 100644
index 0000000..5c18ea0
--- /dev/null
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/0303-mtd-spinand-disable-on-die-ECC.patch
@@ -0,0 +1,31 @@
+From b341f120cfc9ca1dfd48364b7f36ac2c1fbdea43 Mon Sep 17 00:00:00 2001
+From: Xiangsheng Hou <xiangsheng.hou@mediatek.com>
+Date: Wed, 3 Apr 2019 16:30:01 +0800
+Subject: [PATCH 3/6] mtd: spinand: disable on-die ECC
+
+Change-Id: I9745adaed5295202fabbe8ab8947885c57a5b847
+Signed-off-by: Xiangsheng Hou <xiangsheng.hou@mediatek.com>
+---
+ drivers/mtd/nand/spi/core.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/mtd/nand/spi/core.c
++++ b/drivers/mtd/nand/spi/core.c
+@@ -491,7 +491,7 @@ static int spinand_mtd_read(struct mtd_i
+ int ret = 0;
+
+ if (ops->mode != MTD_OPS_RAW && spinand->eccinfo.ooblayout)
+- enable_ecc = true;
++ enable_ecc = false;
+
+ mutex_lock(&spinand->lock);
+
+@@ -539,7 +539,7 @@ static int spinand_mtd_write(struct mtd_
+ int ret = 0;
+
+ if (ops->mode != MTD_OPS_RAW && mtd->ooblayout)
+- enable_ecc = true;
++ enable_ecc = false;
+
+ mutex_lock(&spinand->lock);
+
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/0600-net-phylink-propagate-resolved-link-config-via-mac_l.patch b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/0600-net-phylink-propagate-resolved-link-config-via-mac_l.patch
index a49b921..13a9a51 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/0600-net-phylink-propagate-resolved-link-config-via-mac_l.patch
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/0600-net-phylink-propagate-resolved-link-config-via-mac_l.patch
@@ -109,6 +109,22 @@
{
struct mvpp2_port *port = mvpp2_phylink_to_port(config);
u32 val;
+--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
++++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+@@ -449,9 +449,10 @@ static void mtk_mac_link_down(struct phy
+ mtk_w32(mac->hw, mcr, MTK_MAC_MCR(mac->id));
+ }
+
+-static void mtk_mac_link_up(struct phylink_config *config, unsigned int mode,
+- phy_interface_t interface,
+- struct phy_device *phy)
++static void mtk_mac_link_up(struct phylink_config *config,
++ struct phy_device *phy,
++ unsigned int mode, phy_interface_t interface,
++ int speed, int duplex, bool tx_pause, bool rx_pause)
+ {
+ struct mtk_mac *mac = container_of(config, struct mtk_mac,
+ phylink_config);
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -925,8 +925,10 @@ static void stmmac_mac_link_down(struct
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/0671-add-micron-MT29F4G01ABAFD-spi-nand-support.patch b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/0671-add-micron-MT29F4G01ABAFD-spi-nand-support.patch
deleted file mode 100644
index 40833c0..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/0671-add-micron-MT29F4G01ABAFD-spi-nand-support.patch
+++ /dev/null
@@ -1,111 +0,0 @@
---- a/drivers/mtd/nand/spi/micron.c
-+++ b/drivers/mtd/nand/spi/micron.c
-@@ -18,7 +18,9 @@
- #define MICRON_STATUS_ECC_4TO6_BITFLIPS (3 << 4)
- #define MICRON_STATUS_ECC_7TO8_BITFLIPS (5 << 4)
-
--static SPINAND_OP_VARIANTS(read_cache_variants,
-+#define MICRON_CFG_CR BIT(0)
-+
-+static SPINAND_OP_VARIANTS(quadio_read_cache_variants,
- SPINAND_PAGE_READ_FROM_CACHE_QUADIO_OP(0, 2, NULL, 0),
- SPINAND_PAGE_READ_FROM_CACHE_X4_OP(0, 1, NULL, 0),
- SPINAND_PAGE_READ_FROM_CACHE_DUALIO_OP(0, 1, NULL, 0),
-@@ -26,46 +28,46 @@ static SPINAND_OP_VARIANTS(read_cache_va
- SPINAND_PAGE_READ_FROM_CACHE_OP(true, 0, 1, NULL, 0),
- SPINAND_PAGE_READ_FROM_CACHE_OP(false, 0, 1, NULL, 0));
-
--static SPINAND_OP_VARIANTS(write_cache_variants,
-+static SPINAND_OP_VARIANTS(x4_write_cache_variants,
- SPINAND_PROG_LOAD_X4(true, 0, NULL, 0),
- SPINAND_PROG_LOAD(true, 0, NULL, 0));
-
--static SPINAND_OP_VARIANTS(update_cache_variants,
-+static SPINAND_OP_VARIANTS(x4_update_cache_variants,
- SPINAND_PROG_LOAD_X4(false, 0, NULL, 0),
- SPINAND_PROG_LOAD(false, 0, NULL, 0));
-
--static int mt29f2g01abagd_ooblayout_ecc(struct mtd_info *mtd, int section,
-- struct mtd_oob_region *region)
-+static int micron_8_ooblayout_ecc(struct mtd_info *mtd, int section,
-+ struct mtd_oob_region *region)
- {
- if (section)
- return -ERANGE;
-
-- region->offset = 64;
-- region->length = 64;
-+ region->offset = mtd->oobsize / 2;
-+ region->length = mtd->oobsize / 2;
-
- return 0;
- }
-
--static int mt29f2g01abagd_ooblayout_free(struct mtd_info *mtd, int section,
-- struct mtd_oob_region *region)
-+static int micron_8_ooblayout_free(struct mtd_info *mtd, int section,
-+ struct mtd_oob_region *region)
- {
- if (section)
- return -ERANGE;
-
- /* Reserve 2 bytes for the BBM. */
- region->offset = 2;
-- region->length = 62;
-+ region->length = (mtd->oobsize / 2) - 2;
-
- return 0;
- }
-
--static const struct mtd_ooblayout_ops mt29f2g01abagd_ooblayout = {
-- .ecc = mt29f2g01abagd_ooblayout_ecc,
-- .free = mt29f2g01abagd_ooblayout_free,
-+static const struct mtd_ooblayout_ops micron_8_ooblayout = {
-+ .ecc = micron_8_ooblayout_ecc,
-+ .free = micron_8_ooblayout_free,
- };
-
--static int mt29f2g01abagd_ecc_get_status(struct spinand_device *spinand,
-- u8 status)
-+static int micron_8_ecc_get_status(struct spinand_device *spinand,
-+ u8 status)
- {
- switch (status & MICRON_STATUS_ECC_MASK) {
- case STATUS_ECC_NO_BITFLIPS:
-@@ -94,12 +96,21 @@ static const struct spinand_info micron_
- SPINAND_INFO("MT29F2G01ABAGD", 0x24,
- NAND_MEMORG(1, 2048, 128, 64, 2048, 40, 2, 1, 1),
- NAND_ECCREQ(8, 512),
-- SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
-- &write_cache_variants,
-- &update_cache_variants),
-+ SPINAND_INFO_OP_VARIANTS(&quadio_read_cache_variants,
-+ &x4_write_cache_variants,
-+ &x4_update_cache_variants),
- 0,
-- SPINAND_ECCINFO(&mt29f2g01abagd_ooblayout,
-- mt29f2g01abagd_ecc_get_status)),
-+ SPINAND_ECCINFO(µn_8_ooblayout,
-+ micron_8_ecc_get_status)),
-+ SPINAND_INFO("MT29F4G01ABAFD", 0x34,
-+ NAND_MEMORG(1, 4096, 256, 64, 2048, 40, 1, 1, 1),
-+ NAND_ECCREQ(8, 512),
-+ SPINAND_INFO_OP_VARIANTS(&quadio_read_cache_variants,
-+ &x4_write_cache_variants,
-+ &x4_update_cache_variants),
-+ SPINAND_HAS_CR_FEAT_BIT,
-+ SPINAND_ECCINFO(µn_8_ooblayout,
-+ micron_8_ecc_get_status)),
- };
-
- static int micron_spinand_detect(struct spinand_device *spinand)
---- a/include/linux/mtd/spinand.h
-+++ b/include/linux/mtd/spinand.h
-@@ -270,6 +270,7 @@ struct spinand_ecc_info {
- };
-
- #define SPINAND_HAS_QE_BIT BIT(0)
-+#define SPINAND_HAS_CR_FEAT_BIT BIT(1)
-
- /**
- * struct spinand_info - Structure used to describe SPI NAND chips
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/0672-add-F50L1G41LB-and-GD5F1GQ5UExxG-snand-support.patch b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/0672-add-F50L1G41LB-and-GD5F1GQ5UExxG-snand-support.patch
deleted file mode 100644
index 63eee5d..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/0672-add-F50L1G41LB-and-GD5F1GQ5UExxG-snand-support.patch
+++ /dev/null
@@ -1,75 +0,0 @@
-Index: linux-5.4.158/drivers/mtd/nand/spi/gigadevice.c
-===================================================================
---- linux-5.4.158.orig/drivers/mtd/nand/spi/gigadevice.c
-+++ linux-5.4.158/drivers/mtd/nand/spi/gigadevice.c
-@@ -36,6 +36,15 @@ static SPINAND_OP_VARIANTS(read_cache_va
- SPINAND_PAGE_READ_FROM_CACHE_OP_3A(true, 0, 1, NULL, 0),
- SPINAND_PAGE_READ_FROM_CACHE_OP_3A(false, 0, 0, NULL, 0));
-
-+/* Q5 devices, QUADIO: Dummy bytes only valid for 1 GBit variants */
-+static SPINAND_OP_VARIANTS(gd5f1gq5_read_cache_variants,
-+ SPINAND_PAGE_READ_FROM_CACHE_QUADIO_OP(0, 2, NULL, 0),
-+ SPINAND_PAGE_READ_FROM_CACHE_X4_OP(0, 1, NULL, 0),
-+ SPINAND_PAGE_READ_FROM_CACHE_DUALIO_OP(0, 1, NULL, 0),
-+ SPINAND_PAGE_READ_FROM_CACHE_X2_OP(0, 1, NULL, 0),
-+ SPINAND_PAGE_READ_FROM_CACHE_OP(true, 0, 1, NULL, 0),
-+ SPINAND_PAGE_READ_FROM_CACHE_OP(false, 0, 1, NULL, 0));
-+
- static SPINAND_OP_VARIANTS(write_cache_variants,
- SPINAND_PROG_LOAD_X4(true, 0, NULL, 0),
- SPINAND_PROG_LOAD(true, 0, NULL, 0));
-@@ -223,7 +232,54 @@ static int gd5fxgq4ufxxg_ecc_get_status(
- return -EINVAL;
- }
-
-+static int esmt_1_ooblayout_ecc(struct mtd_info *mtd, int section,
-+ struct mtd_oob_region *region)
-+{
-+ if (section > 3)
-+ return -ERANGE;
-+
-+ region->offset = (16 * section) + 8;
-+ region->length = 8;
-+
-+ return 0;
-+}
-+
-+static int esmt_1_ooblayout_free(struct mtd_info *mtd, int section,
-+ struct mtd_oob_region *region)
-+{
-+ if (section > 3)
-+ return -ERANGE;
-+
-+ region->offset = (16 * section) + 2;
-+ region->length = 6;
-+
-+ return 0;
-+}
-+
-+static const struct mtd_ooblayout_ops esmt_1_ooblayout = {
-+ .ecc = esmt_1_ooblayout_ecc,
-+ .free = esmt_1_ooblayout_free,
-+};
-+
- static const struct spinand_info gigadevice_spinand_table[] = {
-+ SPINAND_INFO("F50L1G41LB", 0x01,
-+ NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1),
-+ NAND_ECCREQ(8, 512),
-+ SPINAND_INFO_OP_VARIANTS(&gd5f1gq5_read_cache_variants,
-+ &write_cache_variants,
-+ &update_cache_variants),
-+ 0,
-+ SPINAND_ECCINFO(&esmt_1_ooblayout,
-+ NULL)),
-+ SPINAND_INFO("GD5F1GQ5UExxG", 0x51,
-+ NAND_MEMORG(1, 2048, 128, 64, 1024, 20, 1, 1, 1),
-+ NAND_ECCREQ(4, 512),
-+ SPINAND_INFO_OP_VARIANTS(&gd5f1gq5_read_cache_variants,
-+ &write_cache_variants,
-+ &update_cache_variants),
-+ SPINAND_HAS_QE_BIT,
-+ SPINAND_ECCINFO(&gd5fxgq4xa_ooblayout,
-+ gd5fxgq4xa_ecc_get_status)),
- SPINAND_INFO("GD5F1GQ4xA", 0xF1,
- NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1),
- NAND_ECCREQ(8, 512),
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/1004_remove_eth_transmit_timeout_hw_reset.patch b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/1004_remove_eth_transmit_timeout_hw_reset.patch
deleted file mode 100755
index 69a0acb..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/1004_remove_eth_transmit_timeout_hw_reset.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-Index: linux-5.4.143/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-===================================================================
---- linux-5.4.143.orig/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-+++ linux-5.4.143/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -2483,9 +2483,7 @@ static void mtk_tx_timeout(struct net_de
- eth->netdev[mac->id]->stats.tx_errors++;
- netif_err(eth, tx_err, dev,
- "transmit timed out\n");
-- schedule_work(ð->pending_work);
- }
--
- static irqreturn_t mtk_handle_irq_rx(int irq, void *priv)
- {
- struct mtk_napi *rx_napi = priv;
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/1005-mtkhnat-fix-pse-hang-for-multi-stations.patch b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/1005-mtkhnat-fix-pse-hang-for-multi-stations.patch
deleted file mode 100644
index aaf1794..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/1005-mtkhnat-fix-pse-hang-for-multi-stations.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff --git a/drivers/net/ethernet/mediatek/mtk_hnat/hnat.c b/drivers/net/ethernet/mediatek/mtk_hnat/hnat.c
-index c0794e37..2968eb68 100644
---- a/drivers/net/ethernet/mediatek/mtk_hnat/hnat.c
-+++ b/drivers/net/ethernet/mediatek/mtk_hnat/hnat.c
-@@ -250,6 +250,7 @@ static int hnat_start(int ppe_id)
- writel(0, hnat_priv->ppe_base[ppe_id] + PPE_DFT_CPORT); /* pdma */
- /* writel(0x55555555, hnat_priv->ppe_base[ppe_id] + PPE_DFT_CPORT); */ /* qdma */
- cr_set_field(hnat_priv->ppe_base[ppe_id] + PPE_GLO_CFG, TTL0_DRP, 0);
-+ cr_set_field(hnat_priv->ppe_base[ppe_id] + PPE_GLO_CFG, MCAST_TB_EN, 1);
-
- if (hnat_priv->data->version == MTK_HNAT_V4) {
- writel(0xcb777, hnat_priv->ppe_base[ppe_id] + PPE_DFT_CPORT1);
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/401-pinctrl-add-mt7986-driver.patch b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/401-pinctrl-add-mt7986-driver.patch
index 5022e49..a02873d 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/401-pinctrl-add-mt7986-driver.patch
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/401-pinctrl-add-mt7986-driver.patch
@@ -2,13 +2,15 @@
index 701f9af..9109f91 100644
--- a/drivers/pinctrl/mediatek/Kconfig
+++ b/drivers/pinctrl/mediatek/Kconfig
-@@ -100,6 +100,11 @@ config PINCTRL_MT7622
+@@ -100,6 +100,13 @@ config PINCTRL_MT7622
default ARM64 && ARCH_MEDIATEK
select PINCTRL_MTK_MOORE
+config PINCTRL_MT7986
+ bool "Mediatek MT7986 pin control"
+ depends on OF
++ depends on ARM64 || COMPILE_TEST
++ default ARM64 && ARCH_MEDIATEK
+ select PINCTRL_MTK_MOORE
+
config PINCTRL_MT8173
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/412-mtd-spinand-gigadevice-Add-support-for-F50L1G41LB-and-GD5F1GQ5UExxG.patch b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/412-mtd-spinand-gigadevice-Add-support-for-F50L1G41LB-and-GD5F1GQ5UExxG.patch
new file mode 100644
index 0000000..32bce58
--- /dev/null
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/412-mtd-spinand-gigadevice-Add-support-for-F50L1G41LB-and-GD5F1GQ5UExxG.patch
@@ -0,0 +1,44 @@
+--- a/drivers/mtd/nand/spi/gigadevice.c
++++ b/drivers/mtd/nand/spi/gigadevice.c
+@@ -39,6 +39,15 @@ static SPINAND_OP_VARIANTS(read_cache_va
+ SPINAND_PAGE_READ_FROM_CACHE_OP_3A(true, 0, 1, NULL, 0),
+ SPINAND_PAGE_READ_FROM_CACHE_OP_3A(false, 0, 0, NULL, 0));
+
++/* Q5 devices, QUADIO: Dummy bytes only valid for 1 GBit variants */
++static SPINAND_OP_VARIANTS(gd5f1gq5_read_cache_variants,
++ SPINAND_PAGE_READ_FROM_CACHE_QUADIO_OP(0, 2, NULL, 0),
++ SPINAND_PAGE_READ_FROM_CACHE_X4_OP(0, 1, NULL, 0),
++ SPINAND_PAGE_READ_FROM_CACHE_DUALIO_OP(0, 1, NULL, 0),
++ SPINAND_PAGE_READ_FROM_CACHE_X2_OP(0, 1, NULL, 0),
++ SPINAND_PAGE_READ_FROM_CACHE_OP(true, 0, 1, NULL, 0),
++ SPINAND_PAGE_READ_FROM_CACHE_OP(false, 0, 1, NULL, 0));
++
+ static SPINAND_OP_VARIANTS(write_cache_variants,
+ SPINAND_PROG_LOAD_X4(true, 0, NULL, 0),
+ SPINAND_PROG_LOAD(true, 0, NULL, 0));
+@@ -265,6 +274,16 @@ static int gd5fxgq4ufxxg_ecc_get_status(
+ }
+
+ static const struct spinand_info gigadevice_spinand_table[] = {
++ SPINAND_INFO("F50L1G41LB",
++ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0x01),
++ NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1),
++ NAND_ECCREQ(8, 512),
++ SPINAND_INFO_OP_VARIANTS(&gd5f1gq5_read_cache_variants,
++ &write_cache_variants,
++ &update_cache_variants),
++ 0,
++ SPINAND_ECCINFO(&gd5fxgq4xa_ooblayout,
++ gd5fxgq4xa_ecc_get_status)),
+ SPINAND_INFO("GD5F1GQ4xA",
+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0xf1),
+ NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1),
+@@ -337,7 +356,7 @@ static const struct spinand_info gigadev
+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x51),
+ NAND_MEMORG(1, 2048, 128, 64, 1024, 20, 1, 1, 1),
+ NAND_ECCREQ(4, 512),
+- SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
++ SPINAND_INFO_OP_VARIANTS(&gd5f1gq5_read_cache_variants,
+ &write_cache_variants,
+ &update_cache_variants),
+ SPINAND_HAS_QE_BIT,
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/413-mtd-spinand-gigadevice-Add-support-for-GD5FxGQxUExxG-GD5FxGQxUExxH-and-GD5FxGMxUExxG-series.patch b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/413-mtd-spinand-gigadevice-Add-support-for-GD5FxGQxUExxG-GD5FxGQxUExxH-and-GD5FxGMxUExxG-series.patch
new file mode 100644
index 0000000..83e4c71
--- /dev/null
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/413-mtd-spinand-gigadevice-Add-support-for-GD5FxGQxUExxG-GD5FxGQxUExxH-and-GD5FxGMxUExxG-series.patch
@@ -0,0 +1,128 @@
+--- a/drivers/mtd/nand/spi/gigadevice.c
++++ b/drivers/mtd/nand/spi/gigadevice.c
+@@ -39,8 +39,9 @@ static SPINAND_OP_VARIANTS(read_cache_va
+ SPINAND_PAGE_READ_FROM_CACHE_OP_3A(true, 0, 1, NULL, 0),
+ SPINAND_PAGE_READ_FROM_CACHE_OP_3A(false, 0, 0, NULL, 0));
+
+-/* Q5 devices, QUADIO: Dummy bytes only valid for 1 GBit variants */
+-static SPINAND_OP_VARIANTS(gd5f1gq5_read_cache_variants,
++/* For Q5 devices, QUADIO use different dummy byte settings */
++/* Q5 1Gb */
++static SPINAND_OP_VARIANTS(dummy2_read_cache_variants,
+ SPINAND_PAGE_READ_FROM_CACHE_QUADIO_OP(0, 2, NULL, 0),
+ SPINAND_PAGE_READ_FROM_CACHE_X4_OP(0, 1, NULL, 0),
+ SPINAND_PAGE_READ_FROM_CACHE_DUALIO_OP(0, 1, NULL, 0),
+@@ -48,6 +49,15 @@ static SPINAND_OP_VARIANTS(gd5f1gq5_read
+ SPINAND_PAGE_READ_FROM_CACHE_OP(true, 0, 1, NULL, 0),
+ SPINAND_PAGE_READ_FROM_CACHE_OP(false, 0, 1, NULL, 0));
+
++/* Q5 2Gb & 4Gb */
++static SPINAND_OP_VARIANTS(dummy4_read_cache_variants,
++ SPINAND_PAGE_READ_FROM_CACHE_QUADIO_OP(0, 4, NULL, 0),
++ SPINAND_PAGE_READ_FROM_CACHE_X4_OP(0, 1, NULL, 0),
++ SPINAND_PAGE_READ_FROM_CACHE_DUALIO_OP(0, 2, NULL, 0),
++ SPINAND_PAGE_READ_FROM_CACHE_X2_OP(0, 1, NULL, 0),
++ SPINAND_PAGE_READ_FROM_CACHE_OP(true, 0, 1, NULL, 0),
++ SPINAND_PAGE_READ_FROM_CACHE_OP(false, 0, 1, NULL, 0));
++
+ static SPINAND_OP_VARIANTS(write_cache_variants,
+ SPINAND_PROG_LOAD_X4(true, 0, NULL, 0),
+ SPINAND_PROG_LOAD(true, 0, NULL, 0));
+@@ -249,7 +259,7 @@ static const struct spinand_info gigadev
+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0x01),
+ NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1),
+ NAND_ECCREQ(8, 512),
+- SPINAND_INFO_OP_VARIANTS(&gd5f1gq5_read_cache_variants,
++ SPINAND_INFO_OP_VARIANTS(&dummy2_read_cache_variants,
+ &write_cache_variants,
+ &update_cache_variants),
+ 0,
+@@ -309,7 +319,87 @@ static const struct spinand_info gigadev
+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x51),
+ NAND_MEMORG(1, 2048, 128, 64, 1024, 20, 1, 1, 1),
+ NAND_ECCREQ(4, 512),
+- SPINAND_INFO_OP_VARIANTS(&gd5f1gq5_read_cache_variants,
++ SPINAND_INFO_OP_VARIANTS(&dummy2_read_cache_variants,
++ &write_cache_variants,
++ &update_cache_variants),
++ SPINAND_HAS_QE_BIT,
++ SPINAND_ECCINFO(&gd5fxgqx_variant2_ooblayout,
++ gd5fxgq5xexxg_ecc_get_status)),
++ SPINAND_INFO("GD5F2GQ5UExxG",
++ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0x52),
++ NAND_MEMORG(1, 2048, 128, 64, 2048, 40, 1, 1, 1),
++ NAND_ECCREQ(4, 512),
++ SPINAND_INFO_OP_VARIANTS(&dummy4_read_cache_variants,
++ &write_cache_variants,
++ &update_cache_variants),
++ SPINAND_HAS_QE_BIT,
++ SPINAND_ECCINFO(&gd5fxgqx_variant2_ooblayout,
++ gd5fxgq5xexxg_ecc_get_status)),
++ SPINAND_INFO("GD5F4GQ6UExxG",
++ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0x55),
++ NAND_MEMORG(1, 2048, 128, 64, 4096, 80, 1, 1, 1),
++ NAND_ECCREQ(4, 512),
++ SPINAND_INFO_OP_VARIANTS(&dummy4_read_cache_variants,
++ &write_cache_variants,
++ &update_cache_variants),
++ SPINAND_HAS_QE_BIT,
++ SPINAND_ECCINFO(&gd5fxgqx_variant2_ooblayout,
++ gd5fxgq5xexxg_ecc_get_status)),
++ SPINAND_INFO("GD5F1GM7UExxG",
++ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0x91),
++ NAND_MEMORG(1, 2048, 128, 64, 1024, 20, 1, 1, 1),
++ NAND_ECCREQ(8, 512),
++ SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
++ &write_cache_variants,
++ &update_cache_variants),
++ SPINAND_HAS_QE_BIT,
++ SPINAND_ECCINFO(&gd5fxgqx_variant2_ooblayout,
++ gd5fxgq4uexxg_ecc_get_status)),
++ SPINAND_INFO("GD5F2GM7UExxG",
++ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0x92),
++ NAND_MEMORG(1, 2048, 128, 64, 2048, 40, 1, 1, 1),
++ NAND_ECCREQ(8, 512),
++ SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
++ &write_cache_variants,
++ &update_cache_variants),
++ SPINAND_HAS_QE_BIT,
++ SPINAND_ECCINFO(&gd5fxgqx_variant2_ooblayout,
++ gd5fxgq4uexxg_ecc_get_status)),
++ SPINAND_INFO("GD5F4GM8UExxG",
++ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0x95),
++ NAND_MEMORG(1, 2048, 128, 64, 4096, 80, 1, 1, 1),
++ NAND_ECCREQ(8, 512),
++ SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
++ &write_cache_variants,
++ &update_cache_variants),
++ SPINAND_HAS_QE_BIT,
++ SPINAND_ECCINFO(&gd5fxgqx_variant2_ooblayout,
++ gd5fxgq4uexxg_ecc_get_status)),
++ SPINAND_INFO("GD5F1GQ5UExxH",
++ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x31),
++ NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1),
++ NAND_ECCREQ(4, 512),
++ SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
++ &write_cache_variants,
++ &update_cache_variants),
++ SPINAND_HAS_QE_BIT,
++ SPINAND_ECCINFO(&gd5fxgqx_variant2_ooblayout,
++ gd5fxgq5xexxg_ecc_get_status)),
++ SPINAND_INFO("GD5F2GQ5UExxH",
++ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x32),
++ NAND_MEMORG(1, 2048, 64, 64, 2048, 40, 1, 1, 1),
++ NAND_ECCREQ(4, 512),
++ SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
++ &write_cache_variants,
++ &update_cache_variants),
++ SPINAND_HAS_QE_BIT,
++ SPINAND_ECCINFO(&gd5fxgqx_variant2_ooblayout,
++ gd5fxgq5xexxg_ecc_get_status)),
++ SPINAND_INFO("GD5F4GQ6UExxH",
++ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x32),
++ NAND_MEMORG(1, 2048, 64, 64, 4096, 80, 1, 1, 1),
++ NAND_ECCREQ(4, 512),
++ SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+ &write_cache_variants,
+ &update_cache_variants),
+ SPINAND_HAS_QE_BIT,
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/9001-PATCH-1-2-xHCI-MT7986-USB-2.0-USBIF-compliance-toolkit.patch b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/9001-PATCH-1-2-xHCI-MT7986-USB-2.0-USBIF-compliance-toolkit.patch
index 738d9b2..452b237 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/9001-PATCH-1-2-xHCI-MT7986-USB-2.0-USBIF-compliance-toolkit.patch
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/9001-PATCH-1-2-xHCI-MT7986-USB-2.0-USBIF-compliance-toolkit.patch
@@ -1,4 +1,4 @@
-From b4048b5efd1ac39f85d86dedbf54a9b614d17d64 Mon Sep 17 00:00:00 2001
+From 9deb29cc86b8fdee6702f8d575f08f9a214cf90a Mon Sep 17 00:00:00 2001
From: Zhanyong Wang <zhanyong.wang@mediatek.com>
Date: Thu, 27 May 2021 11:44:17 +0800
Subject: [PATCH 1/2] xHCI: MT7986 USB 2.0 USBIF compliance toolkit
@@ -8,12 +8,12 @@
Signed-off-by: Zhanyong Wang <zhanyong.wang@mediatek.com>
---
drivers/usb/host/Kconfig | 9 +++++++++
- drivers/usb/host/Makefile | 8 ++++++++
+ drivers/usb/host/Makefile | 9 +++++++++
drivers/usb/host/xhci-mtk.c | 5 ++++-
drivers/usb/host/xhci-mtk.h | 7 +++++++
drivers/usb/host/xhci.c | 2 +-
drivers/usb/host/xhci.h | 1 +
- 6 files changed, 30 insertions(+), 2 deletions(-)
+ 6 files changed, 31 insertions(+), 2 deletions(-)
diff --git a/drivers/usb/host/Kconfig b/drivers/usb/host/Kconfig
index 79b2e79dddd0..12b1bf9aa043 100644
@@ -36,10 +36,10 @@
tristate "xHCI support for Marvell Armada 375/38x/37xx"
select USB_XHCI_PLATFORM
diff --git a/drivers/usb/host/Makefile b/drivers/usb/host/Makefile
-index b191361257cc..704237831a58 100644
+index b191361257cc..612c855adfa1 100644
--- a/drivers/usb/host/Makefile
+++ b/drivers/usb/host/Makefile
-@@ -21,6 +21,14 @@ endif
+@@ -21,6 +21,15 @@ endif
ifneq ($(CONFIG_USB_XHCI_MTK), )
xhci-hcd-y += xhci-mtk-sch.o
@@ -51,6 +51,7 @@
+ xhci-hcd-$(CONFIG_USB_XHCI_MTK_DEBUGFS) += xhci-mtk-hstx-srctrl.o
+ xhci-hcd-$(CONFIG_USB_XHCI_MTK_DEBUGFS) += xhci-mtk-discth.o
+ xhci-hcd-$(CONFIG_USB_XHCI_MTK_DEBUGFS) += xhci-mtk-chgdt-en.o
++ xhci-hcd-$(CONFIG_USB_XHCI_MTK_DEBUGFS) += xhci-mtk-reg.o
endif
xhci-plat-hcd-y := xhci-plat.o
@@ -105,7 +106,7 @@
static inline struct xhci_hcd_mtk *hcd_to_mtk(struct usb_hcd *hcd)
diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
-index 4bb850370bb6..710ccbe5a3b8 100644
+index 1c8070023161..cf004950bc00 100644
--- a/drivers/usb/host/xhci.c
+++ b/drivers/usb/host/xhci.c
@@ -713,7 +713,7 @@ EXPORT_SYMBOL_GPL(xhci_run);
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/9002-PATCH-1-1-usb-add-embedded-Host-feature-support.patch b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/9002-PATCH-1-1-usb-add-embedded-Host-feature-support.patch
index 356ae99..14c32a8 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/9002-PATCH-1-1-usb-add-embedded-Host-feature-support.patch
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/9002-PATCH-1-1-usb-add-embedded-Host-feature-support.patch
@@ -1,4 +1,4 @@
-From 801da3c9fd916d3743b8af174f4ef4aefc071981 Mon Sep 17 00:00:00 2001
+From 5b28b61fb9c88e3d2f7c7057929d55e54bc17966 Mon Sep 17 00:00:00 2001
From: Zhanyong Wang <zhanyong.wang@mediatek.com>
Date: Thu, 17 Jun 2021 16:09:04 +0800
Subject: [PATCH 2/2] usb: add embedded Host feature support
@@ -20,10 +20,10 @@
3 files changed, 47 insertions(+), 3 deletions(-)
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
-index 303e8b3c1bda..b8c96ac26886 100644
+index 4cf0dc7f330d..f2f330606d0c 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
-@@ -2419,6 +2419,8 @@ static int usb_enumerate_device(struct usb_device *udev)
+@@ -2422,6 +2422,8 @@ static int usb_enumerate_device(struct usb_device *udev)
if (err < 0)
dev_dbg(&udev->dev, "HNP fail, %d\n", err);
}
@@ -32,7 +32,7 @@
return -ENOTSUPP;
}
-@@ -4778,9 +4780,10 @@ hub_port_init(struct usb_hub *hub, struct usb_device *udev, int port1,
+@@ -4779,9 +4781,10 @@ hub_port_init(struct usb_hub *hub, struct usb_device *udev, int port1,
goto fail;
}
if (r) {
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/9999-null-test.patch b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/9999-null-test.patch
deleted file mode 100644
index e69de29..0000000
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/9999-null-test.patch
+++ /dev/null
diff --git a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/patches-5.4.inc b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/patches-5.4.inc
index 2fbfbf9..c99ccdc 100644
--- a/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/patches-5.4.inc
+++ b/recipes-kernel/linux/linux-mediatek-5.4/mediatek/patches-5.4/patches-5.4.inc
@@ -13,12 +13,12 @@
file://0020-dts-mt7622-enable-new-mtk-snand-for-ubi.patch \
file://0021-dts-mt7622-remove-cooling-device.patch \
file://0100-hwnat_Kconfig_Makefile.patch \
- file://0101-add-mtk-wifi-utility-rbus.patch \
file://0111-mt7986-trng-add-rng-support.patch \
file://0200-show_model_name_in_cpuinfo_on_arm64.patch \
file://0226-phy-phy-mtk-tphy-Add-hifsys-support.patch \
file://0227-arm-dts-Add-Unielec-U7623-DTS.patch \
file://0301-mtd-mtk-ecc-move-mtk-ecc-header-file-to-include-mtd.patch \
+ file://0303-mtd-spinand-disable-on-die-ECC.patch \
file://0306-spi-spi-mem-MediaTek-Add-SPI-NAND-Flash-interface-dr.patch \
file://0307-dts-mt7629-add-snand-support.patch \
file://0308-dts-mt7622-add-snand-support.patch \
@@ -31,7 +31,7 @@
file://0502-dts-mt7623-eip97-inside-secure-support.patch \
file://0503-crypto-fix-eip97-cache-incoherent.patch \
file://0504-macsec-revert-async-support.patch \
- file://0600-net-phylink-propagate-resolved-link-config-via-mac_l.patch \
+ file://0600-net-phylink-propagate-resolved-link-config-via-mac_l.patch;apply=no \
file://0601-net-dsa-propagate-resolved-link-config-via-mac_link_.patch \
file://0602-net-dsa-mt7530-use-resolved-link-config-in-mac_link_.patch \
file://0603-net-dsa-mt7530-Extend-device-data-ready-for-adding-a.patch \
@@ -43,8 +43,6 @@
file://0668-spi-mediatek-fix-dma-unmap-twice.patch \
file://0669-fix-SPIM-NAND-and-NOR-probing.patch \
file://0670-fix-SPIM-dma-buffer-not-aligned.patch \
- file://0671-add-micron-MT29F4G01ABAFD-spi-nand-support.patch \
- file://0672-add-F50L1G41LB-and-GD5F1GQ5UExxG-snand-support.patch \
file://0701-fix-mtk-nfi-driver-dependency.patch \
file://0801-mtk-sd-add-mt7986-support.patch \
file://0900-bt-mtk-serial-fix.patch \
@@ -61,8 +59,6 @@
file://1001-mtkhnat-ipv6-fix-pskb-expand-head-limitation.patch \
file://1002-mtkhnat-add-support-for-virtual-interface-acceleration.patch \
file://1003-dts-mt7622-rfb-change-to-ax-mtd-layout.patch \
- file://1004_remove_eth_transmit_timeout_hw_reset.patch \
- file://1005-mtkhnat-fix-pse-hang-for-multi-stations.patch \
file://1010-pcie-mediatek-fix-clearing-interrupt-status.patch \
file://1015-pcie-add-pcie-gen3-upstream-driver.patch \
file://1020-spi-nor-w25q512jv.patch \
@@ -74,6 +70,8 @@
file://400-mtd-add-mtk-snand-driver.patch \
file://401-pinctrl-add-mt7986-driver.patch \
file://402-pinctrl-add-mt7981-driver.patch \
+ file://412-mtd-spinand-gigadevice-Add-support-for-F50L1G41LB-and-GD5F1GQ5UExxG.patch \
+ file://413-mtd-spinand-gigadevice-Add-support-for-GD5FxGQxUExxG-GD5FxGQxUExxH-and-GD5FxGMxUExxG-series.patch \
file://500-auxadc-add-auxadc-32k-clk.patch \
file://730-net-ethernet-mtk_eth_soc-add-mtk-dsa-tag-rx-offload.patch \
file://738-mt7531-gsw-internal_phy_calibration.patch \
@@ -95,7 +93,5 @@
file://9001-PATCH-1-2-xHCI-MT7986-USB-2.0-USBIF-compliance-toolkit.patch \
file://9002-PATCH-1-1-usb-add-embedded-Host-feature-support.patch \
file://9009-Add-spi-runtime-PM-support.patch \
- file://9010-iwconfig-wireless-rate-fix.patch \
- file://999-add_armv7_support_for_panther.patch \
- file://9999-null-test.patch \
+ file://9010-iwconfig-wireless-rate-fix.patch;apply=no \
"