[][MAC80211][WED][Fix reinsert wifi module cause memory leak issue]

[Description]
Fix reinsert wifi module cause memory leak issue
1. free wed rx rings when rmmod wifi module

[Release-log]

Change-Id: I9af5cc8864d177222023aa0d3cd72224316d2506
Reviewed-on: https://gerrit.mediatek.inc/c/openwrt/feeds/mtk_openwrt_feeds/+/8039889
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/target/linux/mediatek/patches-5.4/999-3019-mtk-wed-add-wed3-support.patch b/autobuild_mac80211_release/mt7988_mt7996_mac80211/target/linux/mediatek/patches-5.4/999-3019-mtk-wed-add-wed3-support.patch
index ae2aa14..bd65fea 100644
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/target/linux/mediatek/patches-5.4/999-3019-mtk-wed-add-wed3-support.patch
+++ b/autobuild_mac80211_release/mt7988_mt7996_mac80211/target/linux/mediatek/patches-5.4/999-3019-mtk-wed-add-wed3-support.patch
@@ -1,7 +1,7 @@
-From d7b7f03e5ab30b0420d0c97d6112dc3fa6e64d71 Mon Sep 17 00:00:00 2001
+From b54ca484993804cec5941bd12c6cafc9ce51e4dc Mon Sep 17 00:00:00 2001
 From: Sujuan Chen <sujuan.chen@mediatek.com>
 Date: Mon, 18 Sep 2023 13:21:15 +0800
-Subject: [PATCH 20/22] mtk:wed:add wed3 support
+Subject: [PATCH] mtk:wed:add wed3 support
 
 ---
  arch/arm64/boot/dts/mediatek/mt7988.dtsi      |  152 ++-
@@ -12,15 +12,15 @@
  drivers/net/ethernet/mediatek/mtk_ppe.c       |   17 +-
  drivers/net/ethernet/mediatek/mtk_ppe.h       |    2 +-
  .../net/ethernet/mediatek/mtk_ppe_offload.c   |   13 +-
- drivers/net/ethernet/mediatek/mtk_wed.c       | 1165 +++++++++++++----
+ drivers/net/ethernet/mediatek/mtk_wed.c       | 1178 +++++++++++++----
  drivers/net/ethernet/mediatek/mtk_wed.h       |   25 +-
- .../net/ethernet/mediatek/mtk_wed_debugfs.c   |  584 ++++++++-
+ .../net/ethernet/mediatek/mtk_wed_debugfs.c   |  584 +++++++-
  drivers/net/ethernet/mediatek/mtk_wed_mcu.c   |   13 +-
  drivers/net/ethernet/mediatek/mtk_wed_mcu.h   |    5 +-
  drivers/net/ethernet/mediatek/mtk_wed_regs.h  |  338 ++++-
  include/linux/netdevice.h                     |    7 +
  include/linux/soc/mediatek/mtk_wed.h          |   83 +-
- 16 files changed, 2056 insertions(+), 388 deletions(-)
+ 16 files changed, 2069 insertions(+), 388 deletions(-)
  mode change 100755 => 100644 drivers/net/ethernet/mediatek/mtk_ppe.c
 
 diff --git a/arch/arm64/boot/dts/mediatek/mt7988.dtsi b/arch/arm64/boot/dts/mediatek/mt7988.dtsi
@@ -430,7 +430,7 @@
  }
  
 diff --git a/drivers/net/ethernet/mediatek/mtk_wed.c b/drivers/net/ethernet/mediatek/mtk_wed.c
-index 3e760f7..9047cb0 100644
+index 3e760f7..7b2e199 100644
 --- a/drivers/net/ethernet/mediatek/mtk_wed.c
 +++ b/drivers/net/ethernet/mediatek/mtk_wed.c
 @@ -28,7 +28,7 @@ struct wo_cmd_ring {
@@ -838,7 +838,7 @@
  static void
  mtk_wed_free_ring(struct mtk_wed_device *dev, struct mtk_wed_ring *ring, int scale)
  {
-@@ -416,19 +618,25 @@ mtk_wed_free_ring(struct mtk_wed_device *dev, struct mtk_wed_ring *ring, int sca
+@@ -416,19 +618,35 @@ mtk_wed_free_ring(struct mtk_wed_device *dev, struct mtk_wed_ring *ring, int sca
  static void
  mtk_wed_free_tx_rings(struct mtk_wed_device *dev)
  {
@@ -847,12 +847,12 @@
  
  	for (i = 0; i < ARRAY_SIZE(dev->tx_ring); i++)
 -		mtk_wed_free_ring(dev, &dev->tx_ring[i], 1);
-+		if (!(dev->rx_ring[i].flags & MTK_WED_RING_CONFIGURED))
++		if ((dev->tx_ring[i].flags & MTK_WED_RING_CONFIGURED))
 +			mtk_wed_free_ring(dev, &dev->tx_ring[i], 1);
 +
  	for (i = 0; i < ARRAY_SIZE(dev->tx_wdma); i++)
 -		mtk_wed_free_ring(dev, &dev->tx_wdma[i], dev->ver);
-+		if ((dev->rx_ring[i].flags & MTK_WED_RING_CONFIGURED))
++		if ((dev->tx_wdma[i].flags & MTK_WED_RING_CONFIGURED))
 +			mtk_wed_free_ring(dev, &dev->tx_wdma[i], scale);
  }
  
@@ -860,6 +860,16 @@
  mtk_wed_free_rx_rings(struct mtk_wed_device *dev)
  {
 -	mtk_wed_free_rx_bm(dev);
++	int i, scale = dev->hw->version > 1 ? 2 : 1;
++
++	for (i = 0; i < ARRAY_SIZE(dev->rx_ring); i++)
++		if ((dev->rx_ring[i].flags & MTK_WED_RING_CONFIGURED))
++			mtk_wed_free_ring(dev, &dev->rx_ring[i], 1);
++
++	for (i = 0; i < ARRAY_SIZE(dev->rx_wdma); i++)
++		if ((dev->rx_wdma[i].flags & MTK_WED_RING_CONFIGURED))
++			mtk_wed_free_ring(dev, &dev->rx_wdma[i], scale);
++
 +	mtk_wed_free_rx_buffer(dev);
  	mtk_wed_free_ring(dev, &dev->rro.rro_ring, 1);
 +
@@ -868,7 +878,7 @@
  }
  
  static void
-@@ -437,7 +645,7 @@ mtk_wed_set_int(struct mtk_wed_device *dev, u32 irq_mask)
+@@ -437,7 +655,7 @@ mtk_wed_set_int(struct mtk_wed_device *dev, u32 irq_mask)
  	u32 wdma_mask;
  
  	wdma_mask = FIELD_PREP(MTK_WDMA_INT_MASK_RX_DONE, GENMASK(1, 0));
@@ -877,7 +887,7 @@
  		wdma_mask |= FIELD_PREP(MTK_WDMA_INT_MASK_TX_DONE,
  					GENMASK(1, 0));
  	/* wed control cr set */
-@@ -447,7 +655,7 @@ mtk_wed_set_int(struct mtk_wed_device *dev, u32 irq_mask)
+@@ -447,7 +665,7 @@ mtk_wed_set_int(struct mtk_wed_device *dev, u32 irq_mask)
  		MTK_WED_CTRL_WED_TX_BM_EN |
  		MTK_WED_CTRL_WED_TX_FREE_AGENT_EN);
  
@@ -886,7 +896,7 @@
  		wed_w32(dev, MTK_WED_PCIE_INT_TRIGGER,
  			MTK_WED_PCIE_INT_TRIGGER_STATUS);
  
-@@ -458,6 +666,8 @@ mtk_wed_set_int(struct mtk_wed_device *dev, u32 irq_mask)
+@@ -458,6 +676,8 @@ mtk_wed_set_int(struct mtk_wed_device *dev, u32 irq_mask)
  		wed_set(dev, MTK_WED_WPDMA_INT_CTRL,
  			MTK_WED_WPDMA_INT_CTRL_SUBRT_ADV);
  	} else {
@@ -895,7 +905,7 @@
  
  		wed_w32(dev, MTK_WED_WPDMA_INT_CTRL_TX,
  			MTK_WED_WPDMA_INT_CTRL_TX0_DONE_EN |
-@@ -475,18 +685,20 @@ mtk_wed_set_int(struct mtk_wed_device *dev, u32 irq_mask)
+@@ -475,18 +695,20 @@ mtk_wed_set_int(struct mtk_wed_device *dev, u32 irq_mask)
  			FIELD_PREP(MTK_WED_WPDMA_INT_CTRL_TX_FREE_DONE_TRIG,
  				    dev->wlan.txfree_tbit));
  
@@ -926,7 +936,7 @@
  		wed_clr(dev, MTK_WED_WDMA_INT_CTRL, wdma_mask);
  	} else {
  		wed_w32(dev, MTK_WED_WDMA_INT_CLR, wdma_mask);
-@@ -506,6 +718,21 @@ mtk_wed_set_ext_int(struct mtk_wed_device *dev, bool en)
+@@ -506,6 +728,21 @@ mtk_wed_set_ext_int(struct mtk_wed_device *dev, bool en)
  {
  	u32 mask = MTK_WED_EXT_INT_STATUS_ERROR_MASK;
  
@@ -948,7 +958,7 @@
  	if (!dev->hw->num_flows)
  		mask &= ~MTK_WED_EXT_INT_STATUS_TKID_WO_PYLD;
  
-@@ -514,31 +741,86 @@ mtk_wed_set_ext_int(struct mtk_wed_device *dev, bool en)
+@@ -514,31 +751,86 @@ mtk_wed_set_ext_int(struct mtk_wed_device *dev, bool en)
  }
  
  static void
@@ -1017,10 +1027,10 @@
 -#define MTK_WFMDA_RX_DMA_EN 	BIT(2)
 +	if (!mtk_wed_get_rx_capa(dev))
 +		return 0;
-+
+ 
 +	wed_set(dev, MTK_WED_RRO_PG_BM_RX_DMAM,
 +		FIELD_PREP(MTK_WED_RRO_PG_BM_RX_SDL0, 128));
- 
++
 +	wed_w32(dev, MTK_WED_RRO_PG_BM_BASE,
 +		dev->rx_page_buf_ring.desc_phys);
 +
@@ -1051,7 +1061,7 @@
  		if (cur_idx == MTK_WED_RX_RING_SIZE - 1)
  			break;
  
-@@ -546,70 +828,133 @@ mtk_wed_check_wfdma_rx_fill(struct mtk_wed_device *dev, int idx)
+@@ -546,70 +838,133 @@ mtk_wed_check_wfdma_rx_fill(struct mtk_wed_device *dev, int idx)
  		timeout--;
  	} while (timeout > 0);
  
@@ -1208,7 +1218,7 @@
  	}
  }
  
