wifi: mt76: mt7996: program a link we already hold again

The firmware wants active links removed from the BSSINFO table as the interface
is destroyed, so a link stays registered from its first chanctx assignment until
the interface goes away, and adding one the driver already holds does nothing.
mac80211 hands a non-AP MLD a fresh address whenever it sets a link up, though,
so a link coming back after a failed attempt carries an address the hardware was
never told about, on a BSS that was never revisited: it authenticates from an
address nothing answers, every time, until the interface is torn down for good.

Program the address and the BSS again, the pair the initial add sets up, which
is for a station what mt7996_mcu_mld_link_oper() does for an AP.

Signed-off-by: Felix Fietkau <[email protected]>
This commit is contained in:
Felix Fietkau
2026-08-04 11:40:37 +02:00
parent 4ad4e6a6dc
commit 044081b202
+8 -1
View File
@@ -310,7 +310,14 @@ int mt7996_vif_link_add(struct mt76_phy *mphy, struct ieee80211_vif *vif,
if (vif->type == NL80211_IFTYPE_AP)
return mt7996_mcu_mld_link_oper(dev, link_conf, link,
true);
return 0;
/* update the link address */
ret = mt7996_mcu_add_dev_info(phy, vif, link_conf, mlink, true);
if (ret)
return ret;
return mt7996_mcu_add_bss_info(phy, vif, link_conf, mlink,
msta_link, true);
}
mlink->idx = __ffs64(~dev->mt76.vif_mask);