]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
wifi: ath11k: fix wrong overriding for VHT Beamformee STS Capability
authorYu Zhang(Yuriy) <quic_yuzha@quicinc.com>
Fri, 24 Jan 2025 07:59:53 +0000 (15:59 +0800)
committerJeff Johnson <jeff.johnson@oss.qualcomm.com>
Mon, 3 Feb 2025 22:43:29 +0000 (14:43 -0800)
Current code in ath11k_mac_set_txbf_conf overrides nsts, which is
incorrect as it confuses nss and nsts. nss is Number of Spatial
Streams,nsts is Number of Space-Time Streams.

As mentioned in Fixes: 55b5ee3357d7, the nss used when acting as a
beamformee in VHT mode should be reported by the firmware and should not
be greater than the number of receiving antennas - 1. The num_rx_chains
related nss rather than nsts.

If STBC is enabled, nsts is greater than nss. About nss are mapped to
nsts, refer to IEEE Std 802.11-2020: 19.3.11.9.2 Space-time block coding
(STBC), Table 19-18—Constellation mapper output to spatial mapper input
for STBC.

Remove wrong overriding for nsts of VHT Beamformee STS Capability,
acting DL MU-MIMO in VHT mode is working properly.

Tested-on: WCN6855 hw2.1 PCI WLAN.HSP.1.1-04479-QCAHSPSWPL_V1_V2_SILICONZ_IOE-1

Fixes: 55b5ee3357d7 ("wifi: ath11k: fix number of VHT beamformee spatial streams")
Signed-off-by: Yu Zhang (Yuriy) <quic_yuzha@quicinc.com>
Reviewed-by: Vasanthakumar Thiagarajan <vasanthakumar.thiagarajan@oss.qualcomm.com>
Link: https://patch.msgid.link/20250124075953.2282354-1-quic_yuzha@quicinc.com
Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
drivers/net/wireless/ath/ath11k/mac.c

index b76c44cdabbc9908bb98996dfa295162cd3ee0d9..586898e5318fa44e2274ad5c2f81c68f4e65efe0 100644 (file)
@@ -5385,8 +5385,6 @@ static int ath11k_mac_set_txbf_conf(struct ath11k_vif *arvif)
        if (vht_cap & (IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE)) {
                nsts = vht_cap & IEEE80211_VHT_CAP_BEAMFORMEE_STS_MASK;
                nsts >>= IEEE80211_VHT_CAP_BEAMFORMEE_STS_SHIFT;
-               if (nsts > (ar->num_rx_chains - 1))
-                       nsts = ar->num_rx_chains - 1;
                value |= SM(nsts, WMI_TXBF_STS_CAP_OFFSET);
        }
 
@@ -5470,9 +5468,6 @@ static void ath11k_set_vht_txbf_cap(struct ath11k *ar, u32 *vht_cap)
 
        /* Enable Beamformee STS Field only if SU BF is enabled */
        if (subfee) {
-               if (nsts > (ar->num_rx_chains - 1))
-                       nsts = ar->num_rx_chains - 1;
-
                nsts <<= IEEE80211_VHT_CAP_BEAMFORMEE_STS_SHIFT;
                nsts &=  IEEE80211_VHT_CAP_BEAMFORMEE_STS_MASK;
                *vht_cap |= nsts;