[][Fix mt7915 wds t-put drop to 0 issue]

[Description]
Fix mt7915 wds t-put drop to 0 issue

mt7915 wds should set real wcid, don't overwrite txd since mt7915 only
support 256 sta

[Release-log]
N/A

Change-Id: I749c332ccc52a3e730808f068068a0fd0362c411
Reviewed-on: https://gerrit.mediatek.inc/c/openwrt/feeds/mtk_openwrt_feeds/+/6510406
diff --git a/autobuild_mac80211_release/package/kernel/mt76/patches/3001-mt76-add-wed-tx-wds-support.patch b/autobuild_mac80211_release/package/kernel/mt76/patches/3001-mt76-add-wed-tx-wds-support.patch
index aa7f160..43e402d 100755
--- a/autobuild_mac80211_release/package/kernel/mt76/patches/3001-mt76-add-wed-tx-wds-support.patch
+++ b/autobuild_mac80211_release/package/kernel/mt76/patches/3001-mt76-add-wed-tx-wds-support.patch
@@ -8,12 +8,12 @@
  mac80211.c      |  5 ++++-
  mt76.h          |  2 ++
  mt7915/init.c   |  9 +++++++++
- mt7915/main.c   | 47 +++++++++++++++++++++++++++++++++++++++++++----
+ mt7915/main.c   | 52 +++++++++++++++++++++++++++++++++++++++++++------
  mt7915/mcu.c    | 12 ++++++++++--
  mt7915/mcu.h    |  1 +
- mt7915/mmio.c   |  1 +
+ mt7915/mmio.c   |  3 +++
  mt7915/mt7915.h |  4 ++++
- 8 files changed, 74 insertions(+), 7 deletions(-)
+ 8 files changed, 79 insertions(+), 9 deletions(-)
 
 diff --git a/mac80211.c b/mac80211.c
 index 4eaf317..c477d62 100644
@@ -135,16 +135,22 @@
  	mt76_connac_mcu_wtbl_update_hdr_trans(&dev->mt76, vif, sta);
  }
  
