mac80211: ath11k: sync with ath-next
[openwrt/staging/wigyori.git] / package / kernel / mac80211 / patches / ath11k / 0026-wifi-ath11k-fix-Tx-power-value-during-active-CAC.patch
diff --git a/package/kernel/mac80211/patches/ath11k/0026-wifi-ath11k-fix-Tx-power-value-during-active-CAC.patch b/package/kernel/mac80211/patches/ath11k/0026-wifi-ath11k-fix-Tx-power-value-during-active-CAC.patch
new file mode 100644 (file)
index 0000000..79c1d73
--- /dev/null
@@ -0,0 +1,43 @@
+From 77f1ee6fd8b6e470f721d05a2e269039d5cafcb7 Mon Sep 17 00:00:00 2001
+From: Aditya Kumar Singh <quic_adisi@quicinc.com>
+Date: Tue, 3 Oct 2023 17:26:54 +0300
+Subject: [PATCH] wifi: ath11k: fix Tx power value during active CAC
+
+Tx power is fetched from firmware's pdev stats. However, during active
+CAC, firmware does not fill the current Tx power and sends the max
+initialised value filled during firmware init. If host sends this power
+to user space, this is wrong since in certain situations, the Tx power
+could be greater than the max allowed by the regulatory. Hence, host
+should not be fetching the Tx power during an active CAC.
+
+Fix this issue by returning -EAGAIN error so that user space knows that there's
+no valid value available.
+
+Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1
+
+Fixes: 9a2aa68afe3d ("wifi: ath11k: add get_txpower mac ops")
+Signed-off-by: Aditya Kumar Singh <quic_adisi@quicinc.com>
+Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
+Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
+Link: https://lore.kernel.org/r/20230912051857.2284-4-quic_adisi@quicinc.com
+---
+ drivers/net/wireless/ath/ath11k/mac.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+--- a/drivers/net/wireless/ath/ath11k/mac.c
++++ b/drivers/net/wireless/ath/ath11k/mac.c
+@@ -9060,6 +9060,14 @@ static int ath11k_mac_op_get_txpower(str
+       if (ar->state != ATH11K_STATE_ON)
+               goto err_fallback;
++      /* Firmware doesn't provide Tx power during CAC hence no need to fetch
++       * the stats.
++       */
++      if (test_bit(ATH11K_CAC_RUNNING, &ar->dev_flags)) {
++              mutex_unlock(&ar->conf_mutex);
++              return -EAGAIN;
++      }
++
+       req_param.pdev_id = ar->pdev->pdev_id;
+       req_param.stats_id = WMI_REQUEST_PDEV_STAT;