mirror of
https://github.com/Heleguo/lede.git
synced 2025-12-20 21:01:13 +00:00
69 lines
2.2 KiB
Diff
69 lines
2.2 KiB
Diff
From a4146249a33381f41f6d15eaa1797d7ba1820a31 Mon Sep 17 00:00:00 2001
|
|
From: Wen Gong <quic_wgong@quicinc.com>
|
|
Date: Mon, 22 Nov 2021 13:13:58 +0200
|
|
Subject: [PATCH] ath11k: skip sending vdev down for channel switch
|
|
|
|
The ath11k driver currently sends vdev down to the firmware before
|
|
updating the channel context, which is followed by a vdev restart
|
|
command.
|
|
|
|
Sending vdev down is not required before sending a vdev restart,
|
|
because the firmware internally does vdev down when ath11k sends
|
|
a vdev restart command.
|
|
|
|
Firmware will happen crash while channel switch without this change.
|
|
|
|
Hence skip the vdev down command sending when updating the channel
|
|
context and then fix the firmware crash issue.
|
|
|
|
Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01740-QCAHSTSWPLZ_V2_TO_X86-1
|
|
|
|
Signed-off-by: Wen Gong <quic_wgong@quicinc.com>
|
|
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
|
Link: https://lore.kernel.org/r/20211118095901.8271-1-quic_wgong@quicinc.com
|
|
---
|
|
drivers/net/wireless/ath/ath11k/mac.c | 32 +--------------------------
|
|
1 file changed, 1 insertion(+), 31 deletions(-)
|
|
|
|
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
|
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
|
@@ -6467,37 +6467,7 @@ ath11k_mac_update_vif_chan(struct ath11k
|
|
|
|
lockdep_assert_held(&ar->conf_mutex);
|
|
|
|
- for (i = 0; i < n_vifs; i++) {
|
|
- arvif = (void *)vifs[i].vif->drv_priv;
|
|
-
|
|
- if (vifs[i].vif->type == NL80211_IFTYPE_MONITOR)
|
|
- monitor_vif = true;
|
|
-
|
|
- ath11k_dbg(ab, ATH11K_DBG_MAC,
|
|
- "mac chanctx switch vdev_id %i freq %u->%u width %d->%d\n",
|
|
- arvif->vdev_id,
|
|
- vifs[i].old_ctx->def.chan->center_freq,
|
|
- vifs[i].new_ctx->def.chan->center_freq,
|
|
- vifs[i].old_ctx->def.width,
|
|
- vifs[i].new_ctx->def.width);
|
|
-
|
|
- if (WARN_ON(!arvif->is_started))
|
|
- continue;
|
|
-
|
|
- if (WARN_ON(!arvif->is_up))
|
|
- continue;
|
|
-
|
|
- ret = ath11k_wmi_vdev_down(ar, arvif->vdev_id);
|
|
- if (ret) {
|
|
- ath11k_warn(ab, "failed to down vdev %d: %d\n",
|
|
- arvif->vdev_id, ret);
|
|
- continue;
|
|
- }
|
|
-
|
|
- ar->num_started_vdevs--;
|
|
- }
|
|
-
|
|
- /* All relevant vdevs are downed and associated channel resources
|
|
+ /* Associated channel resources of all relevant vdevs
|
|
* should be available for the channel switch now.
|
|
*/
|
|
|