From 94cebfc31a1ebd66738d7bd9b882700e9c8d8c2e Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Wed, 21 Nov 2018 15:00:14 +0100 Subject: [PATCH] mt7603: fix handling lost interrupt events during watchdog reset Schedule tx tasklet and rx napi poll after reset to ensure that processing of DMA queues resumes Signed-off-by: Felix Fietkau --- mt7603/mac.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/mt7603/mac.c b/mt7603/mac.c index c8100174..5526e197 100644 --- a/mt7603/mac.c +++ b/mt7603/mac.c @@ -1291,6 +1291,8 @@ static void mt7603_mac_watchdog_reset(struct mt7603_dev *dev) mutex_lock(&dev->mt76.mutex); + mt7603_beacon_set_timer(dev, -1, 0); + mt7603_pse_reset(dev); if (dev->reset_cause[RESET_CAUSE_RESET_FAILED]) goto skip_dma_reset; @@ -1304,7 +1306,6 @@ static void mt7603_mac_watchdog_reset(struct mt7603_dev *dev) mt7603_irq_disable(dev, mask); - mt7603_beacon_set_timer(dev, -1, 0); mt76_set(dev, MT_WPDMA_GLO_CFG, MT_WPDMA_GLO_CFG_FORCE_TX_EOF); mt7603_pse_client_reset(dev); @@ -1319,16 +1320,22 @@ static void mt7603_mac_watchdog_reset(struct mt7603_dev *dev) mt7603_irq_enable(dev, mask); - mt7603_beacon_set_timer(dev, -1, beacon_int); - skip_dma_reset: clear_bit(MT76_RESET, &dev->mt76.state); mutex_unlock(&dev->mt76.mutex); tasklet_enable(&dev->tx_tasklet); + tasklet_schedule(&dev->tx_tasklet); + tasklet_enable(&dev->pre_tbtt_tasklet); + mt7603_beacon_set_timer(dev, -1, beacon_int); + napi_enable(&dev->mt76.napi[0]); + napi_schedule(&dev->mt76.napi[0]); + napi_enable(&dev->mt76.napi[1]); + napi_schedule(&dev->mt76.napi[1]); + ieee80211_wake_queues(dev->mt76.hw); mt76_txq_schedule_all(&dev->mt76); }