]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: mt76: mt7996: decrease timeout for commonly issued MCU commands
authorFelix Fietkau <nbd@nbd.name>
Mon, 15 Sep 2025 07:58:58 +0000 (09:58 +0200)
committerFelix Fietkau <nbd@nbd.name>
Mon, 15 Sep 2025 11:23:01 +0000 (13:23 +0200)
This allows faster recovery from firmware issues.
Based on patch by Chad Monroe and ported from mt7915.

Link: https://patch.msgid.link/20250915075910.47558-3-nbd@nbd.name
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7996/mcu.c

index 1c89d235026d1ebe1cc6a1f1b88a80e40aa023b8..29552ab160898c3c919713801d34858dc863ff10 100644 (file)
@@ -242,6 +242,30 @@ mt7996_mcu_parse_response(struct mt76_dev *mdev, int cmd,
        return ret;
 }
 
+static void
+mt7996_mcu_set_timeout(struct mt76_dev *mdev, int cmd)
+{
+       mdev->mcu.timeout = 5 * HZ;
+
+       if (!(cmd & __MCU_CMD_FIELD_UNI))
+               return;
+
+       switch (FIELD_GET(__MCU_CMD_FIELD_ID, cmd)) {
+       case MCU_UNI_CMD_THERMAL:
+       case MCU_UNI_CMD_TWT:
+       case MCU_UNI_CMD_GET_MIB_INFO:
+       case MCU_UNI_CMD_STA_REC_UPDATE:
+       case MCU_UNI_CMD_BSS_INFO_UPDATE:
+               mdev->mcu.timeout = 2 * HZ;
+               return;
+       case MCU_UNI_CMD_EFUSE_CTRL:
+               mdev->mcu.timeout = 20 * HZ;
+               return;
+       default:
+               break;
+       }
+}
+
 static int
 mt7996_mcu_send_message(struct mt76_dev *mdev, struct sk_buff *skb,
                        int cmd, int *wait_seq)
@@ -255,7 +279,7 @@ mt7996_mcu_send_message(struct mt76_dev *mdev, struct sk_buff *skb,
        u32 val;
        u8 seq;
 
-       mdev->mcu.timeout = 20 * HZ;
+       mt7996_mcu_set_timeout(mdev, cmd);
 
        seq = ++dev->mt76.mcu.msg_seq & 0xf;
        if (!seq)