OSDN Git Service

mt76: mt7921: set MT76_RESET during mac reset
authorLorenzo Bianconi <lorenzo@kernel.org>
Fri, 28 May 2021 17:11:42 +0000 (19:11 +0200)
committerFelix Fietkau <nbd@nbd.name>
Sat, 19 Jun 2021 07:22:47 +0000 (09:22 +0200)
Set MT76_RESET during mt7921_mac_reset in order to avoid packet
transmissions. Move tx scheduling at the end of reset routine.

Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7921/mac.c

index 882bb74..ed886f8 100644 (file)
@@ -1294,6 +1294,7 @@ mt7921_mac_reset(struct mt7921_dev *dev)
        mt76_wr(dev, MT_WFDMA0_HOST_INT_ENA, 0);
        mt76_wr(dev, MT_PCIE_MAC_INT_ENABLE, 0x0);
 
+       set_bit(MT76_RESET, &dev->mphy.state);
        set_bit(MT76_MCU_RESET, &dev->mphy.state);
        wake_up(&dev->mt76.mcu.wait);
        skb_queue_purge(&dev->mt76.mcu.res_q);
@@ -1309,19 +1310,13 @@ mt7921_mac_reset(struct mt7921_dev *dev)
        mt7921_tx_token_put(dev);
        idr_init(&dev->mt76.token);
 
-       err = mt7921_wpdma_reset(dev, true);
-       if (err)
-               return err;
+       mt7921_wpdma_reset(dev, true);
 
        mt76_for_each_q_rx(&dev->mt76, i) {
                napi_enable(&dev->mt76.napi[i]);
                napi_schedule(&dev->mt76.napi[i]);
        }
 
-       napi_enable(&dev->mt76.tx_napi);
-       napi_schedule(&dev->mt76.tx_napi);
-       mt76_worker_enable(&dev->mt76.tx_worker);
-
        clear_bit(MT76_MCU_RESET, &dev->mphy.state);
 
        mt76_wr(dev, MT_WFDMA0_HOST_INT_ENA,
@@ -1331,17 +1326,25 @@ mt7921_mac_reset(struct mt7921_dev *dev)
 
        err = mt7921_run_firmware(dev);
        if (err)
-               return err;
+               goto out;
 
        err = mt7921_mcu_set_eeprom(dev);
        if (err)
-               return err;
+               goto out;
 
        err = mt7921_mac_init(dev);
        if (err)
-               return err;
+               goto out;
+
+       err = __mt7921_start(&dev->phy);
+out:
+       clear_bit(MT76_RESET, &dev->mphy.state);
+
+       napi_enable(&dev->mt76.tx_napi);
+       napi_schedule(&dev->mt76.tx_napi);
+       mt76_worker_enable(&dev->mt76.tx_worker);
 
-       return __mt7921_start(&dev->phy);
+       return err;
 }
 
 /* system error recovery */