diff --git a/mt7603_main.c b/mt7603_main.c index 75c43896..8c464d99 100644 --- a/mt7603_main.c +++ b/mt7603_main.c @@ -224,10 +224,16 @@ mt7603_bss_info_changed(struct ieee80211_hw *hw, struct ieee80211_vif *vif, mutex_lock(&dev->mutex); if (changed & (BSS_CHANGED_ASSOC | BSS_CHANGED_BSSID)) { - mt76_wr(dev, MT_BSSID0(mvif->idx), - get_unaligned_le32(info->bssid)); - mt76_wr(dev, MT_BSSID1(mvif->idx), - get_unaligned_le16(info->bssid + 4)); + if (info->assoc || info->ibss_joined) { + mt76_wr(dev, MT_BSSID0(mvif->idx), + get_unaligned_le32(info->bssid)); + mt76_wr(dev, MT_BSSID1(mvif->idx), + (get_unaligned_le16(info->bssid + 4) | + MT_BSSID1_VALID)); + } else { + mt76_wr(dev, MT_BSSID0(mvif->idx), 0); + mt76_wr(dev, MT_BSSID1(mvif->idx), 0); + } } if (changed & BSS_CHANGED_ERP_SLOT) { diff --git a/mt7603_regs.h b/mt7603_regs.h index 758ab0ae..3a5362d2 100644 --- a/mt7603_regs.h +++ b/mt7603_regs.h @@ -367,6 +367,7 @@ enum { #define MT_BSSID0(idx) MT_WF_RMAC(0x004 + idx * 8) #define MT_BSSID1(idx) MT_WF_RMAC(0x008 + idx * 8) +#define MT_BSSID1_VALID BIT(16) #define MT_MAC_ADDR0(idx) MT_WF_RMAC(0x024 + idx * 8) #define MT_MAC_ADDR1(idx) MT_WF_RMAC(0x028 + idx * 8)