[][MT76][WED][fix build error and repatch ]

[Description]
Fix build error and repatch after wed rx upstream

[Release-log]
N/A

Change-Id: I15df382a8f3f1797fccb0250e99de958fa6fabdb
Reviewed-on: https://gerrit.mediatek.inc/c/openwrt/feeds/mtk_openwrt_feeds/+/6836557
diff --git a/autobuild_mac80211_release/target/linux/mediatek/patches-5.4/9997-add-wed-rx-support-for-mt7896.patch b/autobuild_mac80211_release/target/linux/mediatek/patches-5.4/9997-add-wed-rx-support-for-mt7896.patch
index b05f862..053a4da 100644
--- a/autobuild_mac80211_release/target/linux/mediatek/patches-5.4/9997-add-wed-rx-support-for-mt7896.patch
+++ b/autobuild_mac80211_release/target/linux/mediatek/patches-5.4/9997-add-wed-rx-support-for-mt7896.patch
@@ -8,7 +8,7 @@
  arch/arm64/boot/dts/mediatek/mt7986a.dtsi     |  42 +-
  arch/arm64/boot/dts/mediatek/mt7986b.dtsi     |  42 +-
  drivers/net/ethernet/mediatek/Makefile        |   2 +-
- drivers/net/ethernet/mediatek/mtk_wed.c       | 625 ++++++++++++++++--
+ drivers/net/ethernet/mediatek/mtk_wed.c       | 639 ++++++++++++++++--
  drivers/net/ethernet/mediatek/mtk_wed.h       |  51 ++
  drivers/net/ethernet/mediatek/mtk_wed_ccif.c  | 133 ++++
  drivers/net/ethernet/mediatek/mtk_wed_ccif.h  |  45 ++
@@ -18,7 +18,7 @@
  drivers/net/ethernet/mediatek/mtk_wed_regs.h  | 144 +++-
  drivers/net/ethernet/mediatek/mtk_wed_wo.c    | 564 ++++++++++++++++
  drivers/net/ethernet/mediatek/mtk_wed_wo.h    | 324 +++++++++
- include/linux/soc/mediatek/mtk_wed.h          | 101 ++-
+ include/linux/soc/mediatek/mtk_wed.h          | 126 +++-
  14 files changed, 2796 insertions(+), 75 deletions(-)
  create mode 100644 drivers/net/ethernet/mediatek/mtk_wed_ccif.c
  create mode 100644 drivers/net/ethernet/mediatek/mtk_wed_ccif.h
@@ -280,7 +280,7 @@
 +
 +	mtk_wed_reset(dev, MTK_WED_RESET_WED);
 +
