]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: ath12k: fix ATH12K_FLAG_REGISTERED flag handling
authorAditya Kumar Singh <aditya.kumar.singh@oss.qualcomm.com>
Tue, 8 Apr 2025 06:06:32 +0000 (11:36 +0530)
committerJeff Johnson <jeff.johnson@oss.qualcomm.com>
Sat, 12 Apr 2025 04:19:30 +0000 (21:19 -0700)
Commit a5686ae820fa ("wifi: ath12k: move ATH12K_FLAG_REGISTERED handling to
ath12k_mac_register()") relocated the setting of the ATH12K_FLAG_REGISTERED
flag to the ath12k_mac_register() function. However, this function only
accesses the first device (ab) via ag->ab[0], resulting in the flag being
set only for the first device in the group. Similarly,
ath12k_mac_unregister() only unsets the flag for the first device. The flag
should actually be set for all devices in the group to avoid issues during
recovery.

Hence, move setting and clearing of this flag in the function
ath12k_core_hw_group_start() and ath12k_core_hw_group_stop() respectively.

Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00173-QCAHKSWPL_SILICONZ-1
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: a5686ae820fa ("wifi: ath12k: move ATH12K_FLAG_REGISTERED handling to ath12k_mac_register()")
Signed-off-by: Aditya Kumar Singh <aditya.kumar.singh@oss.qualcomm.com>
Reviewed-by: Vasanthakumar Thiagarajan <vasanthakumar.thiagarajan@oss.qualcomm.com>
Link: https://patch.msgid.link/20250408-fix_reboot_issues_with_hw_grouping-v4-4-95e7bf048595@oss.qualcomm.com
Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
drivers/net/wireless/ath/ath12k/core.c
drivers/net/wireless/ath/ath12k/mac.c

index 8a571a615313d2f1190fe9afae02dfd385ede7a3..cb2a99d110d5c9ec2c092fe1a2b776b6265c4126 100644 (file)
@@ -958,6 +958,9 @@ static void ath12k_core_hw_group_stop(struct ath12k_hw_group *ag)
                ab = ag->ab[i];
                if (!ab)
                        continue;
+
+               clear_bit(ATH12K_FLAG_REGISTERED, &ab->dev_flags);
+
                ath12k_core_device_cleanup(ab);
        }
 
@@ -1093,6 +1096,8 @@ core_pdev_create:
 
                mutex_lock(&ab->core_lock);
 
+               set_bit(ATH12K_FLAG_REGISTERED, &ab->dev_flags);
+
                ret = ath12k_core_pdev_create(ab);
                if (ret) {
                        ath12k_err(ab, "failed to create pdev core %d\n", ret);
index bf15104fa54297c28ef98a525292bd934959dac3..7af12733a1ff9eddff09630f604f20d24de8cce0 100644 (file)
@@ -11780,7 +11780,6 @@ void ath12k_mac_mlo_teardown(struct ath12k_hw_group *ag)
 
 int ath12k_mac_register(struct ath12k_hw_group *ag)
 {
-       struct ath12k_base *ab = ag->ab[0];
        struct ath12k_hw *ah;
        int i;
        int ret;
@@ -11793,8 +11792,6 @@ int ath12k_mac_register(struct ath12k_hw_group *ag)
                        goto err;
        }
 
-       set_bit(ATH12K_FLAG_REGISTERED, &ab->dev_flags);
-
        return 0;
 
 err:
@@ -11811,12 +11808,9 @@ err:
 
 void ath12k_mac_unregister(struct ath12k_hw_group *ag)
 {
-       struct ath12k_base *ab = ag->ab[0];
        struct ath12k_hw *ah;
        int i;
 
-       clear_bit(ATH12K_FLAG_REGISTERED, &ab->dev_flags);
-
        for (i = ag->num_hw - 1; i >= 0; i--) {
                ah = ath12k_ag_to_ah(ag, i);
                if (!ah)