From: Lorenzo Bianconi Date: Fri, 18 Jun 2021 10:30:47 +0000 (+0200) Subject: mt76: mt7921: allow chip reset during device restart X-Git-Tag: v5.15~843^2~30^2~25^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=61a1f99dd1e3c145fce9d601b52e7adb8f37322a;p=platform%2Fkernel%2Flinux-starfive.git mt76: mt7921: allow chip reset during device restart Disable chip full reset just during device probing but allow it during hw restart. Signed-off-by: Lorenzo Bianconi Signed-off-by: Felix Fietkau --- diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/init.c b/drivers/net/wireless/mediatek/mt76/mt7921/init.c index 9925c15..a9ce10b 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7921/init.c +++ b/drivers/net/wireless/mediatek/mt76/mt7921/init.c @@ -236,7 +236,13 @@ int mt7921_register_device(struct mt7921_dev *dev) if (ret) return ret; - return mt76_connac_mcu_set_deep_sleep(&dev->mt76, dev->pm.ds_enable); + ret = mt76_connac_mcu_set_deep_sleep(&dev->mt76, dev->pm.ds_enable); + if (ret) + return ret; + + dev->hw_init_done = true; + + return 0; } void mt7921_unregister_device(struct mt7921_dev *dev) diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mac.c b/drivers/net/wireless/mediatek/mt76/mt7921/mac.c index 143dae9..7fe2e3a 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7921/mac.c +++ b/drivers/net/wireless/mediatek/mt76/mt7921/mac.c @@ -1390,11 +1390,13 @@ void mt7921_reset(struct mt76_dev *mdev) { struct mt7921_dev *dev = container_of(mdev, struct mt7921_dev, mt76); - if (!test_bit(MT76_STATE_RUNNING, &dev->mphy.state)) + if (!dev->hw_init_done) return; - if (!dev->hw_full_reset) - queue_work(dev->mt76.wq, &dev->reset_work); + if (dev->hw_full_reset) + return; + + queue_work(dev->mt76.wq, &dev->reset_work); } static void diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h b/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h index 92cf384..2d8bd6b 100644 --- a/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h +++ b/drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h @@ -160,7 +160,8 @@ struct mt7921_dev { u16 chainmask; struct work_struct reset_work; - bool hw_full_reset; + bool hw_full_reset:1; + bool hw_init_done:1; struct list_head sta_poll_list; spinlock_t sta_poll_lock;