mt76: mt7615: cleanup mcu tx queue in mt7615_dma_reset()
authorRyder Lee <ryder.lee@mediatek.com>
Thu, 25 Mar 2021 08:06:02 +0000 (16:06 +0800)
committerFelix Fietkau <nbd@nbd.name>
Sun, 11 Apr 2021 22:03:04 +0000 (00:03 +0200)
With this patch, mt7615_mac_reset_work() can recover system back.

Fixes: e637763b606b ("mt76: move mcu queues to mt76_dev q_mcu array")
Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7615/mac.c

index 59aa8f84645bab22ba69c9f77569f13305d1487e..17aa3e4d67cafa7a5550fc4362b5827cc7fcb93f 100644 (file)
@@ -2018,15 +2018,17 @@ void mt7615_dma_reset(struct mt7615_dev *dev)
        mt76_clear(dev, MT_WPDMA_GLO_CFG,
                   MT_WPDMA_GLO_CFG_RX_DMA_EN | MT_WPDMA_GLO_CFG_TX_DMA_EN |
                   MT_WPDMA_GLO_CFG_TX_WRITEBACK_DONE);
+
        usleep_range(1000, 2000);
 
-       mt76_queue_tx_cleanup(dev, dev->mt76.q_mcu[MT_MCUQ_WM], true);
        for (i = 0; i < __MT_TXQ_MAX; i++)
                mt76_queue_tx_cleanup(dev, dev->mphy.q_tx[i], true);
 
-       mt76_for_each_q_rx(&dev->mt76, i) {
+       for (i = 0; i < __MT_MCUQ_MAX; i++)
+               mt76_queue_tx_cleanup(dev, dev->mt76.q_mcu[i], true);
+
+       mt76_for_each_q_rx(&dev->mt76, i)
                mt76_queue_rx_reset(dev, i);
-       }
 
        mt76_set(dev, MT_WPDMA_GLO_CFG,
                 MT_WPDMA_GLO_CFG_RX_DMA_EN | MT_WPDMA_GLO_CFG_TX_DMA_EN |