]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
wifi: ath12k: fix the fetching of combined rssi
authorKang Yang <kang.yang@oss.qualcomm.com>
Tue, 22 Jul 2025 09:59:34 +0000 (17:59 +0800)
committerJeff Johnson <jeff.johnson@oss.qualcomm.com>
Thu, 18 Sep 2025 23:43:47 +0000 (16:43 -0700)
Currently, host fetches combined rssi from rssi_comb in struct
hal_rx_phyrx_rssi_legacy_info.

rssi_comb is 8th to 15th bits of the second to last variable.
rssi_comb_ppdu is the 0th to 7th of the last variable.

When bandwidth = 20MHz, rssi_comb = rssi_comb_ppdu. But when bandwidth >
20MHz, rssi_comb < rssi_comb_ppdu because rssi_comb only includes power
of primary 20 MHz while rssi_comb_ppdu includes power of active
RUs/subchannels. So should fetch combined rssi from rssi_comb_ppdu.

Also related macro definitions are too long, rename them.

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

Fixes: d889913205cf ("wifi: ath12k: driver for Qualcomm Wi-Fi 7 devices")
Signed-off-by: Kang Yang <kang.yang@oss.qualcomm.com>
Reviewed-by: Baochen Qiang <baochen.qiang@oss.qualcomm.com>
Reviewed-by: Vasanthakumar Thiagarajan <vasanthakumar.thiagarajan@oss.qualcomm.com>
Link: https://patch.msgid.link/20250722095934.67-4-kang.yang@oss.qualcomm.com
Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
drivers/net/wireless/ath/ath12k/dp_mon.c
drivers/net/wireless/ath/ath12k/hal_rx.h

index e93ede5e6197c07937406bc3530f648dc99d28f5..abd611ac37f06012db3592210b3a64038446cd71 100644 (file)
@@ -1655,18 +1655,18 @@ ath12k_dp_mon_rx_parse_status_tlv(struct ath12k *ar,
                const struct hal_rx_phyrx_rssi_legacy_info *rssi = tlv_data;
 
                info[0] = __le32_to_cpu(rssi->info0);
-               info[1] = __le32_to_cpu(rssi->info1);
+               info[2] = __le32_to_cpu(rssi->info2);
 
                /* TODO: Please note that the combined rssi will not be accurate
                 * in MU case. Rssi in MU needs to be retrieved from
                 * PHYRX_OTHER_RECEIVE_INFO TLV.
                 */
                ppdu_info->rssi_comb =
-                       u32_get_bits(info[1],
-                                    HAL_RX_PHYRX_RSSI_LEGACY_INFO_INFO1_RSSI_COMB);
+                       u32_get_bits(info[2],
+                                    HAL_RX_RSSI_LEGACY_INFO_INFO2_RSSI_COMB_PPDU);
 
                ppdu_info->bw = u32_get_bits(info[0],
-                                            HAL_RX_PHYRX_RSSI_LEGACY_INFO_INFO0_RX_BW);
+                                            HAL_RX_RSSI_LEGACY_INFO_INFO0_RX_BW);
                break;
        }
        case HAL_PHYRX_COMMON_USER_INFO: {
index 801a5f6d3458b6bea99c4a82a87b74a6d3c3f3a4..d1ad7747b82c49250695b5dc4064e306c4df6c12 100644 (file)
@@ -483,15 +483,16 @@ enum hal_rx_ul_reception_type {
        HAL_RECEPTION_TYPE_FRAMELESS
 };
 
-#define HAL_RX_PHYRX_RSSI_LEGACY_INFO_INFO0_RECEPTION  GENMASK(3, 0)
-#define HAL_RX_PHYRX_RSSI_LEGACY_INFO_INFO0_RX_BW      GENMASK(7, 5)
-#define HAL_RX_PHYRX_RSSI_LEGACY_INFO_INFO1_RSSI_COMB  GENMASK(15, 8)
+#define HAL_RX_RSSI_LEGACY_INFO_INFO0_RECEPTION                GENMASK(3, 0)
+#define HAL_RX_RSSI_LEGACY_INFO_INFO0_RX_BW            GENMASK(7, 5)
+#define HAL_RX_RSSI_LEGACY_INFO_INFO1_RSSI_COMB                GENMASK(15, 8)
+#define HAL_RX_RSSI_LEGACY_INFO_INFO2_RSSI_COMB_PPDU   GENMASK(7, 0)
 
 struct hal_rx_phyrx_rssi_legacy_info {
        __le32 info0;
        __le32 rsvd0[39];
        __le32 info1;
-       __le32 rsvd1;
+       __le32 info2;
 } __packed;
 
 #define HAL_RX_MPDU_START_INFO0_PPDU_ID                        GENMASK(31, 16)