* [PATCH] wifi: ath10k: fix Bluetooth RX on ASUS QCA6174 when WLAN is down
@ 2026-09-28 14:03 Quentin Strydom
0 siblings, 0 replies; only message in thread
From: Quentin Strydom @ 2026-09-28 14:03 UTC (permalink / raw)
To: Jeff Johnson; +Cc: linux-wireless, ath10k, linux-kernel, Quentin Strydom
On an ASUS QCA6174 PCI device with subsystem ID 1043:8751,
Bluetooth receive sensitivity is severely reduced when the WLAN
interface is left down. This is particularly visible when Ethernet is
used for network connectivity and the WLAN interface is never started.
With WLAN down, a nearby BLE advertiser is received at roughly -95 dBm
instead of the expected -60 dBm. Bringing the WLAN interface up restores
normal Bluetooth sensitivity.
Tracing and register-level testing showed that the QCA6174 warm reset
performed from ath10k_pci_hif_stop() causes the Bluetooth sensitivity
drop. In particular, asserting SOC_RESET_CONTROL_CPU_WARM_RST_MASK
reproduces the bad state. Conversely, asserting SOC_GLOBAL_RESET during
a QCA6174 cold reset restores normal Bluetooth reception.
Perform an additional cold reset after the normal hif_stop safe reset
for the affected ASUS subsystem. Scope the workaround to 1043:8751 to
avoid changing reset behaviour for other QCA6174 and ath10k devices.
The workaround was tested with Bluetooth enabled and disabled during
cold boot, with WLAN left down, through repeated WLAN up/down cycles
while associated to a Wi-Fi access point with traffic. Bluetooth receive
sensitivity remained normal and WLAN could subsequently be started and
stopped normally.
Tested-on: QCA6174 hw3.2 PCI WLAN.RM.4.4.1-00309-
Signed-off-by: Quentin Strydom <qstrydom0@gmail.com>
---
drivers/net/wireless/ath/ath10k/pci.c | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/drivers/net/wireless/ath/ath10k/pci.c b/drivers/net/wireless/ath/ath10k/pci.c
index 335bc7c488e4..4a3c5ce63733 100644
--- a/drivers/net/wireless/ath/ath10k/pci.c
+++ b/drivers/net/wireless/ath/ath10k/pci.c
@@ -2069,10 +2069,20 @@ void ath10k_pci_flush(struct ath10k *ar)
ath10k_pci_buffer_cleanup(ar);
}
+static bool ath10k_pci_needs_bt_cold_reset(struct ath10k_pci *ar_pci)
+{
+ struct pci_dev *pdev = ar_pci->pdev;
+
+ return pdev->device == QCA6174_2_1_DEVICE_ID &&
+ pdev->subsystem_vendor == PCI_VENDOR_ID_ASUSTEK &&
+ pdev->subsystem_device == 0x8751;
+}
+
static void ath10k_pci_hif_stop(struct ath10k *ar)
{
struct ath10k_pci *ar_pci = ath10k_pci_priv(ar);
unsigned long flags;
+ int ret;
ath10k_dbg(ar, ATH10K_DBG_BOOT, "boot hif stop\n");
@@ -2096,6 +2106,14 @@ static void ath10k_pci_hif_stop(struct ath10k *ar)
*/
ath10k_pci_safe_chip_reset(ar);
+ if (ath10k_pci_needs_bt_cold_reset(ar_pci)) {
+ ret = ath10k_pci_cold_reset(ar);
+ if (ret)
+ ath10k_warn(ar,
+ "failed to cold reset after hif stop: %d\n",
+ ret);
+ }
+
ath10k_pci_flush(ar);
spin_lock_irqsave(&ar_pci->ps_lock, flags);
--
2.43.0
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2026-09-28 14:04 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-09-28 14:03 [PATCH] wifi: ath10k: fix Bluetooth RX on ASUS QCA6174 when WLAN is down Quentin Strydom
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®