mt7996_init_bitrate_mask(vif);
 
        mt7996_mcu_add_bss_info(phy, vif, true);
-       mt7996_mcu_add_sta(dev, vif, NULL, true);
+       /* defer the first STA_REC of BMC entry to BSS_CHANGED_BSSID for STA
+        * interface, since firmware only records BSSID when the entry is new
+        */
+       if (vif->type != NL80211_IFTYPE_STATION)
+               mt7996_mcu_add_sta(dev, vif, NULL, true, true);
        rcu_assign_pointer(dev->mt76.wcid[idx], &mvif->sta.wcid);
 
 out:
        struct mt7996_phy *phy = mt7996_hw_phy(hw);
        int idx = msta->wcid.idx;
 
-       mt7996_mcu_add_sta(dev, vif, NULL, false);
+       mt7996_mcu_add_sta(dev, vif, NULL, false, false);
        mt7996_mcu_add_bss_info(phy, vif, false);
 
        if (vif == phy->monitor_vif)
            (changed & BSS_CHANGED_ASSOC && vif->cfg.assoc) ||
            (changed & BSS_CHANGED_BEACON_ENABLED && info->enable_beacon)) {
                mt7996_mcu_add_bss_info(phy, vif, true);
-               mt7996_mcu_add_sta(dev, vif, NULL, true);
+               mt7996_mcu_add_sta(dev, vif, NULL, true,
+                                  !!(changed & BSS_CHANGED_BSSID));
        }
 
        if (changed & BSS_CHANGED_ERP_CTS_PROT)
        mt7996_mac_wtbl_update(dev, idx,
                               MT_WTBL_UPDATE_ADM_COUNT_CLEAR);
 
-       ret = mt7996_mcu_add_sta(dev, vif, sta, true);
+       ret = mt7996_mcu_add_sta(dev, vif, sta, true, true);
        if (ret)
                return ret;
 
        struct mt7996_sta *msta = (struct mt7996_sta *)sta->drv_priv;
        int i;
 
-       mt7996_mcu_add_sta(dev, vif, sta, false);
+       mt7996_mcu_add_sta(dev, vif, sta, false, false);
 
        mt7996_mac_wtbl_update(dev, msta->wcid.idx,
                               MT_WTBL_UPDATE_ADM_COUNT_CLEAR);
 
 }
 
 int mt7996_mcu_add_sta(struct mt7996_dev *dev, struct ieee80211_vif *vif,
-                      struct ieee80211_sta *sta, bool enable)
+                      struct ieee80211_sta *sta, bool enable, bool newly)
 {
        struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv;
        struct mt7996_sta *msta;
                return PTR_ERR(skb);
 
        /* starec basic */
-       mt76_connac_mcu_sta_basic_tlv(&dev->mt76, skb, vif, sta, enable,
-                                     !rcu_access_pointer(dev->mt76.wcid[msta->wcid.idx]));
+       mt76_connac_mcu_sta_basic_tlv(&dev->mt76, skb, vif, sta, enable, newly);
+
        if (!enable)
                goto out;
 
 
 int mt7996_mcu_add_bss_info(struct mt7996_phy *phy,
                            struct ieee80211_vif *vif, int enable);
 int mt7996_mcu_add_sta(struct mt7996_dev *dev, struct ieee80211_vif *vif,
-                      struct ieee80211_sta *sta, bool enable);
+                      struct ieee80211_sta *sta, bool enable, bool newly);
 int mt7996_mcu_add_tx_ba(struct mt7996_dev *dev,
                         struct ieee80211_ampdu_params *params,
                         bool add);