-@@ -644,15 +989,20 @@ mtk_wed_dma_disable(struct mtk_wed_device *dev)
+@@ -644,15 +999,20 @@ mtk_wed_dma_disable(struct mtk_wed_device *dev)
  			MTK_WED_WPDMA_RX_D_RX_DRV_EN);
  		wed_clr(dev, MTK_WED_WDMA_GLO_CFG,
  			MTK_WED_WDMA_GLO_CFG_TX_DDONE_CHK);
@@ -1232,7 +1242,7 @@
  		wed_w32(dev, MTK_WED_EXT_INT_MASK1, 0);
  		wed_w32(dev, MTK_WED_EXT_INT_MASK2, 0);
  	}
-@@ -677,13 +1027,21 @@ mtk_wed_deinit(struct mtk_wed_device *dev)
+@@ -677,13 +1037,21 @@ mtk_wed_deinit(struct mtk_wed_device *dev)
  		MTK_WED_CTRL_WED_TX_BM_EN |
  		MTK_WED_CTRL_WED_TX_FREE_AGENT_EN);
  
@@ -1255,7 +1265,7 @@
  }
  
  static void
-@@ -702,9 +1060,9 @@ mtk_wed_detach(struct mtk_wed_device *dev)
+@@ -702,9 +1070,9 @@ mtk_wed_detach(struct mtk_wed_device *dev)
  
  	mtk_wdma_tx_reset(dev);
  
