]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
wifi: ath12k: Block radio bring-up in FTM mode
authorAaradhana Sahu <aaradhana.sahu@oss.qualcomm.com>
Mon, 30 Jun 2025 03:15:02 +0000 (08:45 +0530)
committerJeff Johnson <jeff.johnson@oss.qualcomm.com>
Mon, 7 Jul 2025 22:34:49 +0000 (15:34 -0700)
Ensure that all radios remain down when the driver operates in Factory
Test Mode (FTM). Reject any userspace attempts to bring up an
interface in this mode.

Currently, the driver allows userspace to bring up the interface even
though it operates in FTM mode, which violates FTM constraints and
leads to FTM command failures.

Hence, block the radio start when the driver is in FTM mode. Also,
remove ath12k_ftm_mode check from ath12k_drain_tx() because FTM mode
check is already handled in the caller function
(ath12k_mac_op_start()).

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

Fixes: 3bc374cbc49e ("wifi: ath12k: add factory test mode support")
Signed-off-by: Aaradhana Sahu <aaradhana.sahu@oss.qualcomm.com>
Reviewed-by: Vasanthakumar Thiagarajan <vasanthakumar.thiagarajan@oss.qualcomm.com>
Link: https://patch.msgid.link/20250630031502.8902-1-aaradhana.sahu@oss.qualcomm.com
Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
drivers/net/wireless/ath/ath12k/mac.c

index b2cf3abfe390d4df1f818edbe071e9de0fb19d6d..50a474f8bc2265ce9d2538c5f45b6f9c8f41416d 100644 (file)
@@ -9101,14 +9101,9 @@ err:
 
 static void ath12k_drain_tx(struct ath12k_hw *ah)
 {
-       struct ath12k *ar = ah->radio;
+       struct ath12k *ar;
        int i;
 
-       if (ath12k_ftm_mode) {
-               ath12k_err(ar->ab, "fail to start mac operations in ftm mode\n");
-               return;
-       }
-
        lockdep_assert_wiphy(ah->hw->wiphy);
 
        for_each_ar(ah, ar, i)
@@ -9121,6 +9116,9 @@ static int ath12k_mac_op_start(struct ieee80211_hw *hw)
        struct ath12k *ar;
        int ret, i;
 
+       if (ath12k_ftm_mode)
+               return -EPERM;
+
        lockdep_assert_wiphy(hw->wiphy);
 
        ath12k_drain_tx(ah);