static void
 mt7996_mcu_sta_eht_tlv(struct sk_buff *skb, struct ieee80211_sta *sta)
 {
+       struct mt7996_sta *msta = (struct mt7996_sta *)sta->drv_priv;
+       struct ieee80211_vif *vif = container_of((void *)msta->vif,
+                                                struct ieee80211_vif, drv_priv);
        struct ieee80211_eht_mcs_nss_supp *mcs_map;
        struct ieee80211_eht_cap_elem_fixed *elem;
        struct sta_rec_eht *eht;
        eht->phy_cap = cpu_to_le64(*(u64 *)elem->phy_cap_info);
        eht->phy_cap_ext = cpu_to_le64(elem->phy_cap_info[8]);
 
-       if (sta->deflink.bandwidth == IEEE80211_STA_RX_BW_20)
-               memcpy(eht->mcs_map_bw20, &mcs_map->only_20mhz, sizeof(eht->mcs_map_bw20));
+       if (vif->type != NL80211_IFTYPE_STATION &&
+           (sta->deflink.he_cap.he_cap_elem.phy_cap_info[0] &
+            (IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_IN_2G |
+             IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_80MHZ_IN_5G |
+             IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G |
+             IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G)) == 0) {
+               memcpy(eht->mcs_map_bw20, &mcs_map->only_20mhz,
+                      sizeof(eht->mcs_map_bw20));
+               return;
+       }
+
        memcpy(eht->mcs_map_bw80, &mcs_map->bw._80, sizeof(eht->mcs_map_bw80));
        memcpy(eht->mcs_map_bw160, &mcs_map->bw._160, sizeof(eht->mcs_map_bw160));
        memcpy(eht->mcs_map_bw320, &mcs_map->bw._320, sizeof(eht->mcs_map_bw320));