OSDN Git Service

wifi: mt76: dma: add reset to mt76_dma_wed_setup signature
authorSujuan Chen <sujuan.chen@mediatek.com>
Tue, 17 Jan 2023 14:02:53 +0000 (15:02 +0100)
committerFelix Fietkau <nbd@nbd.name>
Fri, 3 Feb 2023 13:47:48 +0000 (14:47 +0100)
Export mt76_dma_wed_setup routine. This is a preliminary patch to
introduce proper wed reset support.

Tested-by: Daniel Golle <daniel@makrotopia.org>
Co-developed-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Sujuan Chen <sujuan.chen@mediatek.com>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/dma.c
drivers/net/wireless/mediatek/mt76/dma.h

index 9d02b23..b3965ed 100644 (file)
@@ -626,14 +626,17 @@ mt76_dma_rx_fill(struct mt76_dev *dev, struct mt76_queue *q,
        return frames;
 }
 
-static int
-mt76_dma_wed_setup(struct mt76_dev *dev, struct mt76_queue *q)
+int mt76_dma_wed_setup(struct mt76_dev *dev, struct mt76_queue *q, bool reset)
 {
 #ifdef CONFIG_NET_MEDIATEK_SOC_WED
        struct mtk_wed_device *wed = &dev->mmio.wed;
        int ret, type, ring;
-       u8 flags = q->flags;
+       u8 flags;
+
+       if (!q || !q->ndesc)
+               return -EINVAL;
 
+       flags = q->flags;
        if (!mtk_wed_device_active(wed))
                q->flags &= ~MT_QFLAG_WED;
 
@@ -645,7 +648,7 @@ mt76_dma_wed_setup(struct mt76_dev *dev, struct mt76_queue *q)
 
        switch (type) {
        case MT76_WED_Q_TX:
-               ret = mtk_wed_device_tx_ring_setup(wed, ring, q->regs, false);
+               ret = mtk_wed_device_tx_ring_setup(wed, ring, q->regs, reset);
                if (!ret)
                        q->wed_regs = wed->tx_ring[ring].reg_base;
                break;
@@ -661,7 +664,7 @@ mt76_dma_wed_setup(struct mt76_dev *dev, struct mt76_queue *q)
                        q->wed_regs = wed->txfree_ring.reg_base;
                break;
        case MT76_WED_Q_RX:
-               ret = mtk_wed_device_rx_ring_setup(wed, ring, q->regs, false);
+               ret = mtk_wed_device_rx_ring_setup(wed, ring, q->regs, reset);
                if (!ret)
                        q->wed_regs = wed->rx_ring[ring].reg_base;
                break;
@@ -674,6 +677,7 @@ mt76_dma_wed_setup(struct mt76_dev *dev, struct mt76_queue *q)
        return 0;
 #endif
 }
+EXPORT_SYMBOL_GPL(mt76_dma_wed_setup);
 
 static int
 mt76_dma_alloc_queue(struct mt76_dev *dev, struct mt76_queue *q,
@@ -704,7 +708,7 @@ mt76_dma_alloc_queue(struct mt76_dev *dev, struct mt76_queue *q,
        if (ret)
                return ret;
 
-       ret = mt76_dma_wed_setup(dev, q);
+       ret = mt76_dma_wed_setup(dev, q, false);
        if (ret)
                return ret;
 
index 53c6ce2..4b9bc7f 100644 (file)
@@ -56,5 +56,6 @@ enum mt76_mcu_evt_type {
 int mt76_dma_rx_poll(struct napi_struct *napi, int budget);
 void mt76_dma_attach(struct mt76_dev *dev);
 void mt76_dma_cleanup(struct mt76_dev *dev);
+int mt76_dma_wed_setup(struct mt76_dev *dev, struct mt76_queue *q, bool reset);
 
 #endif