From nobody Wed Feb 11 13:29:12 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id ACD61280CE7 for ; Wed, 28 May 2025 11:24:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748431469; cv=none; b=cDJl+OTvKTFAqgWm5d0WbmwTxIPMrM6mcbeDRmEZuOWaSzcEFS7UepwRhbv1KlkQgndcl8MMdD/Rmg2LbTu5+K/BZb88N9iqJAVvByOl/kDr9SnRB0lheMX4Xt/QGXmg5Y2/1lpfAGc79pu83f+jlPaO8UBA4ONEBzGVFI4Xl0g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748431469; c=relaxed/simple; bh=vrEY9Tt8fYsWzGDFdSSai835U/fsc0iQ9IABFncLMos=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=OxZPZDh2gVGtjzd9SHix3x2/jcaq6K5ar36cAaMOa7aBxQ0x6ydxeXVPpqVJQF1bn8Fw8kI+KOlTyqNrAWinAO9GzEmlW2UBHXixg14qwI6pdApXnFjWLbZxfeTEGLM1+5XA5Nbiie7O63rq46TIjQW486oWIDpoz3NIIju8uAw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=XMewpPd2; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="XMewpPd2" Received: from pps.filterd (m0279873.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54S8knHo019648 for ; Wed, 28 May 2025 11:24:26 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= c6aM7WJ6bbAAgKf+qbF5aXJsLwsNSN7sBgN05z3YZ6E=; b=XMewpPd22mtVCp8G dzG2e9Z0C8mgTNg+B/T3/6x2g64S00h27M2kEJ+ltooJlW2fj2IyP9QCo1WIKA0l Q/i5AJbAfsgouRYpp4aXkMNwDnSubkzkz4n5klSwQCWUHgCQWkFiLLch84zPflIJ B5UpMZ2X6BOirW5gD0t3Vaa+fnxqvlDCMlsRI1VvOwxN8PXvVWKxhmJNmwdYU58Z +tNnGvf1wO/QXVqAyftHUgdXi8Zqx/uqNZV9CnrlxIxdRz1/xP57JnPpYWRSeMCp ctUlh6wM88J1ifUpQUHWpKOuXA7Cx0OrE32ELdF9AdGDDyAKkBxtEzzLDsad1fGt crzetw== Received: from mail-pj1-f69.google.com (mail-pj1-f69.google.com [209.85.216.69]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 46u3fqa7dp-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Wed, 28 May 2025 11:24:26 +0000 (GMT) Received: by mail-pj1-f69.google.com with SMTP id 98e67ed59e1d1-311b6d25278so1650645a91.3 for ; Wed, 28 May 2025 04:24:26 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748431465; x=1749036265; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=c6aM7WJ6bbAAgKf+qbF5aXJsLwsNSN7sBgN05z3YZ6E=; b=pnSFcF7bfJeoh2UCojX0XehhNO4dGxgNO0k5wks2v9EWHO5ZK+jRidOR5DupkzusVX Fx1v4T4dUdymjn2rLbPsKzbwk0GVQrcdhSJZuKJldJBVa21LfgeTUIkdjDkR6vfzDbx3 ErOGspUcORtnSaOEtONWWsFWDTWp5A28Xrg04GMPTx1t7NPss4Sxc5k6rSymmZFx3xdM MMuHdqINC3xrYC0mE3nw+5308ngXzDFHHWVed4Aj6/isX6KFPHoSnqKu8u2H9t5YRkSV rU0ep5qwK+tC+IV2mt5GA/txvN2kWvqNYglyi+qsXNqPqT5ovxpL3r35yV6YdWRylXL2 EQzA== X-Forwarded-Encrypted: i=1; AJvYcCVcQXGraSDtxTbhaaOrI53XEBlhlJT/iJ97C8xHWMmV7EOSLyNRKPFXdvUqIjwuGZNtp9Wh0m6G24dP2zo=@vger.kernel.org X-Gm-Message-State: AOJu0YzWbFkjOBU/rK9wZUO+mEekkVuGVDd8djJN6lz4l/r48l2L9tSX /4RPdIDN55QiRXLAk1nb9mnzPMDVU3rLfkGeBtuKuyF9RUaL2LwpbcqcFFVE5shm2Upbjx7VQuo CgWyezR2XEhXetYlroTvq6tB8QHAB1THIGU6iPkhLvdxcrgjyXk5UzNreT/c0zIA5pws= X-Gm-Gg: ASbGncsZPJ08S01DiYjevQT9Mwy/Ox0V9afkZGJKPQ666xbUEIjJvYSEb3VMwv/fvP5 qCJGlYbBSMQukUaPyEgKnjSSS/zEf3jYH5cjjpCMFXkqeJ8fmGJjahqj+yFOo+8FtoPlWfaChH8 k0UxaFeUv3hTKFz65foV5vGNtbrTMchkUsLCUJNwqlY7MNRfw/ftWkxAkCTeHbz9OMxl+hCdGFk W2KBkvl+TppW2cL//JDJ+uQEUfs4IJr4/rTSqYzUv10SxmzlZ87bC9MgdosQVR6+RwHipni4Uen Bv/c79rivSDEYuVDRU8jUut0Qo8DeMyq9jyH3JwvRYATt8wzZVXxWxGq90AUrHQl8CCHh2E5uHa +4HXBFuLmxN2mPY9EZ99VMOah0l6+A0zfVf6g X-Received: by 2002:a17:90b:33cc:b0:2fe:8282:cb9d with SMTP id 98e67ed59e1d1-311100da6acmr24059550a91.28.1748431464800; Wed, 28 May 2025 04:24:24 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHYQkdCLHGDGzXmFuRyTueS+eLR+h+ITlJR4vzTTCJx1bCvNNmc74AQv9AprFZgGuC+FEkPJw== X-Received: by 2002:a17:90b:33cc:b0:2fe:8282:cb9d with SMTP id 98e67ed59e1d1-311100da6acmr24059513a91.28.1748431464289; Wed, 28 May 2025 04:24:24 -0700 (PDT) Received: from hu-adisi-blr.qualcomm.com (blr-bdr-fw-01_GlobalNAT_AllZones-Outside.qualcomm.com. [103.229.18.19]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-311e9b668ffsm954665a91.20.2025.05.28.04.24.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 28 May 2025 04:24:23 -0700 (PDT) From: Aditya Kumar Singh Date: Wed, 28 May 2025 16:54:00 +0530 Subject: [PATCH ath-next 1/2] wifi: ath12k: handle WMI event for real noise floor calculation Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250528-support_real_noise_floor-v1-1-04507bd3bc76@oss.qualcomm.com> References: <20250528-support_real_noise_floor-v1-0-04507bd3bc76@oss.qualcomm.com> In-Reply-To: <20250528-support_real_noise_floor-v1-0-04507bd3bc76@oss.qualcomm.com> To: Jeff Johnson Cc: linux-wireless@vger.kernel.org, ath12k@lists.infradead.org, linux-kernel@vger.kernel.org, Raj Kumar Bhagat , Aditya Kumar Singh X-Mailer: b4 0.14.2 X-Proofpoint-GUID: 4ccdjZ59DWFexQVutlpCo63kYjXG24Dj X-Proofpoint-ORIG-GUID: 4ccdjZ59DWFexQVutlpCo63kYjXG24Dj X-Authority-Analysis: v=2.4 cv=X8FSKHTe c=1 sm=1 tr=0 ts=6836f26a cx=c_pps a=vVfyC5vLCtgYJKYeQD43oA==:117 a=Ou0eQOY4+eZoSc0qltEV5Q==:17 a=IkcTkHD0fZMA:10 a=dt9VzEwgFbYA:10 a=COk6AnOGAAAA:8 a=EUspDBNiAAAA:8 a=Ep9LWTjdhutGVinXlyQA:9 a=QEXdDO2ut3YA:10 a=rl5im9kqc5Lf4LNbBjHf:22 a=TjNXssC_j7lpFel5tvFf:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTI4MDEwMCBTYWx0ZWRfX5lVLJhtrrKMC iNHF5u2gilaOArOi6ZB8l3qxnKToPNvW0rNh1mvXqi4wOtakcS4dy4yk+EYhfD0k2cS0PjKNdvq K5wwZxWb7HNrG2+lTGhShFjWoKwZPNNzqil6apylpX/biqMMrYnyXkxUxtQD0fvoZyr0qaJQ1aO EVLuuZY4rubfKNuv0eYjOJ7epDVWZfj2TBbtC7Wkc1VNmLFh7tMZL7fD2nL1XXthCKUQ8p42o9K S5CWJXeHIbJVA5NxeZ+g2Kfe2R8FZlrHVhUgELo+XIYbYtkIV/Lxs6FfoIutgNPjbhiviX+dXdt B08H3YC9NNfxulv51E3DxMXXDT5hD11YHZrJhjfYN16NTF12pBR6nU9l4iOg2+ggk8EB4H6HMyD tUERBvx4M1oHB3HvsXe5eb9YQawaXtNw/ccG0sedDGnzvPQO8uPcOPVOFNIXaCH60ikU08c0 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40 definitions=2025-05-28_05,2025-05-27_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 suspectscore=0 phishscore=0 bulkscore=0 mlxlogscore=999 mlxscore=0 clxscore=1015 priorityscore=1501 spamscore=0 adultscore=0 malwarescore=0 lowpriorityscore=0 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505160000 definitions=main-2505280100 From: Raj Kumar Bhagat At present, the ATH12K_DEFAULT_NOISE_FLOOR (-95) is used to calculate RSSI value, providing an estimated noise floor value. Consequently, the RSSI value is also approximate. This works but however, using actual noise floor value will enable the reporting of the true RSSI value. The firmware possesses the necessary data to determine the actual noise floor. This data is provided to the host via the WMI event WMI_PDEV_RSSI_DBM_CONVERSION_PARAMS_INFO_EVENTID, which includes the runtime parameters needed for calculating the real noise floor in dBm. This event is triggered by the firmware during channel changes, temperature offset adjustments, and hardware chainmask modifications. The individual TLVs may not always be present in each event. For instance, temperature information might only appear if there is a change in offset due to temperature variation. Add support to handle and parse this WMI event. Use the received values to calculate and store the noise floor value. A subsequent change will use this noise floor value in the actual RSSI calculation. Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.4.1-00199-QCAHKSWPL_SILICONZ-1 Signed-off-by: Raj Kumar Bhagat Co-developed-by: Aditya Kumar Singh Signed-off-by: Aditya Kumar Singh --- drivers/net/wireless/ath/ath12k/core.h | 17 +++ drivers/net/wireless/ath/ath12k/mac.c | 4 + drivers/net/wireless/ath/ath12k/wmi.c | 226 +++++++++++++++++++++++++++++= ++++ drivers/net/wireless/ath/ath12k/wmi.h | 42 ++++++ 4 files changed, 289 insertions(+) diff --git a/drivers/net/wireless/ath/ath12k/core.h b/drivers/net/wireless/= ath/ath12k/core.h index 941db6e49d6eaeb03783f7714d433259d887820b..c98193413d2283f0fa7c5cf6a5e= 4fbe82c928c31 100644 --- a/drivers/net/wireless/ath/ath12k/core.h +++ b/drivers/net/wireless/ath/ath12k/core.h @@ -665,6 +665,15 @@ struct ath12k_per_peer_tx_stats { bool is_ampdu; }; =20 +struct ath12k_pdev_rssi_offsets { + s32 temp_offset; + s8 min_nf_dbm; + /* Cache the sum here to avoid calculating it every time in hot path + * noise_floor =3D min_nf_dbm + temp_offset + */ + s32 noise_floor; +}; + #define ATH12K_FLUSH_TIMEOUT (5 * HZ) #define ATH12K_VDEV_DELETE_TIMEOUT_HZ (5 * HZ) =20 @@ -814,6 +823,7 @@ struct ath12k { unsigned long last_tx_power_update; =20 s8 max_allowed_tx_power; + struct ath12k_pdev_rssi_offsets rssi_info; }; =20 struct ath12k_hw { @@ -1454,4 +1464,11 @@ static inline struct ath12k_base *ath12k_ag_to_ab(st= ruct ath12k_hw_group *ag, return ag->ab[device_id]; } =20 +static inline s32 ath12k_pdev_get_noise_floor(struct ath12k *ar) +{ + lockdep_assert_held(&ar->data_lock); + + return ar->rssi_info.noise_floor; +} + #endif /* _CORE_H_ */ diff --git a/drivers/net/wireless/ath/ath12k/mac.c b/drivers/net/wireless/a= th/ath12k/mac.c index 88b59f3ff87af8b48cb3fafcd364fd9ced4ff197..8ff470749f14545d1c726cc1dc2= 6880e129277fa 100644 --- a/drivers/net/wireless/ath/ath12k/mac.c +++ b/drivers/net/wireless/ath/ath12k/mac.c @@ -11898,6 +11898,10 @@ static int ath12k_mac_setup_register(struct ath12k= *ar, ar->max_num_stations =3D ath12k_core_get_max_station_per_radio(ar->ab); ar->max_num_peers =3D ath12k_core_get_max_peers_per_radio(ar->ab); =20 + ar->rssi_info.min_nf_dbm =3D ATH12K_DEFAULT_NOISE_FLOOR; + ar->rssi_info.temp_offset =3D 0; + ar->rssi_info.noise_floor =3D ar->rssi_info.min_nf_dbm + ar->rssi_info.te= mp_offset; + return 0; } =20 diff --git a/drivers/net/wireless/ath/ath12k/wmi.c b/drivers/net/wireless/a= th/ath12k/wmi.c index 60e2444fe08cefa39ae218d07eb9736d2a0c982b..e07f1e46ba418a0583a0feaa711= ada7b6cd193e2 100644 --- a/drivers/net/wireless/ath/ath12k/wmi.c +++ b/drivers/net/wireless/ath/ath12k/wmi.c @@ -8711,6 +8711,229 @@ static void ath12k_wmi_process_tpc_stats(struct ath= 12k_base *ab, } #endif =20 +static int +ath12k_wmi_rssi_dbm_conv_info_evt_subtlv_parser(struct ath12k_base *ab, + u16 tag, u16 len, + const void *ptr, void *data) +{ + const struct ath12k_wmi_rssi_dbm_conv_temp_info_params *temp_info; + const struct ath12k_wmi_rssi_dbm_conv_info_params *param_info; + struct ath12k_wmi_rssi_dbm_conv_info_arg *rssi_info =3D data; + struct ath12k_wmi_rssi_dbm_conv_param_arg param_arg; + s32 nf_hw_dbm[ATH12K_MAX_NUM_NF_HW_DBM]; + u8 num_20mhz_segments; + s8 min_nf, *nf_ptr; + int i, j; + + switch (tag) { + case WMI_TAG_RSSI_DBM_CONVERSION_PARAMS_INFO: + if (len < sizeof(*param_info)) { + ath12k_warn(ab, + "RSSI dbm conv subtlv 0x%x invalid len %d rcvd", + tag, len); + return -EINVAL; + } + + param_info =3D ptr; + + param_arg.curr_bw =3D le32_to_cpu(param_info->curr_bw); + param_arg.curr_rx_chainmask =3D le32_to_cpu(param_info->curr_rx_chainmas= k); + + /* The received array is actually a 2D byte-array for per chain, + * per 20MHz subband. Convert to 2D byte-array + */ + nf_ptr =3D ¶m_arg.nf_hw_dbm[0][0]; + + for (i =3D 0; i < ATH12K_MAX_NUM_NF_HW_DBM; i++) { + nf_hw_dbm[i] =3D a_sle32_to_cpu(param_info->nf_hw_dbm[i]); + + for (j =3D 0; j < 4; j++) { + *nf_ptr =3D (nf_hw_dbm[i] >> (j * 8)) & 0xFF; + nf_ptr++; + } + } + + switch (param_arg.curr_bw) { + case WMI_CHAN_WIDTH_20: + num_20mhz_segments =3D 1; + break; + case WMI_CHAN_WIDTH_40: + num_20mhz_segments =3D 2; + break; + case WMI_CHAN_WIDTH_80: + num_20mhz_segments =3D 4; + break; + case WMI_CHAN_WIDTH_160: + num_20mhz_segments =3D 8; + break; + case WMI_CHAN_WIDTH_320: + num_20mhz_segments =3D 16; + break; + default: + ath12k_warn(ab, "Invalid current bandwidth %d in RSSI dbm event", + param_arg.curr_bw); + /* In error case, still consider the primary 20 MHz segment since + * that would be much better than instead of dropping the whole + * event + */ + num_20mhz_segments =3D 1; + } + + min_nf =3D ATH12K_DEFAULT_NOISE_FLOOR; + + for (i =3D 0; i < ATH12K_MAX_NUM_ANTENNA; i++) { + if (!(param_arg.curr_rx_chainmask & BIT(i))) + continue; + + for (j =3D 0; j < num_20mhz_segments; j++) { + if (param_arg.nf_hw_dbm[i][j] < min_nf) + min_nf =3D param_arg.nf_hw_dbm[i][j]; + } + } + + rssi_info->min_nf_dbm =3D min_nf; + rssi_info->nf_dbm_present =3D true; + break; + case WMI_TAG_RSSI_DBM_CONVERSION_TEMP_OFFSET_INFO: + if (len < sizeof(*temp_info)) { + ath12k_warn(ab, + "RSSI dbm conv subtlv 0x%x invalid len %d rcvd", + tag, len); + return -EINVAL; + } + + temp_info =3D ptr; + rssi_info->temp_offset =3D a_sle32_to_cpu(temp_info->offset); + rssi_info->temp_offset_present =3D true; + break; + default: + ath12k_dbg(ab, ATH12K_DBG_WMI, + "Unknown subtlv 0x%x in RSSI dbm conversion event\n", tag); + } + + return 0; +} + +static int +ath12k_wmi_rssi_dbm_conv_info_event_parser(struct ath12k_base *ab, + u16 tag, u16 len, + const void *ptr, void *data) +{ + int ret =3D 0; + + switch (tag) { + case WMI_TAG_RSSI_DBM_CONVERSION_PARAMS_INFO_FIXED_PARAM: + /* Fixed param is already processed*/ + break; + case WMI_TAG_ARRAY_STRUCT: + /* len 0 is expected for array of struct when there + * is no content of that type inside that tlv + */ + if (len =3D=3D 0) + return 0; + + ret =3D ath12k_wmi_tlv_iter(ab, ptr, len, + ath12k_wmi_rssi_dbm_conv_info_evt_subtlv_parser, + data); + break; + default: + ath12k_dbg(ab, ATH12K_DBG_WMI, + "Received invalid tag 0x%x for RSSI dbm conv info event\n", + tag); + break; + } + + return ret; +} + +static int +ath12k_wmi_rssi_dbm_conv_info_process_fixed_param(struct ath12k_base *ab, = u8 *ptr, + size_t len, int *pdev_id) +{ + struct ath12k_wmi_rssi_dbm_conv_info_fixed_params *fixed_param; + const struct wmi_tlv *tlv; + u16 tlv_tag; + + if (len < (sizeof(*fixed_param) + TLV_HDR_SIZE)) { + ath12k_warn(ab, "invalid RSSI dbm conv event size %zu\n", len); + return -EINVAL; + } + + tlv =3D (struct wmi_tlv *)ptr; + tlv_tag =3D le32_get_bits(tlv->header, WMI_TLV_TAG); + ptr +=3D sizeof(*tlv); + + if (tlv_tag !=3D WMI_TAG_RSSI_DBM_CONVERSION_PARAMS_INFO_FIXED_PARAM) { + ath12k_warn(ab, "RSSI dbm conv event received without fixed param tlv\n"= ); + return -EINVAL; + } + + fixed_param =3D (struct ath12k_wmi_rssi_dbm_conv_info_fixed_params *)ptr; + *pdev_id =3D le32_to_cpu(fixed_param->pdev_id); + + return 0; +} + +static void +ath12k_wmi_update_rssi_offsets(struct ath12k *ar, + struct ath12k_wmi_rssi_dbm_conv_info_arg *rssi_info) +{ + struct ath12k_pdev_rssi_offsets *info =3D &ar->rssi_info; + + lockdep_assert_held(&ar->data_lock); + + if (rssi_info->temp_offset_present) + info->temp_offset =3D rssi_info->temp_offset; + + if (rssi_info->nf_dbm_present) + info->min_nf_dbm =3D rssi_info->min_nf_dbm; + + info->noise_floor =3D info->min_nf_dbm + info->temp_offset; +} + +static void +ath12k_wmi_rssi_dbm_conversion_params_info_event(struct ath12k_base *ab, + struct sk_buff *skb) +{ + struct ath12k_wmi_rssi_dbm_conv_info_arg rssi_info; + struct ath12k *ar; + s32 noise_floor; + u32 pdev_id; + int ret; + + ret =3D ath12k_wmi_rssi_dbm_conv_info_process_fixed_param(ab, skb->data, = skb->len, + &pdev_id); + if (ret) { + ath12k_warn(ab, "failed to parse fixed param in RSSI dbm conv event: %d\= n", + ret); + return; + } + + rcu_read_lock(); + ar =3D ath12k_mac_get_ar_by_pdev_id(ab, pdev_id); + /* If pdev is not active, ignore the event */ + if (!ar) + goto out_unlock; + + ret =3D ath12k_wmi_tlv_iter(ab, skb->data, skb->len, + ath12k_wmi_rssi_dbm_conv_info_event_parser, + &rssi_info); + if (ret) { + ath12k_warn(ab, "unable to parse RSSI dbm conversion event\n"); + goto out_unlock; + } + + spin_lock_bh(&ar->data_lock); + ath12k_wmi_update_rssi_offsets(ar, &rssi_info); + noise_floor =3D ath12k_pdev_get_noise_floor(ar); + spin_unlock_bh(&ar->data_lock); + + ath12k_dbg(ab, ATH12K_DBG_WMI, + "RSSI noise floor updated, new value is %d dbm\n", noise_floor); +out_unlock: + rcu_read_unlock(); +} + static void ath12k_wmi_op_rx(struct ath12k_base *ab, struct sk_buff *skb) { struct wmi_cmd_hdr *cmd_hdr; @@ -8842,6 +9065,9 @@ static void ath12k_wmi_op_rx(struct ath12k_base *ab, = struct sk_buff *skb) case WMI_11D_NEW_COUNTRY_EVENTID: ath12k_reg_11d_new_cc_event(ab, skb); break; + case WMI_PDEV_RSSI_DBM_CONVERSION_PARAMS_INFO_EVENTID: + ath12k_wmi_rssi_dbm_conversion_params_info_event(ab, skb); + break; /* add Unsupported events (rare) here */ case WMI_TBTTOFFSET_EXT_UPDATE_EVENTID: case WMI_PEER_OPER_MODE_CHANGE_EVENTID: diff --git a/drivers/net/wireless/ath/ath12k/wmi.h b/drivers/net/wireless/a= th/ath12k/wmi.h index ac18f75e04492b62594acb159e3b43b81bd6c392..f0da8bc76390be85a5ba2f79bbb= ddf07eb465f73 100644 --- a/drivers/net/wireless/ath/ath12k/wmi.h +++ b/drivers/net/wireless/ath/ath12k/wmi.h @@ -734,6 +734,8 @@ enum wmi_tlv_event_id { WMI_SERVICE_READY_EXT2_EVENTID, WMI_PDEV_GET_HALPHY_CAL_STATUS_EVENTID =3D WMI_SERVICE_READY_EXT2_EVENTID + 4, + WMI_PDEV_RSSI_DBM_CONVERSION_PARAMS_INFO_EVENTID =3D + WMI_PDEV_GET_HALPHY_CAL_STATUS_EVENTID + 5, WMI_VDEV_START_RESP_EVENTID =3D WMI_TLV_CMD(WMI_GRP_VDEV), WMI_VDEV_STOPPED_EVENTID, WMI_VDEV_INSTALL_KEY_COMPLETE_EVENTID, @@ -1991,6 +1993,9 @@ enum wmi_tlv_tag { WMI_TAG_PDEV_SET_BIOS_SAR_TABLE_CMD =3D 0x3D8, WMI_TAG_PDEV_SET_BIOS_GEO_TABLE_CMD =3D 0x3D9, WMI_TAG_PDEV_SET_BIOS_INTERFACE_CMD =3D 0x3FB, + WMI_TAG_RSSI_DBM_CONVERSION_PARAMS_INFO_FIXED_PARAM =3D 0x427, + WMI_TAG_RSSI_DBM_CONVERSION_PARAMS_INFO, + WMI_TAG_RSSI_DBM_CONVERSION_TEMP_OFFSET_INFO, WMI_TAG_HALPHY_CTRL_PATH_CMD_FIXED_PARAM =3D 0x442, WMI_TAG_HALPHY_CTRL_PATH_EVENT_FIXED_PARAM, WMI_TAG_MAX @@ -5997,6 +6002,43 @@ struct wmi_vdev_set_tpc_power_cmd { */ } __packed; =20 +#define ATH12K_MAX_20MHZ_SEGMENTS 16 +#define ATH12K_MAX_NUM_ANTENNA 8 +#define ATH12K_MAX_NUM_NF_HW_DBM 32 + +struct ath12k_wmi_rssi_dbm_conv_info_fixed_params { + __le32 pdev_id; +} __packed; + +struct ath12k_wmi_rssi_dbm_conv_info_params { + __le32 curr_bw; + __le32 curr_rx_chainmask; + __le32 xbar_config; + a_sle32 xlna_bypass_offset; + a_sle32 xlna_bypass_threshold; + a_sle32 nf_hw_dbm[ATH12K_MAX_NUM_NF_HW_DBM]; +} __packed; + +struct ath12k_wmi_rssi_dbm_conv_temp_info_params { + a_sle32 offset; +} __packed; + +struct ath12k_wmi_rssi_dbm_conv_param_arg { + u32 curr_bw; + u32 curr_rx_chainmask; + u32 xbar_config; + s32 xlna_bypass_offset; + s32 xlna_bypass_threshold; + s8 nf_hw_dbm[ATH12K_MAX_NUM_ANTENNA][ATH12K_MAX_20MHZ_SEGMENTS]; +}; + +struct ath12k_wmi_rssi_dbm_conv_info_arg { + bool temp_offset_present; + s32 temp_offset; + bool nf_dbm_present; + s8 min_nf_dbm; +}; + void ath12k_wmi_init_qcn9274(struct ath12k_base *ab, struct ath12k_wmi_resource_config_arg *config); void ath12k_wmi_init_wcn7850(struct ath12k_base *ab, --=20 2.34.1 From nobody Wed Feb 11 13:29:12 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EDC7E281369 for ; Wed, 28 May 2025 11:24:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748431470; cv=none; b=F3dtfIf1WR/IwIqlQZR0XkOqibH47gobLAHfekP/gWIbpeH8C5BYgG1bdRGCMNZ7CO526LkWM8PIKCCagEqLmlrlKGjlY8mYeWcQ5d9Rwd+dIabTSRkFsqWo96MqLkLRSkz0U1DiRpPmfgnmQN1vWf6njqPObivipedw3d0ky20= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748431470; c=relaxed/simple; bh=8/FgW69JxISLwNura1GmuAjcgN5CszRt4gEccDaBRuk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=cWovWJtEKCOX1nRNcPCAiqXdE5t+k+uErj+O923Cc07V1uQVqVdvZP4Giab2nsqOfaAwTfJv1sl4WfKV54Jpicf/KuBV8tgIlCzx2GJrTWcXh4QyOuhuDjFo05UEWdSRkme/gPeT8pamreK/W022RBcNMohfx0ufYLQ23Prk7Gk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=IeKhaX1N; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="IeKhaX1N" Received: from pps.filterd (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54S7eUxW015869 for ; Wed, 28 May 2025 11:24:28 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= XvXVrbB9uCBsREJVHQePUtbTeQk8uumQSbPwvo6V9AQ=; b=IeKhaX1NNWkAKW68 OpWiXPpGYaJ1L27xXREghqeNO/SEV7mQS4gJoOfN7E8E1t5P5LScOs6zxYnFg1BZ /wHnrgkb9Rka10WE5wLFjrHT5EopT2yRegROSQHKe7ZkaUW8ygCbU7/4ryZM7jbk MEd7m54AsbMbNhw6ha8Tfj5izB1F+A2UPOsjFobg8VbvMphr+Due+RQtNX/t99TL wdaSytHoatrlM4BReoaljBCEMHzXfLVJ1mlb5uwllzrULuZLvZzZWFJMImWy0SSM x1wiAK1Z7TBrXPw+BNTIWqA67eyeqdXGh7Cg4McYkw6DVKREqY5WkENPCMJmMls6 YJNAeQ== Received: from mail-pj1-f71.google.com (mail-pj1-f71.google.com [209.85.216.71]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 46u79pa2je-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Wed, 28 May 2025 11:24:28 +0000 (GMT) Received: by mail-pj1-f71.google.com with SMTP id 98e67ed59e1d1-31147652b36so3493725a91.2 for ; Wed, 28 May 2025 04:24:28 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748431467; x=1749036267; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=XvXVrbB9uCBsREJVHQePUtbTeQk8uumQSbPwvo6V9AQ=; b=jLf1Uc41w8DPUOi1kqzWKgBfTEKmjl9OhXvqNt4fes9Qqf4Qj+grBTVisNz+4vZLot KsZBqf+zXCU26L/5lyYiGw143K7odk0FzeItaqAYd7pWec0hKv3Nx9MqfbxnwYlwxZDk evwg0lcQ8yP5gGwomhk8Ns6DcwzjSFcsAccgpgsZ8ZFQkJ44233atHqOScQwq7yGYhvg 0VPE6SYgNKHOsfsRuziRiUDkPM+PzsEBeHrPPOnzx3vvaEeemvoAX8FXxMcZQ9iwZw0X On0kQCfWKHPpLgaw7z+KR1vuWm9NZlWNzY8F706kfa891+rWKFgkrLThPrQWWbgVEwbH E5bw== X-Forwarded-Encrypted: i=1; AJvYcCVxBbzj2K2kBLxArPgADD3OWIuSAc/A22kcn31nlepJ/Zu3sVTV2ocI5qdZkaUchWY2pzSt9LkWxoHMJUQ=@vger.kernel.org X-Gm-Message-State: AOJu0YzEmnVuiZ4oDz92HBOsUwbIFyEYHCczwy1NtF45x6mur+hbhrRn K1AIC3GDIume2iVO7U/OLjrEwbNsTxj+zsTGvMupuFnU2XlJpErnpFuQ3X9p6Mbhlo2byvbZM6k mA5SU/2yhswPURNU+tNudvPDgE6l8/enEm/nKthyG4899LxAmsvRRu+56BdgmVP7MXoc= X-Gm-Gg: ASbGncuZ7LfiGfUW42hjloD4UxGwb7m1DF03NyX2vIlklx/LCW0qBVwBbrKtjPkcXKX B2GqZ0Nb8wf60ja6Vgo8t90N11VtDkDGt38luV8B/J+9pIQjo+zgmbSMLtdMZQgBBmDmXcvW//l UN+4jHdc7RwyoGTqgCOYs2SgSdDj2fSKxCkhtToKm6Qx2g1Yg3AOxn/fSMyGHrrdamiqISut7be Gq87YDxPs3Zu0nXUX712VzV1yl+utIVxImCk6EbWZUOiCuSmfNe2vmbWKXBjSnIk6CwoCbgHdW/ qVsYmuQ9uX5cPOCGCwrOKreK/+yzBvI5QlWDOX2KGcuaEMpamo7obneRDkFIu861umQkAtLC5MH IwqlQ33TdZ/eDPi5i7Zxa6NNFfK3X0tSSdin4 X-Received: by 2002:a17:90b:3911:b0:311:f30b:c18 with SMTP id 98e67ed59e1d1-311f30b0ff9mr1919846a91.4.1748431466938; Wed, 28 May 2025 04:24:26 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHxrSxa32P/OBuY6Gyr562LgyJoCpcIkhZC7dFxORGWAL6m6RyIoGAXyay4CRbLtlLjYQKkYw== X-Received: by 2002:a17:90b:3911:b0:311:f30b:c18 with SMTP id 98e67ed59e1d1-311f30b0ff9mr1919815a91.4.1748431466513; Wed, 28 May 2025 04:24:26 -0700 (PDT) Received: from hu-adisi-blr.qualcomm.com (blr-bdr-fw-01_GlobalNAT_AllZones-Outside.qualcomm.com. [103.229.18.19]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-311e9b668ffsm954665a91.20.2025.05.28.04.24.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 28 May 2025 04:24:26 -0700 (PDT) From: Aditya Kumar Singh Date: Wed, 28 May 2025 16:54:01 +0530 Subject: [PATCH ath-next 2/2] wifi: ath12k: use real noise floor instead of default value Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250528-support_real_noise_floor-v1-2-04507bd3bc76@oss.qualcomm.com> References: <20250528-support_real_noise_floor-v1-0-04507bd3bc76@oss.qualcomm.com> In-Reply-To: <20250528-support_real_noise_floor-v1-0-04507bd3bc76@oss.qualcomm.com> To: Jeff Johnson Cc: linux-wireless@vger.kernel.org, ath12k@lists.infradead.org, linux-kernel@vger.kernel.org, Raj Kumar Bhagat , Aditya Kumar Singh X-Mailer: b4 0.14.2 X-Proofpoint-GUID: vE3XisHtyxZ9X14LJNoe04v1Yxnx54Hi X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTI4MDEwMCBTYWx0ZWRfXzAlGal99KLZ/ EYeWKUUnBY0TSsWvO/8YMBdm6V8SrszGbRpP8YN/LjLyMC82gQ3pGBAavc+oXcUd3EWJFSaBx5Q 7rys6hjIJbczLpo4idAyPQFXNlC+VhyCYNqrL25+TmhGO2qMaI1DYw+0EkqDaHOoQo6aH/xD5cd uQbykOD1m28n8qr7KWx/j51qB4ZxoHtFpMBsVxCxkcW+E8fYYQNn+kCqoadG38c6oQOmv8HBj31 TyXahEDyamwvjtDU5WYNxkXcj2jd+aO8MqPoVhHCenFz0hUdkeE4+q3E6A3oI5H6QxUKX6zQTVP bLUg6kPFcW/RJ7Viepy/yhrzzUC98+m5nbqnNIJvgB8uoGFIJ6FbuckYavnjg/jyl5jY4you+8j yRfVa9XOOHQoYq2uA8p863K+5QZSqlZpeX0SqY/m3fPmA1Srcf6pD28GtJSsqBkPL3FR7p6I X-Authority-Analysis: v=2.4 cv=HNnDFptv c=1 sm=1 tr=0 ts=6836f26c cx=c_pps a=UNFcQwm+pnOIJct1K4W+Mw==:117 a=Ou0eQOY4+eZoSc0qltEV5Q==:17 a=IkcTkHD0fZMA:10 a=dt9VzEwgFbYA:10 a=COk6AnOGAAAA:8 a=EUspDBNiAAAA:8 a=14mRfNIsjSzQyU8rJgwA:9 a=QEXdDO2ut3YA:10 a=uKXjsCUrEbL0IQVhDsJ9:22 a=TjNXssC_j7lpFel5tvFf:22 X-Proofpoint-ORIG-GUID: vE3XisHtyxZ9X14LJNoe04v1Yxnx54Hi X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40 definitions=2025-05-28_05,2025-05-27_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 suspectscore=0 malwarescore=0 lowpriorityscore=0 adultscore=0 priorityscore=1501 mlxlogscore=999 phishscore=0 mlxscore=0 spamscore=0 bulkscore=0 impostorscore=0 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505160000 definitions=main-2505280100 From: Raj Kumar Bhagat ATH12K_DEFAULT_NOISE_FLOOR represents the approximate noise floor value which is used for RSSI calculation. Commit "wifi: ath12k: handle WMI event for real noise floor calculation" added support to get the real noise floor value from the firmware. Add changes to use the real value now instead of the default one. Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.4.1-00199-QCAHKSWPL_SILICONZ-1 Signed-off-by: Raj Kumar Bhagat Co-developed-by: Aditya Kumar Singh Signed-off-by: Aditya Kumar Singh --- drivers/net/wireless/ath/ath12k/dp_mon.c | 7 ++++++- drivers/net/wireless/ath/ath12k/dp_tx.c | 20 ++++++++++++++++---- drivers/net/wireless/ath/ath12k/mac.c | 10 +++++++--- drivers/net/wireless/ath/ath12k/wmi.c | 7 ++++++- 4 files changed, 35 insertions(+), 9 deletions(-) diff --git a/drivers/net/wireless/ath/ath12k/dp_mon.c b/drivers/net/wireles= s/ath/ath12k/dp_mon.c index 28cadc4167f7875e56eb80407b35cb97d4b19ad2..326bcc94ffee6dbdd8e88d0cc63= 561e379b95690 100644 --- a/drivers/net/wireless/ath/ath12k/dp_mon.c +++ b/drivers/net/wireless/ath/ath12k/dp_mon.c @@ -2146,10 +2146,15 @@ static void ath12k_dp_mon_update_radiotap(struct at= h12k *ar, struct ieee80211_rx_status *rxs) { struct ieee80211_supported_band *sband; + s32 noise_floor; u8 *ptr =3D NULL; =20 + spin_lock_bh(&ar->data_lock); + noise_floor =3D ath12k_pdev_get_noise_floor(ar); + spin_unlock_bh(&ar->data_lock); + rxs->flag |=3D RX_FLAG_MACTIME_START; - rxs->signal =3D ppduinfo->rssi_comb + ATH12K_DEFAULT_NOISE_FLOOR; + rxs->signal =3D ppduinfo->rssi_comb + noise_floor; rxs->nss =3D ppduinfo->nss + 1; =20 if (ppduinfo->userstats[ppduinfo->userid].ampdu_present) { diff --git a/drivers/net/wireless/ath/ath12k/dp_tx.c b/drivers/net/wireless= /ath/ath12k/dp_tx.c index b6816b6c2c0400ea8a027ef4527eea307346bc1f..2d4867668d8c53333da41837a0c= 9ff9dd282ed73 100644 --- a/drivers/net/wireless/ath/ath12k/dp_tx.c +++ b/drivers/net/wireless/ath/ath12k/dp_tx.c @@ -554,6 +554,7 @@ ath12k_dp_tx_htt_tx_complete_buf(struct ath12k_base *ab, struct ath12k_vif *ahvif; struct ath12k *ar; struct sk_buff *msdu =3D desc_params->skb; + s32 noise_floor; =20 skb_cb =3D ATH12K_SKB_CB(msdu); info =3D IEEE80211_SKB_CB(msdu); @@ -592,8 +593,13 @@ ath12k_dp_tx_htt_tx_complete_buf(struct ath12k_base *a= b, info->status.ack_signal =3D ts->ack_rssi; =20 if (!test_bit(WMI_TLV_SERVICE_HW_DB2DBM_CONVERSION_SUPPORT, - ab->wmi_ab.svc_map)) - info->status.ack_signal +=3D ATH12K_DEFAULT_NOISE_FLOOR; + ab->wmi_ab.svc_map)) { + spin_lock_bh(&ar->data_lock); + noise_floor =3D ath12k_pdev_get_noise_floor(ar); + spin_unlock_bh(&ar->data_lock); + + info->status.ack_signal +=3D noise_floor; + } =20 info->status.flags =3D IEEE80211_TX_STATUS_ACK_SIGNAL_VALID; } else { @@ -775,6 +781,7 @@ static void ath12k_dp_tx_complete_msdu(struct ath12k *a= r, struct ieee80211_vif *vif; struct ath12k_vif *ahvif; struct sk_buff *msdu =3D desc_params->skb; + s32 noise_floor; =20 if (WARN_ON_ONCE(ts->buf_rel_source !=3D HAL_WBM_REL_SRC_MODULE_TQM)) { /* Must not happen */ @@ -827,8 +834,13 @@ static void ath12k_dp_tx_complete_msdu(struct ath12k *= ar, info->status.ack_signal =3D ts->ack_rssi; =20 if (!test_bit(WMI_TLV_SERVICE_HW_DB2DBM_CONVERSION_SUPPORT, - ab->wmi_ab.svc_map)) - info->status.ack_signal +=3D ATH12K_DEFAULT_NOISE_FLOOR; + ab->wmi_ab.svc_map)) { + spin_lock_bh(&ar->data_lock); + noise_floor =3D ath12k_pdev_get_noise_floor(ar); + spin_unlock_bh(&ar->data_lock); + + info->status.ack_signal +=3D noise_floor; + } =20 info->status.flags =3D IEEE80211_TX_STATUS_ACK_SIGNAL_VALID; } diff --git a/drivers/net/wireless/ath/ath12k/mac.c b/drivers/net/wireless/a= th/ath12k/mac.c index 8ff470749f14545d1c726cc1dc26880e129277fa..e52de62c38e1ce46d3afd6493f1= b51587dd3036f 100644 --- a/drivers/net/wireless/ath/ath12k/mac.c +++ b/drivers/net/wireless/ath/ath12k/mac.c @@ -11042,8 +11042,8 @@ static void ath12k_mac_op_sta_statistics(struct iee= e80211_hw *hw, struct ath12k_sta *ahsta =3D ath12k_sta_to_ahsta(sta); struct ath12k_fw_stats_req_params params =3D {}; struct ath12k_link_sta *arsta; + s8 signal, noise_floor; struct ath12k *ar; - s8 signal; bool db2dbm; =20 lockdep_assert_wiphy(hw->wiphy); @@ -11091,15 +11091,19 @@ static void ath12k_mac_op_sta_statistics(struct i= eee80211_hw *hw, !(ath12k_mac_get_fw_stats(ar, ¶ms))) signal =3D arsta->rssi_beacon; =20 + spin_lock_bh(&ar->data_lock); + noise_floor =3D ath12k_pdev_get_noise_floor(ar); + spin_unlock_bh(&ar->data_lock); + if (signal) { - sinfo->signal =3D db2dbm ? signal : signal + ATH12K_DEFAULT_NOISE_FLOOR; + sinfo->signal =3D db2dbm ? signal : signal + noise_floor; sinfo->filled |=3D BIT_ULL(NL80211_STA_INFO_SIGNAL); } =20 sinfo->signal_avg =3D ewma_avg_rssi_read(&arsta->avg_rssi); =20 if (!db2dbm) - sinfo->signal_avg +=3D ATH12K_DEFAULT_NOISE_FLOOR; + sinfo->signal_avg +=3D noise_floor; =20 sinfo->filled |=3D BIT_ULL(NL80211_STA_INFO_SIGNAL_AVG); } diff --git a/drivers/net/wireless/ath/ath12k/wmi.c b/drivers/net/wireless/a= th/ath12k/wmi.c index e07f1e46ba418a0583a0feaa711ada7b6cd193e2..1287755d6df0c1269f61d91ea06= ed9024e975cf6 100644 --- a/drivers/net/wireless/ath/ath12k/wmi.c +++ b/drivers/net/wireless/ath/ath12k/wmi.c @@ -6427,6 +6427,7 @@ static void ath12k_mgmt_rx_event(struct ath12k_base *= ab, struct sk_buff *skb) struct ieee80211_hdr *hdr; u16 fc; struct ieee80211_supported_band *sband; + s32 noise_floor; =20 if (ath12k_pull_mgmt_rx_params_tlv(ab, skb, &rx_ev) !=3D 0) { ath12k_warn(ab, "failed to extract mgmt rx event"); @@ -6488,7 +6489,11 @@ static void ath12k_mgmt_rx_event(struct ath12k_base = *ab, struct sk_buff *skb) status->freq =3D ieee80211_channel_to_frequency(rx_ev.channel, status->band); =20 - status->signal =3D rx_ev.snr + ATH12K_DEFAULT_NOISE_FLOOR; + spin_lock_bh(&ar->data_lock); + noise_floor =3D ath12k_pdev_get_noise_floor(ar); + spin_unlock_bh(&ar->data_lock); + + status->signal =3D rx_ev.snr + noise_floor; status->rate_idx =3D ath12k_mac_bitrate_to_idx(sband, rx_ev.rate / 100); =20 hdr =3D (struct ieee80211_hdr *)skb->data; --=20 2.34.1