OSDN Git Service

mt76: mt7615: retry if mt7615_mcu_init returns -EAGAIN
authorChuanhong Guo <gch981213@gmail.com>
Wed, 23 Sep 2020 07:23:03 +0000 (15:23 +0800)
committerFelix Fietkau <nbd@nbd.name>
Fri, 4 Dec 2020 12:46:13 +0000 (13:46 +0100)
mt7615_load_patch in mt7615/mcu.c sometimes fails with:
mt7622-wmac 18000000.wmac: Failed to get patch semaphore
and returns -EAGAIN. But this error is returned all the way up to
mt7615_init_work with no actual retrial performed, leaving a
broken wireless phy.
Wait a bit and retry for up to 10 times before giving up.

Signed-off-by: Chuanhong Guo <gch981213@gmail.com>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7615/pci_init.c

index 06a0f8f..27fcb13 100644 (file)
@@ -16,8 +16,15 @@ static void mt7615_init_work(struct work_struct *work)
 {
        struct mt7615_dev *dev = container_of(work, struct mt7615_dev,
                                              mcu_work);
+       int i, ret;
 
-       if (mt7615_mcu_init(dev))
+       ret = mt7615_mcu_init(dev);
+       for (i = 0; (ret == -EAGAIN) && (i < 10); i++) {
+               msleep(200);
+               ret = mt7615_mcu_init(dev);
+       }
+
+       if (ret)
                return;
 
        mt7615_mcu_set_eeprom(dev);