]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
wifi: ath12k: fix TX and RX MCS rate configurations in HE mode
authorPradeep Kumar Chitrapu <quic_pradeepc@quicinc.com>
Thu, 9 Oct 2025 21:16:56 +0000 (14:16 -0700)
committerJeff Johnson <jeff.johnson@oss.qualcomm.com>
Wed, 15 Oct 2025 23:37:54 +0000 (16:37 -0700)
Currently, the TX and RX MCS rate configurations per peer are
reversed when sent to the firmware. As a result, RX MCS rates
are configured for TX, and vice versa. This commit rectifies
the configuration to match what the firmware expects.

Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1

Fixes: d889913205cf ("wifi: ath12k: driver for Qualcomm Wi-Fi 7 devices")
Signed-off-by: Pradeep Kumar Chitrapu <quic_pradeepc@quicinc.com>
Reviewed-by: Vasanthakumar Thiagarajan <vasanthakumar.thiagarajan@oss.qualcomm.com>
Reviewed-by: Baochen Qiang <baochen.qiang@oss.qualcomm.com>
Link: https://patch.msgid.link/20251009211656.2386085-3-quic_pradeepc@quicinc.com
Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
drivers/net/wireless/ath/ath12k/mac.c

index 3037076060760d0f4313da887d4d41e238e0b5fc..d7bc19cea2a649dda20334ed342e9600f58c0778 100644 (file)
@@ -2624,9 +2624,10 @@ static void ath12k_peer_assoc_h_he(struct ath12k *ar,
        switch (link_sta->bandwidth) {
        case IEEE80211_STA_RX_BW_160:
                v = le16_to_cpu(he_cap->he_mcs_nss_supp.rx_mcs_160);
+               v = ath12k_peer_assoc_h_he_limit(v, he_mcs_mask);
                arg->peer_he_rx_mcs_set[WMI_HECAP_TXRX_MCS_NSS_IDX_160] = v;
 
-               v = ath12k_peer_assoc_h_he_limit(v, he_mcs_mask);
+               v = le16_to_cpu(he_cap->he_mcs_nss_supp.tx_mcs_160);
                arg->peer_he_tx_mcs_set[WMI_HECAP_TXRX_MCS_NSS_IDX_160] = v;
 
                arg->peer_he_mcs_count++;
@@ -2636,10 +2637,10 @@ static void ath12k_peer_assoc_h_he(struct ath12k *ar,
 
        default:
                v = le16_to_cpu(he_cap->he_mcs_nss_supp.rx_mcs_80);
+               v = ath12k_peer_assoc_h_he_limit(v, he_mcs_mask);
                arg->peer_he_rx_mcs_set[WMI_HECAP_TXRX_MCS_NSS_IDX_80] = v;
 
                v = le16_to_cpu(he_cap->he_mcs_nss_supp.tx_mcs_80);
-               v = ath12k_peer_assoc_h_he_limit(v, he_mcs_mask);
                arg->peer_he_tx_mcs_set[WMI_HECAP_TXRX_MCS_NSS_IDX_80] = v;
 
                arg->peer_he_mcs_count++;