]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: ath11k: Fix failure to connect to a 6 GHz AP
authorQian Zhang <qian.zhang@oss.qualcomm.com>
Thu, 8 Jan 2026 03:46:07 +0000 (11:46 +0800)
committerJeff Johnson <jeff.johnson@oss.qualcomm.com>
Fri, 16 Jan 2026 01:19:36 +0000 (17:19 -0800)
STA fails to connect to a 6 GHz AP with the following errors:
 ath11k_pci 0000:01:00.0: failed to handle chan list with power type 1
 wlp1s0: deauthenticating from c8:a3:e8:dd:41:e3 by local choice (Reason: 3=DEAUTH_LEAVING)

ath11k_reg_handle_chan_list() treats the update as redundant and
returns -EINVAL. That causes the connection attempt to fail.

Avoid unnecessary validation during association. Apply the regulatory
redundant check only when the power type is IEEE80211_REG_UNSET_AP,
which only occurs during core initialization.

Tested-on: WCN6855 hw2.1 PCI WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3.6510.41

Signed-off-by: Qian Zhang <qian.zhang@oss.qualcomm.com>
Reviewed-by: Baochen Qiang <baochen.qiang@oss.qualcomm.com>
Link: https://patch.msgid.link/20260108034607.812885-1-qian.zhang@oss.qualcomm.com
Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
drivers/net/wireless/ath/ath11k/reg.c

index d62a2014315a0856770d4ffd438b5aa32bf4662f..49b79648752cf6a0875c76895ef4df4211e9d03a 100644 (file)
@@ -1,7 +1,7 @@
 // SPDX-License-Identifier: BSD-3-Clause-Clear
 /*
  * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
- * Copyright (c) 2021-2025 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
  */
 #include <linux/rtnetlink.h>
 
@@ -926,8 +926,11 @@ int ath11k_reg_handle_chan_list(struct ath11k_base *ab,
         */
        if (ab->default_regd[pdev_idx] && !ab->new_regd[pdev_idx] &&
            !memcmp((char *)ab->default_regd[pdev_idx]->alpha2,
-                   (char *)reg_info->alpha2, 2))
-               goto retfail;
+                   (char *)reg_info->alpha2, 2) &&
+           power_type == IEEE80211_REG_UNSET_AP) {
+               ath11k_reg_reset_info(reg_info);
+               return 0;
+       }
 
        /* Intersect new rules with default regd if a new country setting was
         * requested, i.e a default regd was already set during initialization