mirror of
https://github.com/Telecominfraproject/wlan-ap.git
synced 2025-12-20 10:51:27 +00:00
86 lines
3.5 KiB
Diff
86 lines
3.5 KiB
Diff
From: Sven Eckelmann <sven@narfation.org>
|
|
Date: Fri, 30 Oct 2020 12:02:21 +0100
|
|
Subject: ath11k: Accept new regdomain during initialization
|
|
|
|
The driver is registering as iee80211_hw with its OPs and is then able to
|
|
be called by the upper layer. This for example happens early in the phase
|
|
when the correct regulary domain should be set. But the regulary domain
|
|
will only be accepted when the ATH11K_FLAG_REGISTERED flag was set after
|
|
the ATH11K_QMI_EVENT_FW_READY was processed. So it can easily happen that
|
|
the regularly domain is not correctly processed when
|
|
ATH11K_QMI_EVENT_FW_READY isn't handled immediately:
|
|
|
|
$ iw reg set CA
|
|
$ iw reg get|grep country
|
|
country CA: DFS-FCC
|
|
country CA: DFS-FCC
|
|
country CA: DFS-FCC
|
|
|
|
$ echo "c000000.wifi1" > /sys/bus/platform/drivers/ath11k/unbind
|
|
$ echo "c000000.wifi1" > /sys/bus/platform/drivers/ath11k/bind
|
|
$ iw reg get|grep country
|
|
country CA: DFS-FCC
|
|
country US: DFS-FCC
|
|
country US: DFS-FCC
|
|
|
|
It is therefore essential to accept the regulatory changes without having
|
|
seen the ATH11K_QMI_EVENT_FW_READY. And since there are also potentially
|
|
more problems in ath11k_debug_pdev_create, ath11k_mac_register and
|
|
ath11k_mac_allocate with their use of ATH11K_FLAG_REGISTERED, it is better
|
|
to move the ATH11K_QMI_EVENT_FW_READY. to a new flag.
|
|
|
|
Tested with WLAN.HK.2.4.0.1.r1-00019-QCAHKSWPL_SILICONZ-1
|
|
|
|
Fixes: d5c65159f289 ("ath11k: driver for Qualcomm IEEE 802.11ax devices")
|
|
Signed-off-by: Sven Eckelmann <sven@narfation.org>
|
|
Forwarded: https://lore.kernel.org/all/1829665.1PRlr7bOQj@ripper/
|
|
|
|
diff --git a/drivers/net/wireless/ath/ath11k/core.h b/drivers/net/wireless/ath/ath11k/core.h
|
|
index 63a9f47146fe6dec0942176c04437e7900b05efe..2585518cb1a853bbae3b59af93a3bd3e1310f646 100644
|
|
--- a/drivers/net/wireless/ath/ath11k/core.h
|
|
+++ b/drivers/net/wireless/ath/ath11k/core.h
|
|
@@ -208,7 +208,7 @@ enum ath11k_scan_state {
|
|
|
|
enum ath11k_dev_flags {
|
|
ATH11K_CAC_RUNNING,
|
|
- ATH11K_FLAG_CORE_REGISTERED,
|
|
+ ATH11K_FLAG_FW_READY,
|
|
ATH11K_FLAG_CRASH_FLUSH,
|
|
ATH11K_FLAG_RAW_MODE,
|
|
ATH11K_FLAG_HW_CRYPTO_DISABLED,
|
|
diff --git a/drivers/net/wireless/ath/ath11k/mac.c b/drivers/net/wireless/ath/ath11k/mac.c
|
|
index 9beda3b94da5d28af53eb25c287a24c41bc6285c..6f0d830dc7c946351b642af9444b12ed82bec558 100644
|
|
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
|
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
|
@@ -9385,6 +9385,8 @@ static int __ath11k_mac_register(struct ath11k *ar)
|
|
goto err_free_if_combs;
|
|
}
|
|
|
|
+ set_bit(ATH11K_FLAG_REGISTERED, &ab->dev_flags);
|
|
+
|
|
if (!ab->hw_params.supports_monitor)
|
|
/* There's a race between calling ieee80211_register_hw()
|
|
* and here where the monitor mode is enabled for a little
|
|
diff --git a/drivers/net/wireless/ath/ath11k/qmi.c b/drivers/net/wireless/ath/ath11k/qmi.c
|
|
index f9a8f96e7d31b404d6b47d12cc37a885fb55f764..f3dd4604db2e4c834238e306ad20194f253fe432 100644
|
|
--- a/drivers/net/wireless/ath/ath11k/qmi.c
|
|
+++ b/drivers/net/wireless/ath/ath11k/qmi.c
|
|
@@ -4465,7 +4465,7 @@ static void ath11k_qmi_driver_event_work(struct work_struct *work)
|
|
break;
|
|
case ATH11K_QMI_EVENT_FW_READY:
|
|
clear_bit(ATH11K_FLAG_QMI_FAIL, &ab->dev_flags);
|
|
- if (test_bit(ATH11K_FLAG_REGISTERED, &ab->dev_flags)) {
|
|
+ if (test_bit(ATH11K_FLAG_FW_READY, &ab->dev_flags)) {
|
|
ath11k_hal_dump_srng_stats(ab);
|
|
queue_work(ab->workqueue, &ab->restart_work);
|
|
break;
|
|
@@ -4487,7 +4487,7 @@ static void ath11k_qmi_driver_event_work(struct work_struct *work)
|
|
}
|
|
|
|
ath11k_core_qmi_firmware_ready(ab);
|
|
- set_bit(ATH11K_FLAG_REGISTERED, &ab->dev_flags);
|
|
+ set_bit(ATH11K_FLAG_FW_READY, &ab->dev_flags);
|
|
}
|
|
|
|
break;
|