@@ -1267,7 +1277,7 @@
  		mtk_wed_wo_reset(dev);
  		mtk_wed_free_rx_rings(dev);
  		mtk_wed_wo_exit(hw);
-@@ -731,24 +1089,29 @@ mtk_wed_detach(struct mtk_wed_device *dev)
+@@ -731,24 +1099,29 @@ mtk_wed_detach(struct mtk_wed_device *dev)
  static void
  mtk_wed_bus_init(struct mtk_wed_device *dev)
  {
@@ -1311,7 +1321,7 @@
  
  		wed_w32(dev, MTK_WED_PCIE_INT_CTRL,
  			FIELD_PREP(MTK_WED_PCIE_INT_CTRL_POLL_EN, 2));
-@@ -756,45 +1119,53 @@ mtk_wed_bus_init(struct mtk_wed_device *dev)
+@@ -756,45 +1129,53 @@ mtk_wed_bus_init(struct mtk_wed_device *dev)
  		/* pcie interrupt control: pola/source selection */
  		wed_set(dev, MTK_WED_PCIE_INT_CTRL,
  			MTK_WED_PCIE_INT_CTRL_MSK_EN_POLA |
@@ -1389,7 +1399,7 @@
  	}
  }
  
-@@ -806,21 +1177,25 @@ mtk_wed_hw_init_early(struct mtk_wed_device *dev)
+@@ -806,21 +1187,25 @@ mtk_wed_hw_init_early(struct mtk_wed_device *dev)
  	mtk_wed_deinit(dev);
  	mtk_wed_reset(dev, MTK_WED_RESET_WED);
  
@@ -1425,7 +1435,7 @@
  		offset = dev->hw->index ? 0x04000400 : 0;
  		wed_w32(dev, MTK_WED_WDMA_OFFSET0, 0x2a042a20 + offset);
  		wed_w32(dev, MTK_WED_WDMA_OFFSET1, 0x29002800 + offset);
-@@ -907,11 +1282,16 @@ mtk_wed_route_qm_hw_init(struct mtk_wed_device *dev)
+@@ -907,11 +1292,16 @@ mtk_wed_route_qm_hw_init(struct mtk_wed_device *dev)
  	} while (1);
  
  	/* configure RX_ROUTE_QM */
@@ -1447,7 +1457,7 @@
  
  	/* enable RX_ROUTE_QM */
  	wed_set(dev, MTK_WED_CTRL, MTK_WED_CTRL_RX_ROUTE_QM_EN);
