static int
 __mt7615_mcu_add_sta(struct mt76_phy *phy, struct ieee80211_vif *vif,
-                    struct ieee80211_sta *sta, bool enable, int cmd)
+                    struct ieee80211_sta *sta, bool enable, int cmd,
+                    bool offload_fw)
 {
        struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv;
        struct mt76_sta_cmd_info info = {
                .sta = sta,
                .vif = vif,
+               .offload_fw = offload_fw,
                .enable = enable,
                .cmd = cmd,
        };
                   struct ieee80211_sta *sta, bool enable)
 {
        return __mt7615_mcu_add_sta(phy->mt76, vif, sta, enable,
-                                   MCU_EXT_CMD_STA_REC_UPDATE);
+                                   MCU_EXT_CMD_STA_REC_UPDATE, false);
 }
 
 static int
                       struct ieee80211_sta *sta, bool enable)
 {
        return __mt7615_mcu_add_sta(phy->mt76, vif, sta, enable,
-                                   MCU_UNI_CMD_STA_REC_UPDATE);
+                                   MCU_UNI_CMD_STA_REC_UPDATE, true);
 }
 
 static int
 
        if (IS_ERR(skb))
                return PTR_ERR(skb);
 
-       mt76_connac_mcu_sta_basic_tlv(skb, info->vif, info->sta, info->enable);
-       if (info->enable && info->sta)
-               mt76_connac_mcu_sta_tlv(phy, skb, info->sta, info->vif,
-                                       info->rcpi);
+       if (info->sta || !info->offload_fw)
+               mt76_connac_mcu_sta_basic_tlv(skb, info->vif, info->sta,
+                                             info->enable);
+       if (info->sta && info->enable)
+               mt76_connac_mcu_sta_tlv(phy, skb, info->sta,
+                                       info->vif, info->rcpi);
 
        sta_wtbl = mt76_connac_mcu_add_tlv(skb, STA_REC_WTBL,
                                           sizeof(struct tlv));