mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 17:47:41 +02:00
wifi: mt76: connac: tolerate inactive BSS deactivation
Firmware may return wlan_failure when deactivating a BSS that is already inactive. This is a valid teardown case and should not fail the remove path. Keep activation failures unchanged since they still indicate that firmware failed to create or activate the BSS state. Signed-off-by: Sean Wang <sean.wang@mediatek.com> Link: https://patch.msgid.link/20260425195011.790265-13-sean.wang@kernel.org Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
parent
b2f5def2f1
commit
04222f9803
|
|
@ -1232,6 +1232,9 @@ int mt76_connac_mcu_uni_add_dev(struct mt76_phy *phy,
|
|||
len = enable ? sizeof(dev_req) : sizeof(basic_req);
|
||||
|
||||
err = mt76_mcu_send_msg(dev, cmd, data, len, true);
|
||||
if (err && cmd == MCU_UNI_CMD(BSS_INFO_UPDATE))
|
||||
err = mt76_connac_mcu_bss_deact_err(dev, err, enable);
|
||||
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
|
|
@ -1239,7 +1242,11 @@ int mt76_connac_mcu_uni_add_dev(struct mt76_phy *phy,
|
|||
data = enable ? (void *)&basic_req : (void *)&dev_req;
|
||||
len = enable ? sizeof(basic_req) : sizeof(dev_req);
|
||||
|
||||
return mt76_mcu_send_msg(dev, cmd, data, len, true);
|
||||
err = mt76_mcu_send_msg(dev, cmd, data, len, true);
|
||||
if (err && cmd == MCU_UNI_CMD(BSS_INFO_UPDATE))
|
||||
err = mt76_connac_mcu_bss_deact_err(dev, err, enable);
|
||||
|
||||
return err;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mt76_connac_mcu_uni_add_dev);
|
||||
|
||||
|
|
|
|||
|
|
@ -1906,6 +1906,29 @@ mt76_connac_mcu_get_wlan_idx(struct mt76_dev *dev, struct mt76_wcid *wcid,
|
|||
}
|
||||
}
|
||||
|
||||
#define MT76_CONNAC_MCU_STATUS_WLAN_FAILURE 0xc0000001
|
||||
|
||||
static inline int
|
||||
mt76_connac_mcu_bss_deact_err(struct mt76_dev *mdev, int err, bool enable)
|
||||
{
|
||||
if (err != (int)MT76_CONNAC_MCU_STATUS_WLAN_FAILURE)
|
||||
return err;
|
||||
|
||||
/* Ignore wlan_failure state false alarm when deactivating an
|
||||
* inactive network. It does not harm the firmware state.
|
||||
*/
|
||||
if (!enable) {
|
||||
dev_dbg(mdev->dev,
|
||||
"ignore wlan_failure when bss is deactivated\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
dev_warn(mdev->dev,
|
||||
"wlan_failure when bss is activated\n");
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
struct sk_buff *
|
||||
__mt76_connac_mcu_alloc_sta_req(struct mt76_dev *dev, struct mt76_vif_link *mvif,
|
||||
struct mt76_wcid *wcid, int len);
|
||||
|
|
|
|||
|
|
@ -2837,6 +2837,7 @@ int mt7925_mcu_add_bss_info_sta(struct mt792x_phy *phy,
|
|||
struct mt792x_bss_conf *mconf = mt792x_link_conf_to_mconf(link_conf);
|
||||
struct mt792x_dev *dev = phy->dev;
|
||||
struct sk_buff *skb;
|
||||
int err;
|
||||
|
||||
skb = __mt7925_mcu_alloc_bss_req(&dev->mt76, &mconf->mt76,
|
||||
MT7925_BSS_UPDATE_MAX_SIZE);
|
||||
|
|
@ -2862,8 +2863,9 @@ int mt7925_mcu_add_bss_info_sta(struct mt792x_phy *phy,
|
|||
mt7925_mcu_bss_mbssid_tlv(skb, link_conf, enable);
|
||||
}
|
||||
|
||||
return mt76_mcu_skb_send_msg(&dev->mt76, skb,
|
||||
MCU_UNI_CMD(BSS_INFO_UPDATE), true);
|
||||
err = mt76_mcu_skb_send_msg(&dev->mt76, skb,
|
||||
MCU_UNI_CMD(BSS_INFO_UPDATE), true);
|
||||
return mt76_connac_mcu_bss_deact_err(&dev->mt76, err, enable);
|
||||
}
|
||||
|
||||
int mt7925_mcu_add_bss_info(struct mt792x_phy *phy,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user