int i, ret;
 
        dev_dbg(dev->mt76.dev, "chip reset\n");
+       set_bit(MT76_RESET, &dev->mphy.state);
        dev->hw_full_reset = true;
        ieee80211_stop_queues(hw);
 
        }
 
        dev->hw_full_reset = false;
+       clear_bit(MT76_RESET, &dev->mphy.state);
        pm->suspended = false;
        ieee80211_wake_queues(hw);
        ieee80211_iterate_active_interfaces(hw,
 
        mt76_wr(dev, dev->irq_map->host_irq_enable, 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);
 
        err = __mt7921_start(&dev->phy);
 out:
-       clear_bit(MT76_RESET, &dev->mphy.state);
 
        local_bh_disable();
        napi_enable(&dev->mt76.tx_napi);
 
        mt76_connac_free_pending_tx_skbs(&dev->pm, NULL);
        mt76_txq_schedule_all(&dev->mphy);
        mt76_worker_disable(&dev->mt76.tx_worker);
-       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);
 
        err = __mt7921_start(&dev->phy);
 out:
-       clear_bit(MT76_RESET, &dev->mphy.state);
 
        mt76_worker_enable(&dev->mt76.tx_worker);
 
 
        dev = container_of(sdio, struct mt76_dev, sdio);
 
        while (true) {
-               if (test_bit(MT76_REMOVED, &dev->phy.state))
+               if (test_bit(MT76_RESET, &dev->phy.state) ||
+                   test_bit(MT76_REMOVED, &dev->phy.state))
                        break;
 
                if (!dev->drv->tx_status_data(dev, &update))