-@@ -920,23 +1300,45 @@ mtk_wed_route_qm_hw_init(struct mtk_wed_device *dev)
+@@ -920,23 +1310,45 @@ mtk_wed_route_qm_hw_init(struct mtk_wed_device *dev)
  static void
  mtk_wed_tx_hw_init(struct mtk_wed_device *dev)
  {
@@ -1503,7 +1513,7 @@
  
  	wed_w32(dev, MTK_WED_TX_BM_TKID,
  		FIELD_PREP(MTK_WED_TX_BM_TKID_START,
-@@ -946,25 +1348,44 @@ mtk_wed_tx_hw_init(struct mtk_wed_device *dev)
+@@ -946,25 +1358,44 @@ mtk_wed_tx_hw_init(struct mtk_wed_device *dev)
  
  	wed_w32(dev, MTK_WED_TX_BM_BUF_LEN, MTK_WED_PKT_SIZE);
  
@@ -1559,7 +1569,7 @@
  		wed_clr(dev, MTK_WED_TX_TKID_CTRL, MTK_WED_TX_TKID_CTRL_PAUSE);
  }
  
-@@ -977,7 +1398,26 @@ mtk_wed_rx_hw_init(struct mtk_wed_device *dev)
+@@ -977,7 +1408,26 @@ mtk_wed_rx_hw_init(struct mtk_wed_device *dev)
  
  	wed_w32(dev, MTK_WED_WPDMA_RX_D_RST_IDX, 0);
  
@@ -1586,7 +1596,7 @@
  	mtk_wed_rro_hw_init(dev);
  	mtk_wed_route_qm_hw_init(dev);
  }
-@@ -991,7 +1431,7 @@ mtk_wed_hw_init(struct mtk_wed_device *dev)
+@@ -991,7 +1441,7 @@ mtk_wed_hw_init(struct mtk_wed_device *dev)
  	dev->init_done = true;
  	mtk_wed_set_ext_int(dev, false);
  	mtk_wed_tx_hw_init(dev);
@@ -1595,7 +1605,7 @@
  		mtk_wed_rx_hw_init(dev);
  }
  
-@@ -1015,26 +1455,6 @@ mtk_wed_ring_reset(struct mtk_wdma_desc *desc, int size, int scale, bool tx)
+@@ -1015,26 +1465,6 @@ mtk_wed_ring_reset(struct mtk_wdma_desc *desc, int size, int scale, bool tx)
  	}
  }
  
@@ -1622,7 +1632,7 @@
  static void
  mtk_wed_rx_reset(struct mtk_wed_device *dev)
  {
-@@ -1133,7 +1553,7 @@ mtk_wed_rx_reset(struct mtk_wed_device *dev)
+@@ -1133,7 +1563,7 @@ mtk_wed_rx_reset(struct mtk_wed_device *dev)
  		mtk_wed_ring_reset(desc, MTK_WED_RX_RING_SIZE, 1, false);
  	}
  
@@ -1631,7 +1641,7 @@
  }
  
  
-@@ -1271,12 +1691,15 @@ mtk_wed_wdma_rx_ring_setup(struct mtk_wed_device *dev,
+@@ -1271,12 +1701,15 @@ mtk_wed_wdma_rx_ring_setup(struct mtk_wed_device *dev,
  		int idx, int size, bool reset)
  {
  	struct mtk_wed_ring *wdma = &dev->tx_wdma[idx];
@@ -1648,7 +1658,7 @@
  	wdma_w32(dev, MTK_WDMA_RING_RX(idx) + MTK_WED_RING_OFS_BASE,
  		 wdma->desc_phys);
  	wdma_w32(dev, MTK_WDMA_RING_RX(idx) + MTK_WED_RING_OFS_COUNT,
-@@ -1296,12 +1719,31 @@ mtk_wed_wdma_tx_ring_setup(struct mtk_wed_device *dev,
+@@ -1296,12 +1729,33 @@ mtk_wed_wdma_tx_ring_setup(struct mtk_wed_device *dev,
  	int idx, int size, bool reset)
  {
  	struct mtk_wed_ring *wdma = &dev->rx_wdma[idx];
@@ -1678,10 +1688,12 @@
 +		}
 +	}
 +
++	wdma->flags |= MTK_WED_RING_CONFIGURED;
++
  	wdma_w32(dev, MTK_WDMA_RING_TX(idx) + MTK_WED_RING_OFS_BASE,
  		 wdma->desc_phys);
  	wdma_w32(dev, MTK_WDMA_RING_TX(idx) + MTK_WED_RING_OFS_COUNT,
-@@ -1312,7 +1754,7 @@ mtk_wed_wdma_tx_ring_setup(struct mtk_wed_device *dev,
+@@ -1312,7 +1766,7 @@ mtk_wed_wdma_tx_ring_setup(struct mtk_wed_device *dev,
  		 MTK_WDMA_RING_TX(idx) + MTK_WED_RING_OFS_DMA_IDX, 0);
  	if (reset)
  		mtk_wed_ring_reset(wdma->desc, MTK_WED_WDMA_RING_SIZE,
@@ -1690,7 +1702,7 @@
  	if (idx == 0)  {
  		wed_w32(dev, MTK_WED_WDMA_RING_TX
  			+ MTK_WED_RING_OFS_BASE, wdma->desc_phys);
-@@ -1395,7 +1837,7 @@ mtk_wed_send_msg(struct mtk_wed_device *dev, int cmd_id, void *data, int len)
+@@ -1395,7 +1849,7 @@ mtk_wed_send_msg(struct mtk_wed_device *dev, int cmd_id, void *data, int len)
  {
  	struct mtk_wed_wo *wo = dev->hw->wed_wo;
  
@@ -1699,7 +1711,7 @@
  		return 0;
  
  	return mtk_wed_mcu_send_msg(wo, MODULE_ID_WO, cmd_id, data, len, true);
-@@ -1420,24 +1862,106 @@ mtk_wed_ppe_check(struct mtk_wed_device *dev, struct sk_buff *skb,
+@@ -1420,24 +1874,106 @@ mtk_wed_ppe_check(struct mtk_wed_device *dev, struct sk_buff *skb,
  	}
  }
  
@@ -1809,7 +1821,7 @@
  		u32 val;
  
  		val = dev->wlan.wpdma_phys |
-@@ -1448,33 +1972,52 @@ mtk_wed_start(struct mtk_wed_device *dev, u32 irq_mask)
+@@ -1448,33 +1984,52 @@ mtk_wed_start(struct mtk_wed_device *dev, u32 irq_mask)
  			val |= BIT(1);
  		val |= BIT(0);
  		regmap_write(dev->hw->mirror, dev->hw->index * 4, val);
@@ -1865,7 +1877,7 @@
  	int ret = 0;
  
  	RCU_LOCKDEP_WARN(!rcu_read_lock_held(),
-@@ -1494,34 +2037,30 @@ mtk_wed_attach(struct mtk_wed_device *dev)
+@@ -1494,34 +2049,30 @@ mtk_wed_attach(struct mtk_wed_device *dev)
  		goto out;
  	}
  
@@ -1910,7 +1922,7 @@
  		ret = mtk_wed_rro_alloc(dev);
  		if (ret)
  			goto error;
-@@ -1533,15 +2072,20 @@ mtk_wed_attach(struct mtk_wed_device *dev)
+@@ -1533,15 +2084,20 @@ mtk_wed_attach(struct mtk_wed_device *dev)
  	init_completion(&dev->wlan_reset_done);
  	atomic_set(&dev->fe_reset, 0);
  
@@ -1934,7 +1946,7 @@
  out:
  	mutex_unlock(&hw_lock);
  
-@@ -1576,8 +2120,26 @@ mtk_wed_tx_ring_setup(struct mtk_wed_device *dev, int idx,
+@@ -1576,8 +2132,26 @@ mtk_wed_tx_ring_setup(struct mtk_wed_device *dev, int idx,
  	if (mtk_wed_wdma_rx_ring_setup(dev, idx, MTK_WED_WDMA_RING_SIZE, reset))
  		return -ENOMEM;
  
@@ -1961,7 +1973,7 @@
  
  	/* WED -> WPDMA */
  	wpdma_tx_w32(dev, idx, MTK_WED_RING_OFS_BASE, ring->desc_phys);
-@@ -1599,7 +2161,7 @@ mtk_wed_txfree_ring_setup(struct mtk_wed_device *dev, void __iomem *regs)
+@@ -1599,7 +2173,7 @@ mtk_wed_txfree_ring_setup(struct mtk_wed_device *dev, void __iomem *regs)
  	struct mtk_wed_ring *ring = &dev->txfree_ring;
  	int i, idx = 1;
  
@@ -1970,7 +1982,15 @@
  		idx = 0;
  
  	/*
-@@ -1652,6 +2214,129 @@ mtk_wed_rx_ring_setup(struct mtk_wed_device *dev,
+@@ -1638,6 +2212,7 @@ mtk_wed_rx_ring_setup(struct mtk_wed_device *dev,
+ 
+ 	ring->reg_base = MTK_WED_RING_RX_DATA(idx);
+ 	ring->wpdma = regs;
++	ring->flags |= MTK_WED_RING_CONFIGURED;
+ 	dev->hw->ring_num = idx + 1;
+ 
+ 	/* WPDMA ->  WED */
+@@ -1652,6 +2227,129 @@ mtk_wed_rx_ring_setup(struct mtk_wed_device *dev,
  	return 0;
  }
  
@@ -2100,7 +2120,7 @@
  static u32
  mtk_wed_irq_get(struct mtk_wed_device *dev, u32 mask)
  {
-@@ -1659,9 +2344,13 @@ mtk_wed_irq_get(struct mtk_wed_device *dev, u32 mask)
+@@ -1659,9 +2357,13 @@ mtk_wed_irq_get(struct mtk_wed_device *dev, u32 mask)
  
  	val = wed_r32(dev, MTK_WED_EXT_INT_STATUS);
  	wed_w32(dev, MTK_WED_EXT_INT_STATUS, val);
@@ -2117,7 +2137,7 @@
  	if (val && net_ratelimit())
  		pr_err("mtk_wed%d: error status=%08x\n", dev->hw->index, val);
  
-@@ -1754,6 +2443,9 @@ void mtk_wed_add_hw(struct device_node *np, struct mtk_eth *eth,
+@@ -1754,6 +2456,9 @@ void mtk_wed_add_hw(struct device_node *np, struct mtk_eth *eth,
  		.tx_ring_setup = mtk_wed_tx_ring_setup,
  		.txfree_ring_setup = mtk_wed_txfree_ring_setup,
  		.rx_ring_setup = mtk_wed_rx_ring_setup,
@@ -2127,7 +2147,7 @@
  		.msg_update = mtk_wed_send_msg,
  		.start = mtk_wed_start,
  		.stop = mtk_wed_stop,
-@@ -1765,6 +2457,7 @@ void mtk_wed_add_hw(struct device_node *np, struct mtk_eth *eth,
+@@ -1765,6 +2470,7 @@ void mtk_wed_add_hw(struct device_node *np, struct mtk_eth *eth,
  		.detach = mtk_wed_detach,
  		.setup_tc = mtk_wed_eth_setup_tc,
  		.ppe_check = mtk_wed_ppe_check,
@@ -2135,7 +2155,7 @@
  	};
  	struct device_node *eth_np = eth->dev->of_node;
  	struct platform_device *pdev;
-@@ -1804,9 +2497,10 @@ void mtk_wed_add_hw(struct device_node *np, struct mtk_eth *eth,
+@@ -1804,9 +2510,10 @@ void mtk_wed_add_hw(struct device_node *np, struct mtk_eth *eth,
  	hw->wdma_phy = wdma_phy;
  	hw->index = index;
  	hw->irq = irq;
@@ -2148,7 +2168,7 @@
  		hw->mirror = syscon_regmap_lookup_by_phandle(eth_np,
  							     "mediatek,pcie-mirror");
  		hw->hifsys = syscon_regmap_lookup_by_phandle(eth_np,
-@@ -1821,7 +2515,6 @@ void mtk_wed_add_hw(struct device_node *np, struct mtk_eth *eth,
+@@ -1821,7 +2528,6 @@ 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);
  		}