]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
wifi: mt76: always enable RRO queues for non-MT7992 chipset
authorLorenzo Bianconi <lorenzo@kernel.org>
Thu, 22 Jan 2026 10:39:47 +0000 (11:39 +0100)
committerFelix Fietkau <nbd@nbd.name>
Mon, 23 Mar 2026 09:23:00 +0000 (09:23 +0000)
MT7990 NPU binary requires to initialize NPU desc_base after configuring
ring_size. This is a preliminary patch to enable NPU offload for MT7996
(Eagle) chipset.

Tested-by: Kang Yang <kang.yang@airoha.com>
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Link: https://patch.msgid.link/20260122-mt76-npu-eagle-offload-v2-3-2374614c0de6@kernel.org
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/dma.c

index 893ac14285cab3c22f70945d490627a64b643efe..f5c6bb94ccbbda6afe03b24cf245b30c797e855d 100644 (file)
@@ -6,6 +6,7 @@
 #include <linux/dma-mapping.h>
 #include "mt76.h"
 #include "dma.h"
+#include "mt76_connac.h"
 
 static struct mt76_txwi_cache *
 mt76_alloc_txwi(struct mt76_dev *dev)
@@ -188,16 +189,18 @@ mt76_dma_queue_magic_cnt_init(struct mt76_dev *dev, struct mt76_queue *q)
 static void
 mt76_dma_sync_idx(struct mt76_dev *dev, struct mt76_queue *q)
 {
-       Q_WRITE(q, desc_base, q->desc_dma);
-       if ((q->flags & MT_QFLAG_WED_RRO_EN) && !mt76_npu_device_active(dev))
+       if ((q->flags & MT_QFLAG_WED_RRO_EN) &&
+           (!is_mt7992(dev) || !mt76_npu_device_active(dev)))
                Q_WRITE(q, ring_size, MT_DMA_RRO_EN | q->ndesc);
        else
                Q_WRITE(q, ring_size, q->ndesc);
 
        if (mt76_queue_is_npu_tx(q)) {
-               writel(q->desc_dma, &q->regs->desc_base);
                writel(q->ndesc, &q->regs->ring_size);
+               writel(q->desc_dma, &q->regs->desc_base);
        }
+
+       Q_WRITE(q, desc_base, q->desc_dma);
        q->head = Q_READ(q, dma_idx);
        q->tail = q->head;
 }