]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
wifi: ath12k: Correct 6 GHz frequency value in rx status
authorPradeep Kumar Chitrapu <quic_pradeepc@quicinc.com>
Wed, 8 May 2024 17:36:51 +0000 (10:36 -0700)
committerKalle Valo <quic_kvalo@quicinc.com>
Thu, 16 May 2024 08:13:58 +0000 (11:13 +0300)
The frequency in the rx status is currently being filled
incorrectly for the 6 GHz band. The channel number received is
invalid in this case, resulting in packet drops. Fix this
issue by correcting the frequency calculation.

Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1
Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3

Fixes: d889913205cf ("wifi: ath12k: driver for Qualcomm Wi-Fi 7 devices")
Signed-off-by: Pradeep Kumar Chitrapu <quic_pradeepc@quicinc.com>
Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
Link: https://msgid.link/20240508173655.22191-3-quic_pradeepc@quicinc.com
drivers/net/wireless/ath/ath12k/dp_rx.c
drivers/net/wireless/ath/ath12k/wmi.c

index 37205e894afee16d83769e421bdcba88565cde2d..d8998ac3a482db6b8c4532d2269e6050afa0be08 100644 (file)
@@ -2359,8 +2359,10 @@ void ath12k_dp_rx_h_ppdu(struct ath12k *ar, struct hal_rx_desc *rx_desc,
        channel_num = meta_data;
        center_freq = meta_data >> 16;
 
-       if (center_freq >= 5935 && center_freq <= 7105) {
+       if (center_freq >= ATH12K_MIN_6G_FREQ &&
+           center_freq <= ATH12K_MAX_6G_FREQ) {
                rx_status->band = NL80211_BAND_6GHZ;
+               rx_status->freq = center_freq;
        } else if (channel_num >= 1 && channel_num <= 14) {
                rx_status->band = NL80211_BAND_2GHZ;
        } else if (channel_num >= 36 && channel_num <= 173) {
@@ -2378,8 +2380,9 @@ void ath12k_dp_rx_h_ppdu(struct ath12k *ar, struct hal_rx_desc *rx_desc,
                                rx_desc, sizeof(*rx_desc));
        }
 
-       rx_status->freq = ieee80211_channel_to_frequency(channel_num,
-                                                        rx_status->band);
+       if (rx_status->band != NL80211_BAND_6GHZ)
+               rx_status->freq = ieee80211_channel_to_frequency(channel_num,
+                                                                rx_status->band);
 
        ath12k_dp_rx_h_rate(ar, rx_desc, rx_status);
 }
index 3004c7463be99a8ef9712f1fb893ff0050a33b2f..a592b75e5ef3912377eb1ce2ad908e48db4c6def 100644 (file)
@@ -6022,8 +6022,10 @@ static void ath12k_mgmt_rx_event(struct ath12k_base *ab, struct sk_buff *skb)
        if (rx_ev.status & WMI_RX_STATUS_ERR_MIC)
                status->flag |= RX_FLAG_MMIC_ERROR;
 
-       if (rx_ev.chan_freq >= ATH12K_MIN_6G_FREQ) {
+       if (rx_ev.chan_freq >= ATH12K_MIN_6G_FREQ &&
+           rx_ev.chan_freq <= ATH12K_MAX_6G_FREQ) {
                status->band = NL80211_BAND_6GHZ;
+               status->freq = rx_ev.chan_freq;
        } else if (rx_ev.channel >= 1 && rx_ev.channel <= 14) {
                status->band = NL80211_BAND_2GHZ;
        } else if (rx_ev.channel >= 36 && rx_ev.channel <= ATH12K_MAX_5G_CHAN) {
@@ -6044,8 +6046,10 @@ static void ath12k_mgmt_rx_event(struct ath12k_base *ab, struct sk_buff *skb)
 
        sband = &ar->mac.sbands[status->band];
 
-       status->freq = ieee80211_channel_to_frequency(rx_ev.channel,
-                                                     status->band);
+       if (status->band != NL80211_BAND_6GHZ)
+               status->freq = ieee80211_channel_to_frequency(rx_ev.channel,
+                                                             status->band);
+
        status->signal = rx_ev.snr + ATH12K_DEFAULT_NOISE_FLOOR;
        status->rate_idx = ath12k_mac_bitrate_to_idx(sband, rx_ev.rate / 100);