Commit a23f80aa authored by Deren Wu's avatar Deren Wu Committed by Felix Fietkau

mt76: mt7921: fix dma hang in rmmod

The dma would be broken after rmmod flow. There are two different
cases causing this issue.
1. dma access without privilege.
2. hw access sequence borken by another context.

This patch handle both cases to avoid hw crash.

Fixes: 2b9ea5a8 ("mt76: mt7921: add mt7921_dma_cleanup in mt7921_unregister_device")
Signed-off-by: default avatarDeren Wu <deren.wu@mediatek.com>
Signed-off-by: default avatarFelix Fietkau <nbd@nbd.name>
parent 33920b2b
...@@ -266,8 +266,17 @@ int mt7921_register_device(struct mt7921_dev *dev) ...@@ -266,8 +266,17 @@ int mt7921_register_device(struct mt7921_dev *dev)
void mt7921_unregister_device(struct mt7921_dev *dev) void mt7921_unregister_device(struct mt7921_dev *dev)
{ {
int i;
struct mt76_connac_pm *pm = &dev->pm;
mt76_unregister_device(&dev->mt76); mt76_unregister_device(&dev->mt76);
mt76_for_each_q_rx(&dev->mt76, i)
napi_disable(&dev->mt76.napi[i]);
cancel_delayed_work_sync(&pm->ps_work);
cancel_work_sync(&pm->wake_work);
mt7921_tx_token_put(dev); mt7921_tx_token_put(dev);
mt7921_mcu_drv_pmctrl(dev);
mt7921_dma_cleanup(dev); mt7921_dma_cleanup(dev);
mt7921_mcu_exit(dev); mt7921_mcu_exit(dev);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment