| From 5bbae529ad6c2d5711a1a2705bb5843e9829bba9 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Fri, 26 Mar 2021 02:28:56 +0800 |
| Subject: mt76: mt7915: cleanup mcu tx queue in mt7915_dma_reset() |
| |
| From: Ryder Lee <ryder.lee@mediatek.com> |
| |
| [ Upstream commit 1ebea45ef027ee31cd50ed92903071391e792edb ] |
| |
| Cleanup mcu queues in mt7915_mac_reset_work(). |
| |
| 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> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/net/wireless/mediatek/mt76/mt7915/mac.c | 15 ++++++++------- |
| 1 file changed, 8 insertions(+), 7 deletions(-) |
| |
| diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c |
| index dc2b8c72e7f0..2dedca6f24e4 100644 |
| --- a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c |
| +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c |
| @@ -1453,9 +1453,8 @@ mt7915_update_beacons(struct mt7915_dev *dev) |
| } |
| |
| static void |
| -mt7915_dma_reset(struct mt7915_phy *phy) |
| +mt7915_dma_reset(struct mt7915_dev *dev) |
| { |
| - struct mt7915_dev *dev = phy->dev; |
| struct mt76_phy *mphy_ext = dev->mt76.phy2; |
| int i; |
| |
| @@ -1463,18 +1462,20 @@ mt7915_dma_reset(struct mt7915_phy *phy) |
| MT_WFDMA0_GLO_CFG_TX_DMA_EN | MT_WFDMA0_GLO_CFG_RX_DMA_EN); |
| mt76_clear(dev, MT_WFDMA1_GLO_CFG, |
| MT_WFDMA1_GLO_CFG_TX_DMA_EN | MT_WFDMA1_GLO_CFG_RX_DMA_EN); |
| + |
| usleep_range(1000, 2000); |
| |
| - mt76_queue_tx_cleanup(dev, dev->mt76.q_mcu[MT_MCUQ_WA], true); |
| for (i = 0; i < __MT_TXQ_MAX; i++) { |
| - mt76_queue_tx_cleanup(dev, phy->mt76->q_tx[i], true); |
| + mt76_queue_tx_cleanup(dev, dev->mphy.q_tx[i], true); |
| if (mphy_ext) |
| mt76_queue_tx_cleanup(dev, mphy_ext->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); |
| - } |
| |
| /* re-init prefetch settings after reset */ |
| mt7915_dma_prefetch(dev); |
| @@ -1550,7 +1551,7 @@ void mt7915_mac_reset_work(struct work_struct *work) |
| idr_init(&dev->token); |
| |
| if (mt7915_wait_reset_state(dev, MT_MCU_CMD_RESET_DONE)) { |
| - mt7915_dma_reset(&dev->phy); |
| + mt7915_dma_reset(dev); |
| |
| mt76_wr(dev, MT_MCU_INT_EVENT, MT_MCU_INT_EVENT_DMA_INIT); |
| mt7915_wait_reset_state(dev, MT_MCU_CMD_RECOVERY_DONE); |
| -- |
| 2.30.2 |
| |