-+	mtk_wed_mcu_send_msg(wo, MODULE_ID_WO, WED_WO_CHANGE_STATE,
++	mtk_wed_mcu_send_msg(wo, MODULE_ID_WO, MTK_WED_WO_CMD_CHANGE_STATE,
 +			     &state, sizeof(state), false);
 +
 +	do {
@@ -369,7 +369,7 @@
 +	dev->rx_buf_ring.desc = desc;
 +	dev->rx_buf_ring.desc_phys = desc_phys;
 +
-+	dev->wlan.init_rx_buf(dev, dev->wlan.rx_pkt);
++	dev->wlan.init_rx_buf(dev, dev->wlan.rx_npkt);
 +	return 0;
 +}
 +
@@ -588,7 +588,7 @@
  	wed_w32(dev, MTK_WED_WPDMA_INT_TRIGGER, 0);
  	wed_w32(dev, MTK_WED_WDMA_INT_TRIGGER, 0);
  	wdma_w32(dev, MTK_WDMA_INT_MASK, 0);
-@@ -417,8 +641,19 @@ mtk_wed_detach(struct mtk_wed_device *dev)
+@@ -417,10 +641,21 @@ mtk_wed_detach(struct mtk_wed_device *dev)
  
  	mtk_wed_reset(dev, MTK_WED_RESET_WED);
  
@@ -606,8 +606,20 @@
 +
 +	mtk_wdma_rx_reset(dev);
  
- 	if (dev->wlan.bus_type == MTK_BUS_TYPE_PCIE) {
+-	if (dev->wlan.bus_type == MTK_BUS_TYPE_PCIE) {
++	if (dev->wlan.bus_type == MTK_WED_BUS_PCIE) {
  		wlan_node = dev->wlan.pci_dev->dev.of_node;
+ 		if (of_dma_is_coherent(wlan_node))
+ 			regmap_update_bits(hw->hifsys, HIFSYS_DMA_AG_MAP,
+@@ -443,7 +678,7 @@ mtk_wed_bus_init(struct mtk_wed_device *dev)
+ {
+ #define PCIE_BASE_ADDR0 0x11280000
+ 
+-	if (dev->wlan.bus_type == MTK_BUS_TYPE_PCIE) {
++	if (dev->wlan.bus_type == MTK_WED_BUS_PCIE) {
+ 		struct device_node *node;
+ 		void __iomem * base_addr;
+ 		u32 value = 0;
 @@ -477,7 +712,6 @@ mtk_wed_bus_init(struct mtk_wed_device *dev)
  		value = wed_r32(dev, MTK_WED_PCIE_CFG_INTM);
  		value = wed_r32(dev, MTK_WED_PCIE_CFG_BASE);
@@ -616,6 +628,15 @@
  		wed_w32(dev, MTK_WED_PCIE_INT_TRIGGER, BIT(24));
  		wed_r32(dev, MTK_WED_PCIE_INT_TRIGGER);
  
+@@ -485,7 +719,7 @@ mtk_wed_bus_init(struct mtk_wed_device *dev)
+ 		value = wed_r32(dev, MTK_WED_PCIE_INT_CTRL);
+ 		wed_set(dev, MTK_WED_PCIE_INT_CTRL,
+ 			MTK_WED_PCIE_INT_CTRL_MSK_EN_POLA);
+-	} else if (dev->wlan.bus_type == MTK_BUS_TYPE_AXI) {
++	} else if (dev->wlan.bus_type == MTK_WED_BUS_AXI) {
+ 		wed_set(dev, MTK_WED_WPDMA_INT_CTRL,
+ 			MTK_WED_WPDMA_INT_CTRL_SIG_SRC |
+ 			FIELD_PREP(MTK_WED_WPDMA_INT_CTRL_SRC_SEL, 0));
 @@ -501,6 +735,9 @@ mtk_wed_set_wpdma(struct mtk_wed_device *dev)
  		wed_w32(dev, MTK_WED_WPDMA_CFG_INT_MASK,  dev->wlan.wpdma_mask);
  		wed_w32(dev, MTK_WED_WPDMA_CFG_TX,  dev->wlan.wpdma_tx);
@@ -636,12 +657,12 @@
 +mtk_wed_rx_bm_hw_init(struct mtk_wed_device *dev)
 +{
 +	wed_w32(dev, MTK_WED_RX_BM_RX_DMAD,
-+		FIELD_PREP(MTK_WED_RX_BM_RX_DMAD_SDL0,  dev->wlan.rx_pkt_size));
++		FIELD_PREP(MTK_WED_RX_BM_RX_DMAD_SDL0,  dev->wlan.rx_size));
 +
 +	wed_w32(dev, MTK_WED_RX_BM_BASE, dev->rx_buf_ring.desc_phys);
 +
 +	wed_w32(dev, MTK_WED_RX_BM_INIT_PTR, MTK_WED_RX_BM_INIT_SW_TAIL |
-+		FIELD_PREP(MTK_WED_RX_BM_SW_TAIL, dev->wlan.rx_pkt));
++		FIELD_PREP(MTK_WED_RX_BM_SW_TAIL, dev->wlan.rx_npkt));
 +
 +	wed_w32(dev, MTK_WED_RX_BM_DYN_ALLOC_TH,
 +		FIELD_PREP(MTK_WED_RX_BM_DYN_ALLOC_TH_H, 0xffff));
@@ -733,7 +754,7 @@
  static void
 -mtk_wed_ring_reset(struct mtk_wdma_desc *desc, int size, int scale)
 +mtk_wed_rx_hw_init(struct mtk_wed_device *dev)
-+{
+ {
 +	wed_w32(dev, MTK_WED_WPDMA_RX_D_RST_IDX,
 +		MTK_WED_WPDMA_RX_D_RST_CRX_IDX |
 +		MTK_WED_WPDMA_RX_D_RST_DRV_IDX);
@@ -760,7 +781,7 @@
 +
 +static void
 +mtk_wed_ring_reset(struct mtk_wdma_desc *desc, int size, int scale, bool tx)
- {
++{
 +	__le32 ctrl;
  	int i;
  
@@ -937,7 +958,7 @@
 +		.wed = 0,
 +	};
 +
-+	return mtk_wed_mcu_send_msg(wo, MODULE_ID_WO, WED_WO_CFG,
++	return mtk_wed_mcu_send_msg(wo, MODULE_ID_WO, MTK_WED_WO_CMD_WED_CFG,
 +				    &req, sizeof(req), true);
 +}
 +
@@ -1014,7 +1035,28 @@
  
  	mtk_wed_dma_enable(dev);
  	dev->running = true;
-@@ -847,9 +1336,17 @@ mtk_wed_attach(struct mtk_wed_device *dev)
+@@ -809,6 +1298,7 @@ mtk_wed_attach(struct mtk_wed_device *dev)
+ 	__releases(RCU)
+ {
+ 	struct mtk_wed_hw *hw;
++	struct device *device;
+ 	u16 ver;
+ 	int ret = 0;
+ 
+@@ -829,6 +1319,12 @@ mtk_wed_attach(struct mtk_wed_device *dev)
+ 		goto out;
+ 	}
+ 
++	device = dev->wlan.bus_type == MTK_WED_BUS_PCIE
++	? &dev->wlan.pci_dev->dev
++	: &dev->wlan.platform_dev->dev;
++	dev_info(device, "attaching wed device %d version %d\n",
++		 hw->index, hw->ver);
++
+ 	dev->hw = hw;
+ 	dev->dev = hw->dev;
+ 	dev->irq = hw->irq;
+@@ -847,9 +1343,17 @@ mtk_wed_attach(struct mtk_wed_device *dev)
  	dev->rev_id = ((dev->ver << 28) | ver << 16);
  
  	ret = mtk_wed_buffer_alloc(dev);
@@ -1035,7 +1077,7 @@
  	}
  
  	mtk_wed_hw_init_early(dev);
-@@ -857,7 +1354,12 @@ mtk_wed_attach(struct mtk_wed_device *dev)
+@@ -857,7 +1361,12 @@ mtk_wed_attach(struct mtk_wed_device *dev)
  	if (dev->ver == MTK_WED_V1)
  		regmap_update_bits(hw->hifsys, HIFSYS_DMA_AG_MAP,
  				   BIT(hw->index), 0);
@@ -1048,7 +1090,7 @@
  out:
  	mutex_unlock(&hw_lock);
  
-@@ -883,10 +1385,10 @@ mtk_wed_tx_ring_setup(struct mtk_wed_device *dev, int idx, void __iomem *regs)
+@@ -883,10 +1392,10 @@ mtk_wed_tx_ring_setup(struct mtk_wed_device *dev, int idx, void __iomem *regs)
  
  	BUG_ON(idx > ARRAY_SIZE(dev->tx_ring));
  
@@ -1061,7 +1103,7 @@
  		return -ENOMEM;
  
  	ring->reg_base = MTK_WED_RING_TX(idx);
-@@ -933,6 +1435,35 @@ mtk_wed_txfree_ring_setup(struct mtk_wed_device *dev, void __iomem *regs)
+@@ -933,6 +1442,35 @@ mtk_wed_txfree_ring_setup(struct mtk_wed_device *dev, void __iomem *regs)
  	return 0;
  }
  
@@ -1097,7 +1139,7 @@
  static u32
  mtk_wed_irq_get(struct mtk_wed_device *dev, u32 mask)
  {
-@@ -1020,6 +1551,8 @@ void mtk_wed_add_hw(struct device_node *np, struct mtk_eth *eth,
+@@ -1020,6 +1558,8 @@ void mtk_wed_add_hw(struct device_node *np, struct mtk_eth *eth,
  		.attach = mtk_wed_attach,
  		.tx_ring_setup = mtk_wed_tx_ring_setup,
  		.txfree_ring_setup = mtk_wed_txfree_ring_setup,
@@ -1106,7 +1148,7 @@
  		.start = mtk_wed_start,
  		.stop = mtk_wed_stop,
  		.reset_dma = mtk_wed_reset_dma,
-@@ -1028,6 +1561,7 @@ void mtk_wed_add_hw(struct device_node *np, struct mtk_eth *eth,
+@@ -1028,6 +1568,7 @@ void mtk_wed_add_hw(struct device_node *np, struct mtk_eth *eth,
  		.irq_get = mtk_wed_irq_get,
  		.irq_set_mask = mtk_wed_irq_set_mask,
  		.detach = mtk_wed_detach,
@@ -1114,7 +1156,15 @@
  	};
  	struct device_node *eth_np = eth->dev->of_node;
  	struct platform_device *pdev;
-@@ -1083,6 +1617,7 @@ void mtk_wed_add_hw(struct device_node *np, struct mtk_eth *eth,
+@@ -1067,6 +1608,7 @@ void mtk_wed_add_hw(struct device_node *np, struct mtk_eth *eth,
+ 	hw->wdma_phy = wdma_phy;
+ 	hw->index = index;
+ 	hw->irq = irq;
++	hw->ver = MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2) ? 2 : 1;
+ 
+ 	if (!MTK_HAS_CAPS(eth->soc->caps, MTK_NETSYS_V2)) {
+ 		hw->mirror = syscon_regmap_lookup_by_phandle(eth_np,
+@@ -1083,6 +1625,7 @@ void mtk_wed_add_hw(struct device_node *np, struct mtk_eth *eth,
  			regmap_write(hw->mirror, 0, 0);
  			regmap_write(hw->mirror, 4, 0);
  		}
@@ -1227,7 +1277,7 @@
  #endif
 diff --git a/drivers/net/ethernet/mediatek/mtk_wed_ccif.c b/drivers/net/ethernet/mediatek/mtk_wed_ccif.c
 new file mode 100644
-index 0000000..22ef337
+index 0000000..951278b
 --- /dev/null
 +++ b/drivers/net/ethernet/mediatek/mtk_wed_ccif.c
 @@ -0,0 +1,133 @@
@@ -1558,7 +1608,7 @@
  }
 diff --git a/drivers/net/ethernet/mediatek/mtk_wed_mcu.c b/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
 new file mode 100644
-index 0000000..723bdfd
+index 0000000..96e30a3
 --- /dev/null
 +++ b/drivers/net/ethernet/mediatek/mtk_wed_mcu.c
 @@ -0,0 +1,586 @@
@@ -1711,7 +1761,7 @@
 +	req.arg0 = (u32)exp->phys;
 +	req.arg1 = (u32)exp->log_size;
 +
-+	return mtk_wed_mcu_send_msg(wo, MODULE_ID_WO, WED_WO_EXCEPTION_INIT,
++	return mtk_wed_mcu_send_msg(wo, MODULE_ID_WO, MTK_WED_WO_CMD_EXCEPTION_INIT,
 +				    &req, sizeof(req), false);
 +
 +free:
@@ -1742,7 +1792,7 @@
 +	struct mtk_wed_device *wed = wo->hw->wed_dev;
 +	struct wed_cmd_hdr *hdr = (struct wed_cmd_hdr *)skb->data;
 +	struct wed_wo_log *record;
-+	struct wo_cmd_rxcnt_t *rxcnt;
++	struct mtk_wed_wo_rx_stats *rxcnt;
 +	char *msg = (char *)(skb->data + sizeof(struct wed_cmd_hdr));
 +	u16 msg_len = skb->len - sizeof(struct wed_cmd_hdr);
 +	u32 i, cnt = 0;
@@ -1770,11 +1820,11 @@
 +		break;
 +	case WO_EVT_RXCNT_INFO:
 +		cnt = *(u32 *)msg;
-+		rxcnt = (struct wo_cmd_rxcnt_t *)((u32 *)msg+1);
++		rxcnt = (struct mtk_wed_wo_rx_stats *)((u32 *)msg+1);
 +
 +		for (i = 0; i < cnt; i++)
-+			if (wed->wlan.update_wo_rxcnt)
-+				wed->wlan.update_wo_rxcnt(wed, &rxcnt[i]);
++			if (wed->wlan.update_wo_rx_stats)
++				wed->wlan.update_wo_rx_stats(wed, &rxcnt[i]);
 +		break;
 +	default:
 +		break;
@@ -1948,7 +1998,7 @@
 +{
 +	struct mtk_wed_device *wed = wo->hw->wed_dev;
 +	struct wed_cmd_hdr  *hdr;
-+	struct wo_cmd_rxcnt_t *rxcnt = NULL;
++	struct mtk_wed_wo_rx_stats *rxcnt = NULL;
 +	u32 i, cnt = 0;
 +
 +	if (!skb) {
@@ -1967,13 +2017,13 @@
 +	skb_pull(skb, sizeof(struct wed_cmd_hdr));
 +
 +	switch (cmd) {
-+	case WED_WO_RXCNT_INFO:
++	case MTK_WED_WO_CMD_RXCNT_INFO:
 +		cnt = *(u32 *)skb->data;
-+		rxcnt = (struct wo_cmd_rxcnt_t *)((u32 *)skb->data+1);
++		rxcnt = (struct mtk_wed_wo_rx_stats *)((u32 *)skb->data+1);
 +
 +		for (i = 0; i < cnt; i++)
-+			if (wed->wlan.update_wo_rxcnt)
-+				wed->wlan.update_wo_rxcnt(wed, &rxcnt[i]);
++			if (wed->wlan.update_wo_rx_stats)
++				wed->wlan.update_wo_rx_stats(wed, &rxcnt[i]);
 +		break;
 +	default:
 +		break;
@@ -2057,22 +2107,22 @@
 +	cmd = input[0];
 +	if (input_total == 1 && cmd) {
 +		if (strncmp(cmd, "bainfo", strlen(cmd)) == 0) {
-+			cmd_id = WED_WO_BA_INFO_DUMP;
++			cmd_id = MTK_WED_WO_CMD_BA_INFO_DUMP;
 +		} else if (strncmp(cmd, "bactrl", strlen(cmd)) == 0) {
-+			cmd_id = WED_WO_BA_CTRL_DUMP;
++			cmd_id = MTK_WED_WO_CMD_BA_CTRL_DUMP;
 +		} else if (strncmp(cmd, "fbcmdq", strlen(cmd)) == 0) {
-+			cmd_id = WED_WO_FBCMD_Q_DUMP;
++			cmd_id = MTK_WED_WO_CMD_FBCMD_Q_DUMP;
 +		} else if (strncmp(cmd, "logflush", strlen(cmd)) == 0) {
-+			cmd_id = WED_WO_LOG_FLUSH;
++			cmd_id = MTK_WED_WO_CMD_LOG_FLUSH;
 +		} else if (strncmp(cmd, "cpustat.dump", strlen(cmd)) == 0) {
-+			cmd_id = WED_WO_CPU_STATS_DUMP;
++			cmd_id = MTK_WED_WO_CMD_CPU_STATS_DUMP;
 +		} else if (strncmp(cmd, "state", strlen(cmd)) == 0) {
-+			cmd_id = WED_WO_RX_STAT;
++			cmd_id = MTK_WED_WO_CMD_WED_RX_STAT;
 +		} else if (strncmp(cmd, "prof_hit_dump", strlen(cmd)) == 0) {
 +			//wo_profiling_report();
 +			return count;
 +		} else if (strncmp(cmd, "rxcnt_info", strlen(cmd)) == 0) {
-+			cmd_id = WED_WO_RXCNT_INFO;
++			cmd_id = MTK_WED_WO_CMD_RXCNT_INFO;
 +			wait = true;
 +		} else {
 +			pr_info("(%s) unknown comand string(%s)!\n", __func__, cmd);
@@ -2088,23 +2138,23 @@
 +			}
 +		}
 +		if(strncmp(cmd, "devinfo", strlen(cmd)) == 0) {
-+			cmd_id = WED_WO_DEV_INFO_DUMP;
++			cmd_id = MTK_WED_WO_CMD_DEV_INFO_DUMP;
 +		} else if (strncmp(cmd, "bssinfo", strlen(cmd)) == 0) {
-+			cmd_id = WED_WO_BSS_INFO_DUMP;
++			cmd_id = MTK_WED_WO_CMD_BSS_INFO_DUMP;
 +		} else if (strncmp(cmd, "starec", strlen(cmd)) == 0) {
-+			cmd_id = WED_WO_STA_REC_DUMP;
++			cmd_id = MTK_WED_WO_CMD_STA_REC_DUMP;
 +		} else if (strncmp(cmd, "starec_ba", strlen(cmd)) == 0) {
-+			cmd_id = WED_WO_STA_BA_DUMP;
++			cmd_id = MTK_WED_WO_CMD_STA_BA_DUMP;
 +		} else if (strncmp(cmd, "logctrl", strlen(cmd)) == 0) {
-+			cmd_id = WED_WO_FW_LOG_CTRL;
++			cmd_id = MTK_WED_WO_CMD_FW_LOG_CTRL;
 +		} else if (strncmp(cmd, "cpustat.en", strlen(cmd)) == 0) {
-+			cmd_id = WED_WO_CPU_STATS_ENABLE;
++			cmd_id = MTK_WED_WO_CMD_CPU_STATS_ENABLE;
 +		} else if (strncmp(cmd, "prof_conf", strlen(cmd)) == 0) {
-+			cmd_id = WED_WO_PROF_CTRL;
++			cmd_id = MTK_WED_WO_CMD_PROF_CTRL;
 +		} else if (strncmp(cmd, "rxcnt_ctrl", strlen(cmd)) == 0) {
-+			cmd_id = WED_WO_RXCNT_CTRL;
++			cmd_id = MTK_WED_WO_CMD_RXCNT_CTRL;
 +		} else if (strncmp(cmd, "dbg_set", strlen(cmd)) == 0) {
-+			cmd_id = WED_WO_DBG_INFO;
++			cmd_id = MTK_WED_WO_CMD_DBG_INFO;
 +		}
 +	} else {
 +		dev_info(hw->dev, "usage: echo cmd='cmd_str' > wo_write\n");
@@ -2150,7 +2200,7 @@
 +
 diff --git a/drivers/net/ethernet/mediatek/mtk_wed_mcu.h b/drivers/net/ethernet/mediatek/mtk_wed_mcu.h
 new file mode 100644
-index 0000000..6a5ac76
+index 0000000..19e1199
 --- /dev/null
 +++ b/drivers/net/ethernet/mediatek/mtk_wed_mcu.h
 @@ -0,0 +1,96 @@
@@ -2507,7 +2557,7 @@
  #endif
 diff --git a/drivers/net/ethernet/mediatek/mtk_wed_wo.c b/drivers/net/ethernet/mediatek/mtk_wed_wo.c
 new file mode 100644
-index 0000000..8434272
+index 0000000..54b7787
 --- /dev/null
 +++ b/drivers/net/ethernet/mediatek/mtk_wed_wo.c
 @@ -0,0 +1,564 @@
@@ -3077,7 +3127,7 @@
 +}
 diff --git a/drivers/net/ethernet/mediatek/mtk_wed_wo.h b/drivers/net/ethernet/mediatek/mtk_wed_wo.h
 new file mode 100644
-index 0000000..5824f39
+index 0000000..548b38e
 --- /dev/null
 +++ b/drivers/net/ethernet/mediatek/mtk_wed_wo.h
 @@ -0,0 +1,324 @@
@@ -3406,47 +3456,64 @@
 +#endif
 +
 diff --git a/include/linux/soc/mediatek/mtk_wed.h b/include/linux/soc/mediatek/mtk_wed.h
-index e914cb4..cfa1120 100644
+index e914cb4..e8fca31 100644
 --- a/include/linux/soc/mediatek/mtk_wed.h
 +++ b/include/linux/soc/mediatek/mtk_wed.h
-@@ -7,6 +7,36 @@
+@@ -6,7 +6,39 @@
+ #include <linux/regmap.h>
  #include <linux/pci.h>
  
++#define WED_WO_STA_REC			0x6
++
  #define MTK_WED_TX_QUEUES		2
 +#define MTK_WED_RX_QUEUES		2
 +
-+enum wo_cmd_id {
-+	WED_WO_CFG = 0,
-+	WED_WO_RX_STAT,
-+	WED_WO_RRO_SER,
-+	WED_WO_DBG_INFO,
-+	WED_WO_DEV_INFO,
-+	WED_WO_BSS_INFO,
-+	WED_WO_STA_REC,
-+	WED_WO_DEV_INFO_DUMP,
-+	WED_WO_BSS_INFO_DUMP,
-+	WED_WO_STA_REC_DUMP,
-+	WED_WO_BA_INFO_DUMP,
-+	WED_WO_FBCMD_Q_DUMP,
-+	WED_WO_FW_LOG_CTRL,
-+	WED_WO_LOG_FLUSH,
-+	WED_WO_CHANGE_STATE,
-+	WED_WO_CPU_STATS_ENABLE,
-+	WED_WO_CPU_STATS_DUMP,
-+	WED_WO_EXCEPTION_INIT,
-+	WED_WO_PROF_CTRL,
-+	WED_WO_STA_BA_DUMP,
-+	WED_WO_BA_CTRL_DUMP,
-+	WED_WO_RXCNT_CTRL,
-+	WED_WO_RXCNT_INFO,
-+	WED_WO_SET_CAP,
-+	WED_WO_CCIF_RING_DUMP,
-+	WED_WO_WED_END
++enum mtk_wed_wo_cmd {
++	MTK_WED_WO_CMD_WED_CFG,
++	MTK_WED_WO_CMD_WED_RX_STAT,
++	MTK_WED_WO_CMD_RRO_SER,
++	MTK_WED_WO_CMD_DBG_INFO,
++	MTK_WED_WO_CMD_DEV_INFO,
++	MTK_WED_WO_CMD_BSS_INFO,
++	MTK_WED_WO_CMD_STA_REC,
++	MTK_WED_WO_CMD_DEV_INFO_DUMP,
++	MTK_WED_WO_CMD_BSS_INFO_DUMP,
++	MTK_WED_WO_CMD_STA_REC_DUMP,
++	MTK_WED_WO_CMD_BA_INFO_DUMP,
++	MTK_WED_WO_CMD_FBCMD_Q_DUMP,
++	MTK_WED_WO_CMD_FW_LOG_CTRL,
++	MTK_WED_WO_CMD_LOG_FLUSH,
++	MTK_WED_WO_CMD_CHANGE_STATE,
++	MTK_WED_WO_CMD_CPU_STATS_ENABLE,
++	MTK_WED_WO_CMD_CPU_STATS_DUMP,
++	MTK_WED_WO_CMD_EXCEPTION_INIT,
++	MTK_WED_WO_CMD_PROF_CTRL,
++	MTK_WED_WO_CMD_STA_BA_DUMP,
++	MTK_WED_WO_CMD_BA_CTRL_DUMP,
++	MTK_WED_WO_CMD_RXCNT_CTRL,
++	MTK_WED_WO_CMD_RXCNT_INFO,
++	MTK_WED_WO_CMD_SET_CAP,
++	MTK_WED_WO_CMD_CCIF_RING_DUMP,
++	MTK_WED_WO_CMD_WED_END
 +};
  
  enum {
  	MTK_NO_WED,
-@@ -33,6 +63,33 @@ struct mtk_wed_ring {
+@@ -15,10 +47,9 @@ enum {
+ 	MTK_WED_VMAX
+ };
+ 
+-enum {
+-	MTK_BUS_TYPE_PCIE,
+-	MTK_BUS_TYPE_AXI,
+-	MTK_BUS_TYPE_MAX
++enum mtk_wed_bus_tye {
++	MTK_WED_BUS_PCIE,
++	MTK_WED_BUS_AXI,
+ };
+ 
+ struct mtk_wed_hw;
+@@ -33,6 +64,33 @@ struct mtk_wed_ring {
  	void __iomem *wpdma;
  };
  
@@ -3468,19 +3535,19 @@
 +	dma_addr_t desc_phys;
 +};
 +
-+struct wo_cmd_rxcnt_t {
-+	u16 wlan_idx;
-+	u16 tid;
-+	u32 rx_pkt_cnt;
-+	u32 rx_byte_cnt;
-+	u32 rx_err_cnt;
-+	u32 rx_drop_cnt;
++struct mtk_wed_wo_rx_stats {
++	__le16 wlan_idx;
++	__le16 tid;
++	__le32 rx_pkt_cnt;
++	__le32 rx_byte_cnt;
++	__le32 rx_err_cnt;
++	__le32 rx_drop_cnt;
 +};
 +
  struct mtk_wed_device {
  #ifdef CONFIG_NET_MEDIATEK_SOC_WED
  	const struct mtk_wed_ops *ops;
-@@ -47,37 +104,56 @@ struct mtk_wed_device {
+@@ -47,37 +105,64 @@ struct mtk_wed_device {
  	struct mtk_wed_ring tx_ring[MTK_WED_TX_QUEUES];
  	struct mtk_wed_ring txfree_ring;
  	struct mtk_wed_ring tx_wdma[MTK_WED_TX_QUEUES];
@@ -3488,15 +3555,18 @@
 +	struct mtk_wed_ring rx_wdma[MTK_WED_RX_QUEUES];
 +
 +	struct dma_buf buf_ring;
-+	struct dma_entry rx_buf_ring;
-+	struct page_frag_cache rx_page;
  
  	struct {
--		int size;
+ 		int size;
 -		void **pages;
 -		struct mtk_wdma_desc *desc;
--		dma_addr_t desc_phys;
++		struct page_frag_cache rx_page;
++		struct mtk_rxbm_desc *desc;
+ 		dma_addr_t desc_phys;
 -	} buf_ring;
++	} rx_buf_ring;
++
++	struct {
 +		struct mtk_wed_ring rro_ring;
 +		void __iomem *rro_desc;
 +		dma_addr_t miod_desc_phys;
@@ -3506,7 +3576,11 @@
  
  	/* filled by driver: */
  	struct {
- 		struct pci_dev *pci_dev;
+-		struct pci_dev *pci_dev;
++		union {
++			struct platform_device *platform_dev;
++			struct pci_dev *pci_dev;
++		};
  		void __iomem *base;
  		u32 bus_type;
 +		u32 phy_base;
@@ -3526,8 +3600,8 @@
  		u16 token_start;
  		unsigned int nbuf;
 +		unsigned int rx_nbuf;
-+		unsigned int rx_pkt;
-+		unsigned int rx_pkt_size;
++		unsigned int rx_npkt;
++		unsigned int rx_size;
  
  		bool wcid_512;
  
@@ -3537,12 +3611,12 @@
 +		u32 (*init_rx_buf)(struct mtk_wed_device *wed,
 +				   int pkt_num);
 +		void (*release_rx_buf)(struct mtk_wed_device *wed);
-+		void (*update_wo_rxcnt)(struct  mtk_wed_device *wed,
-+				struct wo_cmd_rxcnt_t *rxcnt);
++		void (*update_wo_rx_stats)(struct mtk_wed_device *wed,
++					   struct mtk_wed_wo_rx_stats *stats);
  	} wlan;
  #endif
  };
-@@ -88,6 +164,10 @@ struct mtk_wed_ops {
+@@ -88,6 +173,10 @@ struct mtk_wed_ops {
  			     void __iomem *regs);
  	int (*txfree_ring_setup)(struct mtk_wed_device *dev,
  				 void __iomem *regs);
@@ -3553,7 +3627,7 @@
  	void (*detach)(struct mtk_wed_device *dev);
  
  	void (*stop)(struct mtk_wed_device *dev);
-@@ -99,6 +179,8 @@ struct mtk_wed_ops {
+@@ -99,6 +188,8 @@ struct mtk_wed_ops {
  
  	u32 (*irq_get)(struct mtk_wed_device *dev, u32 mask);
  	void (*irq_set_mask)(struct mtk_wed_device *dev, u32 mask);
@@ -3562,7 +3636,24 @@
  };
  
  extern const struct mtk_wed_ops __rcu *mtk_soc_wed_ops;
-@@ -131,6 +213,10 @@ mtk_wed_device_attach(struct mtk_wed_device *dev)
+@@ -123,6 +214,16 @@ mtk_wed_device_attach(struct mtk_wed_device *dev)
+ 	return ret;
+ }
+ 
++static inline bool
++mtk_wed_get_rx_capa(struct mtk_wed_device *dev)
++{
++#ifdef CONFIG_NET_MEDIATEK_SOC_WED
++	return dev->ver != 1;
++#else
++	return false;
++#endif
++}
++
+ #ifdef CONFIG_NET_MEDIATEK_SOC_WED
+ #define mtk_wed_device_active(_dev) !!(_dev)->ops
+ #define mtk_wed_device_detach(_dev) (_dev)->ops->detach(_dev)
+@@ -131,6 +232,10 @@ mtk_wed_device_attach(struct mtk_wed_device *dev)
  	(_dev)->ops->tx_ring_setup(_dev, _ring, _regs)
  #define mtk_wed_device_txfree_ring_setup(_dev, _regs) \
  	(_dev)->ops->txfree_ring_setup(_dev, _regs)
@@ -3573,7 +3664,7 @@
  #define mtk_wed_device_reg_read(_dev, _reg) \
  	(_dev)->ops->reg_read(_dev, _reg)
  #define mtk_wed_device_reg_write(_dev, _reg, _val) \
-@@ -139,6 +225,8 @@ mtk_wed_device_attach(struct mtk_wed_device *dev)
+@@ -139,6 +244,8 @@ mtk_wed_device_attach(struct mtk_wed_device *dev)
  	(_dev)->ops->irq_get(_dev, _mask)
  #define mtk_wed_device_irq_set_mask(_dev, _mask) \
  	(_dev)->ops->irq_set_mask(_dev, _mask)
@@ -3582,7 +3673,7 @@
  #else
  static inline bool mtk_wed_device_active(struct mtk_wed_device *dev)
  {
-@@ -148,10 +236,13 @@ static inline bool mtk_wed_device_active(struct mtk_wed_device *dev)
+@@ -148,10 +255,13 @@ static inline bool mtk_wed_device_active(struct mtk_wed_device *dev)
  #define mtk_wed_device_start(_dev, _mask) do {} while (0)
  #define mtk_wed_device_tx_ring_setup(_dev, _ring, _regs) -ENODEV
  #define mtk_wed_device_txfree_ring_setup(_dev, _ring, _regs) -ENODEV
diff --git a/autobuild_mac80211_release/target/linux/mediatek/patches-5.4/9999-add-wed-ser-support.patch b/autobuild_mac80211_release/target/linux/mediatek/patches-5.4/9999-add-wed-ser-support.patch
index d97d4c1..df34806 100755
--- a/autobuild_mac80211_release/target/linux/mediatek/patches-5.4/9999-add-wed-ser-support.patch
+++ b/autobuild_mac80211_release/target/linux/mediatek/patches-5.4/9999-add-wed-ser-support.patch
@@ -201,7 +201,7 @@
  
 -	mtk_wdma_rx_reset(dev);
 -
- 	if (dev->wlan.bus_type == MTK_BUS_TYPE_PCIE) {
+ 	if (dev->wlan.bus_type == MTK_WED_BUS_PCIE) {
  		wlan_node = dev->wlan.pci_dev->dev.of_node;
  		if (of_dma_is_coherent(wlan_node))
 @@ -748,7 +754,7 @@ mtk_wed_hw_init_early(struct mtk_wed_device *dev)
@@ -268,7 +268,7 @@
 +	bool busy = false;
 +	int i;
 +
-+	mtk_wed_mcu_send_msg(wo, MODULE_ID_WO, WED_WO_CHANGE_STATE,
++	mtk_wed_mcu_send_msg(wo, MODULE_ID_WO, MTK_WED_WO_CMD_CHANGE_STATE,
 +			     &state, sizeof(state), true);
 +
 +	wed_clr(dev, MTK_WED_WPDMA_RX_D_GLO_CFG, MTK_WED_WPDMA_RX_D_RX_DRV_EN);
@@ -345,7 +345,7 @@
 +
 +	/* wo change to enable state */
 +	state = WO_STATE_ENABLE;
-+	mtk_wed_mcu_send_msg(wo, MODULE_ID_WO, WED_WO_CHANGE_STATE,
++	mtk_wed_mcu_send_msg(wo, MODULE_ID_WO, MTK_WED_WO_CMD_CHANGE_STATE,
 +			     &state, sizeof(state), true);
 +
 +	/* wed_rx_ring_reset */
@@ -702,12 +702,10 @@
 index 9a9cc1b..31f4a26 100644
 --- a/include/linux/soc/mediatek/mtk_wed.h
 +++ b/include/linux/soc/mediatek/mtk_wed.h
-@@ -114,25 +114,29 @@ struct mtk_wed_device {
- 		u32 (*init_rx_buf)(struct mtk_wed_device *wed,
- 				   int pkt_num);
+@@ -161,23 +161,27 @@ struct mtk_wed_device {
  		void (*release_rx_buf)(struct mtk_wed_device *wed);
- 		void (*update_wo_rxcnt)(struct  mtk_wed_device *wed,
- 				struct wo_cmd_rxcnt_t *rxcnt);
+ 		void (*update_wo_rx_stats)(struct mtk_wed_device *wed,
+ 					   struct mtk_wed_wo_rx_stats *stats);
 +		void (*ser_trigger)(struct mtk_wed_device *wed);
  	} wlan;
 +	struct completion fe_reset_done;
@@ -735,7 +733,7 @@
  	void (*start)(struct mtk_wed_device *dev, u32 irq_mask);
  	void (*reset_dma)(struct mtk_wed_device *dev);
  
-@@ -169,12 +173,13 @@ mtk_wed_device_attach(struct mtk_wed_device *dev)
+@@ -226,12 +230,13 @@ mtk_wed_get_rx_capa(struct mtk_wed_device *dev)
  #define mtk_wed_device_active(_dev) !!(_dev)->ops
  #define mtk_wed_device_detach(_dev) (_dev)->ops->detach(_dev)
  #define mtk_wed_device_start(_dev, _mask) (_dev)->ops->start(_dev, _mask)
@@ -753,7 +751,7 @@
  #define mtk_wed_device_update_msg(_dev, _id, _msg, _len) \
  	(_dev)->ops->msg_update(_dev, _id, _msg, _len)
  #define mtk_wed_device_reg_read(_dev, _reg) \
-@@ -185,6 +190,8 @@ mtk_wed_device_attach(struct mtk_wed_device *dev)
+@@ -242,6 +247,8 @@ mtk_wed_get_rx_capa(struct mtk_wed_device *dev)
  	(_dev)->ops->irq_get(_dev, _mask)
  #define mtk_wed_device_irq_set_mask(_dev, _mask) \
  	(_dev)->ops->irq_set_mask(_dev, _mask)
@@ -762,7 +760,7 @@
  #define mtk_wed_device_ppe_check(_dev, _skb, _reason, _hash) \
  	(_dev)->ops->ppe_check(_dev, _skb, _reason, _hash)
  #else
-@@ -194,14 +201,15 @@ static inline bool mtk_wed_device_active(struct mtk_wed_device *dev)
+@@ -251,14 +258,15 @@ static inline bool mtk_wed_device_active(struct mtk_wed_device *dev)
  }
  #define mtk_wed_device_detach(_dev) do {} while (0)
  #define mtk_wed_device_start(_dev, _mask) do {} while (0)