diff mbox series

[RFC,v1] mt76: mt7915: wed: add wed tx support

Message ID TYCPR01MB84374459E6D6B7BB602977CD98FB2@TYCPR01MB8437.jpnprd01.prod.outlook.com (mailing list archive)
State New
Headers show
Series [RFC,v1] mt76: mt7915: wed: add wed tx support | expand

Commit Message

Shengyu Qu Feb. 17, 2025, 5:27 a.m. UTC
Adding TX offload support for WED on mt7915 driver.

Signed-off-by: Sujuan Chen <sujuan.chen@mediatek.com>
Signed-off-by: Shengyu Qu <wiagn233@outlook.com>
---
This patch comes from downstream driver[1], I'm not sure if it's
needed, so I sent this as RFC.
[1] https://git01.mediatek.com/plugins/gitiles/openwrt/feeds/mtk-openwrt-feeds/+/cbc4fee8452e0fd7168a332915eaa23a356101c3/autobuild/autobuild_5.4_mac80211_release/package/kernel/mt76/patches/2000-wifi-mt76-mt7915-wed-add-wed-tx-support.patch
---
 drivers/net/wireless/mediatek/mt76/mt76_connac.h   |  1 +
 drivers/net/wireless/mediatek/mt76/mt7915/mac.c    | 10 +++++++---
 drivers/net/wireless/mediatek/mt76/mt7915/main.c   |  4 ++--
 drivers/net/wireless/mediatek/mt76/mt7915/mmio.c   |  1 +
 drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h |  2 +-
 drivers/net/wireless/mediatek/mt76/wed.c           |  2 +-
 6 files changed, 13 insertions(+), 7 deletions(-)
diff mbox series

Patch

diff --git a/drivers/net/wireless/mediatek/mt76/mt76_connac.h b/drivers/net/wireless/mediatek/mt76/mt76_connac.h
index 455979476d11..4495f126a2b1 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76_connac.h
+++ b/drivers/net/wireless/mediatek/mt76/mt76_connac.h
@@ -131,6 +131,7 @@  struct mt76_connac_sta_key_conf {
 };
 
 #define MT_TXP_MAX_BUF_NUM		6
+#define MT_TXD_TXP_BUF_SIZE		128
 
 struct mt76_connac_fw_txp {
 	__le16 flags;
diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c
index 2ba6eb3038ce..ea5fdd9fc014 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c
@@ -840,9 +840,9 @@  u32 mt7915_wed_init_buf(void *ptr, dma_addr_t phys, int token_id)
 
 	txp->token = cpu_to_le16(token_id);
 	txp->nbuf = 1;
-	txp->buf[0] = cpu_to_le32(phys + MT_TXD_SIZE + sizeof(*txp));
+	txp->buf[0] = cpu_to_le32(phys + MT_TXD_TXP_BUF_SIZE);
 
-	return MT_TXD_SIZE + sizeof(*txp);
+	return MT_TXD_TXP_BUF_SIZE;
 }
 
 static void
@@ -891,6 +891,7 @@  mt7915_mac_tx_free(struct mt7915_dev *dev, void *data, int len)
 	LIST_HEAD(free_list);
 	void *end = data + len;
 	bool v3, wake = false;
+	bool with_txwi = true;
 	u16 total, count = 0;
 	u32 txd = le32_to_cpu(free->txd);
 	__le32 *cur_info;
@@ -960,12 +961,15 @@  mt7915_mac_tx_free(struct mt7915_dev *dev, void *data, int len)
 			txwi = mt76_token_release(mdev, msdu, &wake);
 			if (!txwi)
 				continue;
+			else
+				with_txwi = false;
 
 			mt76_connac2_txwi_free(mdev, txwi, sta, &free_list);
 		}
 	}
 
-	mt7915_mac_tx_free_done(dev, &free_list, wake);
+	if (!with_txwi)
+		mt7915_mac_tx_free_done(dev, &free_list, wake);
 }
 
 static void
diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/main.c b/drivers/net/wireless/mediatek/mt76/mt7915/main.c
index 3aa31c5cefa6..ca3612cbab85 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/main.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/main.c
@@ -1726,14 +1726,14 @@  mt7915_net_fill_forward_path(struct ieee80211_hw *hw,
 	if (!mtk_wed_device_active(wed))
 		return -ENODEV;
 
-	if (msta->wcid.idx > 0xff)
+	if (msta->wcid.idx > MT7915_WTBL_STA)
 		return -EIO;
 
 	path->type = DEV_PATH_MTK_WDMA;
 	path->dev = ctx->dev;
 	path->mtk_wdma.wdma_idx = wed->wdma_idx;
 	path->mtk_wdma.bss = mvif->mt76.idx;
-	path->mtk_wdma.wcid = is_mt7915(&dev->mt76) ? msta->wcid.idx : 0x3ff;
+	path->mtk_wdma.wcid = is_mt7915(&dev->mt76) ? 0xff : 0x3ff;
 	path->mtk_wdma.queue = phy != &dev->phy;
 
 	ctx->dev = NULL;
diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c b/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c
index 876f0692850a..5addaf61bd80 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c
@@ -723,6 +723,7 @@  int mt7915_mmio_wed_init(struct mt7915_dev *dev, void *pdev_ptr,
 
 	*irq = wed->irq;
 	dev->mt76.dma_dev = wed->dev;
+	dev->mt76.token_size = wed->wlan.token_start;
 
 	ret = dma_set_mask(wed->dev, DMA_BIT_MASK(32));
 	if (ret)
diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h b/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h
index 533939f2b7ed..bd1006be37c5 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h
@@ -60,7 +60,7 @@ 
 #define MT7916_EEPROM_SIZE		4096
 
 #define MT7915_EEPROM_BLOCK_SIZE	16
-#define MT7915_HW_TOKEN_SIZE		4096
+#define MT7915_HW_TOKEN_SIZE		7168
 #define MT7915_TOKEN_SIZE		8192
 
 #define MT7915_CFEND_RATE_DEFAULT	0x49	/* OFDM 24M */
diff --git a/drivers/net/wireless/mediatek/mt76/wed.c b/drivers/net/wireless/mediatek/mt76/wed.c
index f89e4537555c..d963928392bb 100644
--- a/drivers/net/wireless/mediatek/mt76/wed.c
+++ b/drivers/net/wireless/mediatek/mt76/wed.c
@@ -171,7 +171,7 @@  void mt76_wed_offload_disable(struct mtk_wed_device *wed)
 	struct mt76_dev *dev = container_of(wed, struct mt76_dev, mmio.wed);
 
 	spin_lock_bh(&dev->token_lock);
-	dev->token_size = dev->drv->token_size;
+	dev->token_size = wed->wlan.token_start;
 	spin_unlock_bh(&dev->token_lock);
 }
 EXPORT_SYMBOL_GPL(mt76_wed_offload_disable);