[PATCH mt76 04/11] wifi: mt76: mt7996: Fix BAND2 tx queues initialization when NPU is enabled
Lorenzo Bianconi
lorenzo at kernel.org
Thu Dec 4 00:10:46 PST 2025
Fix BAND2 tx queues initialization for MT7996 chipset when NPU is
enabled. This is a preliminary patch to enable NPU offload for MT7996
(7990-Eagle) chipset.
Tested-by: Hui Ma <hui.ma at airoha.com>
Signed-off-by: Lorenzo Bianconi <lorenzo at kernel.org>
---
drivers/net/wireless/mediatek/mt76/mt7996/init.c | 18 ++++++++++++------
drivers/net/wireless/mediatek/mt76/mt7996/mt7996.h | 1 +
2 files changed, 13 insertions(+), 6 deletions(-)
diff --git a/drivers/net/wireless/mediatek/mt76/mt7996/init.c b/drivers/net/wireless/mediatek/mt76/mt7996/init.c
index 00a8286bd136862d756706d6ad8098a2ddc3ca4e..9fbe4235de0d0d42776d5661fa1c297e431b8d27 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7996/init.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7996/init.c
@@ -668,8 +668,9 @@ static int mt7996_register_phy(struct mt7996_dev *dev, enum mt76_band_id band)
return 0;
if (dev->hif2 &&
- ((is_mt7996(&dev->mt76) && band == MT_BAND2) ||
- (is_mt7992(&dev->mt76) && band == MT_BAND1))) {
+ ((is_mt7992(&dev->mt76) && band == MT_BAND1) ||
+ (is_mt7996(&dev->mt76) && band == MT_BAND2 &&
+ !mt76_npu_device_active(&dev->mt76)))) {
hif1_ofs = MT_WFDMA0_PCIE1(0) - MT_WFDMA0(0);
wed = &dev->mt76.mmio.wed_hif2;
}
@@ -709,14 +710,19 @@ static int mt7996_register_phy(struct mt7996_dev *dev, enum mt76_band_id band)
/* init wiphy according to mphy and phy */
mt7996_init_wiphy_band(mphy->hw, phy);
- if (is_mt7996(&dev->mt76) && !dev->hif2 && band == MT_BAND1) {
+ if (is_mt7996(&dev->mt76) &&
+ ((band == MT_BAND1 && !dev->hif2) ||
+ (band == MT_BAND2 && mt76_npu_device_active(&dev->mt76)))) {
int i;
for (i = 0; i <= MT_TXQ_PSD; i++)
- mphy->q_tx[i] = dev->mt76.phys[MT_BAND0]->q_tx[0];
+ mphy->q_tx[i] = dev->mt76.phys[band - 1]->q_tx[0];
} else {
- ret = mt7996_init_tx_queues(mphy->priv, MT_TXQ_ID(band),
- MT7996_TX_RING_SIZE,
+ int size = is_mt7996(&dev->mt76) &&
+ mt76_npu_device_active(&dev->mt76)
+ ? MT7996_NPU_TX_RING_SIZE / 2 : MT7996_TX_RING_SIZE;
+
+ ret = mt7996_init_tx_queues(mphy->priv, MT_TXQ_ID(band), size,
MT_TXQ_RING_BASE(band) + hif1_ofs,
wed);
if (ret)
diff --git a/drivers/net/wireless/mediatek/mt76/mt7996/mt7996.h b/drivers/net/wireless/mediatek/mt76/mt7996/mt7996.h
index 7a884311800ea8cfc0e302b2a140a4072ce18b69..29a77d75099033727f5df5a487216c043fd04f85 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7996/mt7996.h
+++ b/drivers/net/wireless/mediatek/mt76/mt7996/mt7996.h
@@ -29,6 +29,7 @@
#define MT7996_RX_RING_SIZE 1536
#define MT7996_RX_MCU_RING_SIZE 512
#define MT7996_RX_MCU_RING_SIZE_WA 1024
+#define MT7996_NPU_TX_RING_SIZE 1024
/* scatter-gather of mcu event is not supported in connac3 */
#define MT7996_RX_MCU_BUF_SIZE (2048 + \
SKB_DATA_ALIGN(sizeof(struct skb_shared_info)))
--
2.52.0
More information about the Linux-mediatek
mailing list