]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
wifi: ath12k: enable IEEE80211_VHT_EXT_NSS_BW_CAPABLE when NSS ratio is reported
authorWen Gong <quic_wgong@quicinc.com>
Thu, 4 Jun 2026 09:58:31 +0000 (15:28 +0530)
committerJeff Johnson <jeff.johnson@oss.qualcomm.com>
Tue, 9 Jun 2026 13:50:29 +0000 (06:50 -0700)
When firmware reports NSS ratio support, SUPPORTS_VHT_EXT_NSS_BW is enabled in
ath12k. However, IEEE80211_VHT_EXT_NSS_BW_CAPABLE must also be set to make the
advertisement valid.

According to IEEE Std 802.11-2024, Subclause 9.4.2.156.3 (Supported VHT-MCS and
NSS Set subfields), the VHT Extended NSS BW Capable bit indicates whether a STA
is capable of interpreting the Extended NSS BW Support subfield of the VHT
capabilities information field. Advertising extended NSS BW support without
setting this capability bit is therefore invalid.

Without this change, mac80211 detects the inconsistency and logs:

  ieee80211 phy0: copying sband (band 1) due to VHT EXT NSS BW flag

This indicates that mac80211 implicitly aligns IEEE80211_VHT_EXT_NSS_BW_CAPABLE
during ieee80211_register_hw(). Explicitly setting the bit in ath12k avoids this
fixup and ensures capabilities are advertised correctly by the driver.

This change follows the same approach as the existing ath11k fix.
https://lore.kernel.org/all/20211013073704.15888-1-wgong@codeaurora.org/

Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.5-01651-QCAHKSWPL_SILICONZ-1

Fixes: 18ab9d038fad ("wifi: ath12k: add support for 160 MHz bandwidth")
Signed-off-by: Wen Gong <quic_wgong@quicinc.com>
Signed-off-by: Maharaja Kennadyrajan <maharaja.kennadyrajan@oss.qualcomm.com>
Reviewed-by: Rameshkumar Sundaram <rameshkumar.sundaram@oss.qualcomm.com>
Link: https://patch.msgid.link/20260604095831.2674298-1-maharaja.kennadyrajan@oss.qualcomm.com
Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
drivers/net/wireless/ath/ath12k/mac.c

index a6e4b660da81c9075dda50e10ed61ec8127e8089..af354bef5c0d79bfea3e09ec2858500d29052df3 100644 (file)
@@ -8489,6 +8489,10 @@ ath12k_create_vht_cap(struct ath12k *ar, u32 rate_cap_tx_chainmask,
        vht_cap.vht_supported = 1;
        vht_cap.cap = ar->pdev->cap.vht_cap;
 
+       if (ar->pdev->cap.nss_ratio_enabled)
+               vht_cap.vht_mcs.tx_highest |=
+                       cpu_to_le16(IEEE80211_VHT_EXT_NSS_BW_CAPABLE);
+
        ath12k_set_vht_txbf_cap(ar, &vht_cap.cap);
 
        /* 80P80 is not supported */