-@@ -1449,9 +1485,12 @@ mt7915_net_fill_forward_path(struct ieee80211_hw *hw,
- 	/* fw will find the wcid by dest addr */
- 	if(is_mt7915(&dev->mt76))
- 		path->mtk_wdma.wcid = 0xff;
+@@ -1446,12 +1482,16 @@ mt7915_net_fill_forward_path(struct ieee80211_hw *hw,
+ 	path->dev = ctx->dev;
+ 	path->mtk_wdma.wdma_idx = wed->wdma_idx;
+ 	path->mtk_wdma.bss = mvif->mt76.idx;
+-	/* fw will find the wcid by dest addr */
+-	if(is_mt7915(&dev->mt76))
+-		path->mtk_wdma.wcid = 0xff;
 -	else
 -		path->mtk_wdma.wcid = 0x3ff;
--
-+	else {
-+		if (test_bit(MT_WCID_FLAG_4ADDR, &msta->wcid.flags))
-+			path->mtk_wdma.wcid = msta->wcid.idx;
+ 
++	if (test_bit(MT_WCID_FLAG_4ADDR, &msta->wcid.flags)) {
++		path->mtk_wdma.wcid = msta->wcid.idx;
++	} else {
++		/* fw will find the wcid by dest addr */
++		if(is_mt7915(&dev->mt76))
++			path->mtk_wdma.wcid = 0xff;
 +		else
 +			path->mtk_wdma.wcid = 0x3ff;
 +	}
@@ -197,7 +203,16 @@
 index b0d8a61..de797fd 100644
 --- a/mt7915/mmio.c
 +++ b/mt7915/mmio.c
-@@ -774,6 +774,7 @@ struct mt7915_dev *mt7915_mmio_probe(struct device *pdev,
+@@ -734,6 +734,8 @@ mt7915_pci_wed_init(struct mt7915_dev *dev, struct device *pdev, int *irq)
+ 	/* disable dynamic tx token */
+ 	wed->wlan.offload_enable = mt7915_wed_offload_enable;
+ 	wed->wlan.offload_disable = mt7915_wed_offload_disable;
++	if (!is_mt7915(mdev))
++		wed->wlan.wcid_512 = true;
+ 
+ 	if (mtk_wed_device_attach(wed) != 0)
+ 		return 0;
+@@ -774,6 +776,7 @@ struct mt7915_dev *mt7915_mmio_probe(struct device *pdev,
  		.sta_add = mt7915_mac_sta_add,
  		.sta_remove = mt7915_mac_sta_remove,
  		.update_survey = mt7915_update_channel,
diff --git a/autobuild_mac80211_release/package/kernel/mt76/patches/3002-mt76-add-wed-rx-support.patch b/autobuild_mac80211_release/package/kernel/mt76/patches/3002-mt76-add-wed-rx-support.patch
index 4b7c349..9202a43 100644
--- a/autobuild_mac80211_release/package/kernel/mt76/patches/3002-mt76-add-wed-rx-support.patch
+++ b/autobuild_mac80211_release/package/kernel/mt76/patches/3002-mt76-add-wed-rx-support.patch
@@ -1058,9 +1058,9 @@
  	wed->wlan.nbuf = 7168;
  	wed->wlan.token_start = MT7915_TOKEN_SIZE - wed->wlan.nbuf;
  	wed->wlan.init_buf = mt7915_wed_init_buf;
-@@ -735,12 +752,15 @@ mt7915_pci_wed_init(struct mt7915_dev *dev, struct device *pdev, int *irq)
- 	wed->wlan.offload_enable = mt7915_wed_offload_enable;
- 	wed->wlan.offload_disable = mt7915_wed_offload_disable;
+@@ -737,12 +754,15 @@ mt7915_pci_wed_init(struct mt7915_dev *dev, struct device *pdev, int *irq)
+ 	if (!is_mt7915(mdev))
+ 		wed->wlan.wcid_512 = true;
  
 +	wed->wlan.rx_nbuf = 65536;
 +	wed->wlan.rx_pkt_size = MTK_WED_RX_PKT_SIZE;
diff --git a/autobuild_mac80211_release/target/linux/mediatek/patches-5.4/9996-add-wed-tx-wds-support-for-mt7986.patch b/autobuild_mac80211_release/target/linux/mediatek/patches-5.4/9996-add-wed-tx-wds-support-for-mt7986.patch
index 27977ac..d17f43d 100755
--- a/autobuild_mac80211_release/target/linux/mediatek/patches-5.4/9996-add-wed-tx-wds-support-for-mt7986.patch
+++ b/autobuild_mac80211_release/target/linux/mediatek/patches-5.4/9996-add-wed-tx-wds-support-for-mt7986.patch
@@ -5,15 +5,24 @@
 
 Signed-off-by: Sujuan Chen <sujuan.chen@mediatek.com>
 ---
- drivers/net/ethernet/mediatek/mtk_wed.c      | 6 ++++++
+ drivers/net/ethernet/mediatek/mtk_wed.c      | 8 +++++++-
  drivers/net/ethernet/mediatek/mtk_wed_regs.h | 1 +
- include/linux/soc/mediatek/mtk_wed.h         | 1 +
- 3 files changed, 8 insertions(+)
+ include/linux/soc/mediatek/mtk_wed.h         | 3 +++
+ 3 files changed, 11 insertions(+), 1 deletion(-)
 
 diff --git a/drivers/net/ethernet/mediatek/mtk_wed.c b/drivers/net/ethernet/mediatek/mtk_wed.c
-index 48b0353..2700176 100644
+index 48b0353..472726e 100644
 --- a/drivers/net/ethernet/mediatek/mtk_wed.c
 +++ b/drivers/net/ethernet/mediatek/mtk_wed.c
+@@ -797,7 +797,7 @@ mtk_wed_start(struct mtk_wed_device *dev, u32 irq_mask)
+ 		val |= BIT(0);
+ 		regmap_write(dev->hw->mirror, dev->hw->index * 4, val);
+ 	} else {
+-		mtk_wed_set_512_support(dev, true);
++		mtk_wed_set_512_support(dev, dev->wlan.wcid_512);
+ 	}
+ 
+ 	mtk_wed_dma_enable(dev);
 @@ -809,6 +809,7 @@ mtk_wed_attach(struct mtk_wed_device *dev)
  	__releases(RCU)
  {
@@ -47,7 +56,7 @@
  #define MTK_WED_RESET					0x008
  #define MTK_WED_RESET_TX_BM				BIT(0)
 diff --git a/include/linux/soc/mediatek/mtk_wed.h b/include/linux/soc/mediatek/mtk_wed.h
-index ffd547a..631360b 100644
+index ffd547a..e914cb4 100644
 --- a/include/linux/soc/mediatek/mtk_wed.h
 +++ b/include/linux/soc/mediatek/mtk_wed.h
 @@ -42,6 +42,7 @@ struct mtk_wed_device {
@@ -58,6 +67,15 @@
  
  	struct mtk_wed_ring tx_ring[MTK_WED_TX_QUEUES];
  	struct mtk_wed_ring txfree_ring;
+@@ -72,6 +73,8 @@ struct mtk_wed_device {
+ 		u16 token_start;
+ 		unsigned int nbuf;
+ 
++		bool wcid_512;
++
+ 		u32 (*init_buf)(void *ptr, dma_addr_t phys, int token_id);
+ 		int (*offload_enable)(struct mtk_wed_device *wed);
+ 		void (*offload_disable)(struct mtk_wed_device *wed);
 -- 
 2.18.0
 
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 64c3d33..e99920a 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
@@ -996,7 +996,7 @@
  		val |= BIT(0);
  		regmap_write(dev->hw->mirror, dev->hw->index * 4, val);
  	} else {
--		mtk_wed_set_512_support(dev, true);
+-		mtk_wed_set_512_support(dev, dev->wlan.wcid_512);
 +		/* driver set mid ready and only once */
 +		wed_w32(dev, MTK_WED_EXT_INT_MASK1,
 +			MTK_WED_EXT_INT_STATUS_WPDMA_MID_RDY);
@@ -1010,7 +1010,7 @@
 +		if (ret)
 +			return;
  	}
-+	mtk_wed_set_512_support(dev, true);
++	mtk_wed_set_512_support(dev, dev->wlan.wcid_512);
  
  	mtk_wed_dma_enable(dev);
  	dev->running = true;
@@ -3447,7 +3447,7 @@
 +#endif
 +
 diff --git a/include/linux/soc/mediatek/mtk_wed.h b/include/linux/soc/mediatek/mtk_wed.h
-index 631360b..393f3ca 100644
+index e914cb4..cfa1120 100644
 --- a/include/linux/soc/mediatek/mtk_wed.h
 +++ b/include/linux/soc/mediatek/mtk_wed.h
 @@ -7,6 +7,9 @@
@@ -3494,7 +3494,7 @@
  struct mtk_wed_device {
  #ifdef CONFIG_NET_MEDIATEK_SOC_WED
  	const struct mtk_wed_ops *ops;
-@@ -47,35 +77,54 @@ struct mtk_wed_device {
+@@ -47,37 +77,56 @@ 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];
@@ -3543,6 +3543,8 @@
 +		unsigned int rx_pkt;
 +		unsigned int rx_pkt_size;
  
+ 		bool wcid_512;
+ 
  		u32 (*init_buf)(void *ptr, dma_addr_t phys, int token_id);
  		int (*offload_enable)(struct mtk_wed_device *wed);
  		void (*offload_disable)(struct mtk_wed_device *wed);
@@ -3554,7 +3556,7 @@
  	} wlan;
  #endif
  };
-@@ -86,6 +135,10 @@ struct mtk_wed_ops {
+@@ -88,6 +137,10 @@ struct mtk_wed_ops {
  			     void __iomem *regs);
  	int (*txfree_ring_setup)(struct mtk_wed_device *dev,
  				 void __iomem *regs);
@@ -3565,7 +3567,7 @@
  	void (*detach)(struct mtk_wed_device *dev);
  
  	void (*stop)(struct mtk_wed_device *dev);
-@@ -97,6 +150,8 @@ struct mtk_wed_ops {
+@@ -99,6 +152,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);
@@ -3574,7 +3576,7 @@
  };
  
  extern const struct mtk_wed_ops __rcu *mtk_soc_wed_ops;
-@@ -129,6 +184,10 @@ mtk_wed_device_attach(struct mtk_wed_device *dev)
+@@ -131,6 +186,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)
@@ -3585,7 +3587,7 @@
  #define mtk_wed_device_reg_read(_dev, _reg) \
  	(_dev)->ops->reg_read(_dev, _reg)
  #define mtk_wed_device_reg_write(_dev, _reg, _val) \
-@@ -137,6 +196,8 @@ mtk_wed_device_attach(struct mtk_wed_device *dev)
+@@ -139,6 +198,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)
@@ -3594,7 +3596,7 @@
  #else
  static inline bool mtk_wed_device_active(struct mtk_wed_device *dev)
  {
-@@ -146,10 +207,13 @@ static inline bool mtk_wed_device_active(struct mtk_wed_device *dev)
+@@ -148,10 +209,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