struct ieee80211_sta_vht_cap *vht_cap;
        struct ieee80211_edmg *edmg_cap;
        u32 width, control_freq, cap;
-       bool support_80_80 = false;
+       bool ext_nss_cap, support_80_80 = false;
 
        if (WARN_ON(!cfg80211_chandef_valid(chandef)))
                return false;
        ht_cap = &wiphy->bands[chandef->chan->band]->ht_cap;
        vht_cap = &wiphy->bands[chandef->chan->band]->vht_cap;
        edmg_cap = &wiphy->bands[chandef->chan->band]->edmg_cap;
+       ext_nss_cap = __le16_to_cpu(vht_cap->vht_mcs.tx_highest) &
+                       IEEE80211_VHT_EXT_NSS_BW_CAPABLE;
 
        if (edmg_cap->channels &&
            !cfg80211_edmg_usable(wiphy,
                        (cap & IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ) ||
                        (cap & IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160MHZ &&
                         cap & IEEE80211_VHT_CAP_EXT_NSS_BW_MASK) ||
-                       u32_get_bits(cap, IEEE80211_VHT_CAP_EXT_NSS_BW_MASK) > 1;
+                       (ext_nss_cap &&
+                        u32_get_bits(cap, IEEE80211_VHT_CAP_EXT_NSS_BW_MASK) > 1);
                if (chandef->chan->band != NL80211_BAND_6GHZ && !support_80_80)
                        return false;
                fallthrough;
                cap = vht_cap->cap & IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_MASK;
                if (cap != IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160MHZ &&
                    cap != IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ &&
-                   !(vht_cap->cap & IEEE80211_VHT_CAP_EXT_NSS_BW_MASK))
+                   !(ext_nss_cap &&
+                     (vht_cap->cap & IEEE80211_VHT_CAP_EXT_NSS_BW_MASK)))
                        return false;
                break;
        default: