mirror of
https://github.com/openwrt/openwrt.git
synced 2025-01-15 09:19:57 +00:00
323e249ce8
This updates mac80211 to version 6.1.97-1. This code is based on Linux 6.1.97 and contains all fixes included in the upstream wireless subsystem from that kernel version. This includes many bugfixes and also some security fixes. The removed patches are already integrated in upstream Linux 6.1.97 or in backports. The following patches were integrated in upstream Linux: ath11k/0013-wifi-ath11k-synchronize-ath11k_mac_he_gi_to_nl80211_.patch ath11k/0035-wifi-ath11k-Use-platform_get_irq-to-get-the-interrup.patch ath11k/0036-wifi-ath11k-fix-SAC-bug-on-peer-addition-with-sta-ba.patch ath11k/0047-wifi-ath11k-fix-deinitialization-of-firmware-resourc.patch ath11k/0053-wifi-ath11k-fix-writing-to-unintended-memory-region.patch ath11k/0060-wifi-ath11k-Ignore-frags-from-uninitialized-peer-in-.patch ath11k/0065-wifi-ath11k-fix-tx-status-reporting-in-encap-offload.patch ath11k/0067-wifi-ath11k-Fix-SKB-corruption-in-REO-destination-ri.patch ath11k/0069-wifi-ath11k-fix-registration-of-6Ghz-only-phy-withou.patch ath11k/0080-wifi-ath11k-add-support-default-regdb-while-searchin.patch ath11k/0085-wifi-ath11k-fix-memory-leak-in-WMI-firmware-stats.patch ath11k/0086-wifi-ath11k-Add-missing-check-for-ioremap.patch ath11k/0096-wifi-ath11k-fix-boot-failure-with-one-MSI-vector.patch subsys/337-wifi-mac80211-fix-race-condition-on-enabling-fast-xm.patch The following patches were integrated in upstream backports: ath11k/901-wifi-ath11k-pci-fix-compilation-in-5.16-and-older.patch build/080-resv_start_op.patch build/110-backport_napi_build_skb.patch The following files are missing in backports, we do not have to remove them any more. Some were already missing before some were removed in this update: include/linux/cordic.h include/linux/crc8.h include/linux/eeprom_93cx6.h include/linux/wl12xx.h include/net/ieee80211.h backport-include/linux/bcm47xx_nvram.h include/linux/ath9k_platform.h include/net/bluetooth/ backports ships a dummy Mediatek wed header for older kernel versions. We backported the feature in our kernel, remove the dummy header: backport-include/linux/soc/mediatek/mtk_wed.h Remove header files for subsystems used form the mainline kernel: include/trace/events/qrtr.h include/net/rsi_91x.h backport-include/linux/platform_data/brcmnand.h Link: https://github.com/openwrt/openwrt/pull/15827 Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
102 lines
4.2 KiB
Diff
102 lines
4.2 KiB
Diff
From 8b4d2f080afbd4280ecca0f4b3ceea943a7a86d0 Mon Sep 17 00:00:00 2001
|
|
From: Manikanta Pubbisetty <quic_mpubbise@quicinc.com>
|
|
Date: Thu, 23 Mar 2023 11:39:13 +0530
|
|
Subject: [PATCH] wifi: ath11k: Optimize 6 GHz scan time
|
|
|
|
Currently, time taken to scan all supported channels on WCN6750
|
|
is ~8 seconds and connection time is almost 10 seconds. WCN6750
|
|
supports three Wi-Fi bands (i.e., 2.4/5/6 GHz) and the numbers of
|
|
channels for scan come around ~100 channels (default case).
|
|
Since the chip doesn't have support for DBS (Dual Band Simultaneous),
|
|
scans cannot be parallelized resulting in longer scan times.
|
|
|
|
Among the 100 odd channels, ~60 channels are in 6 GHz band. Therefore,
|
|
optimizing the scan for 6 GHz channels will bring down the overall
|
|
scan time.
|
|
|
|
WCN6750 firmware has support to scan a 6 GHz channel based on co-located
|
|
AP information i.e., RNR IE which is found in the legacy 2.4/5 GHz scan
|
|
results. When a scan request with all supported channel list is enqueued
|
|
to the firmware, then based on WMI_SCAN_CHAN_FLAG_SCAN_ONLY_IF_RNR_FOUND
|
|
scan channel flag, firmware will scan only those 6 GHz channels for which
|
|
RNR IEs are found in the legacy scan results.
|
|
|
|
In the proposed design, based on NL80211_SCAN_FLAG_COLOCATED_6GHZ scan
|
|
flag, driver will set the WMI_SCAN_CHAN_FLAG_SCAN_ONLY_IF_RNR_FOUND flag
|
|
for non-PSC channels. Since there is high probability to find 6 GHz APs
|
|
on PSC channels, these channels are always scanned. Only non-PSC channels
|
|
are selectively scanned based on cached RNR information from the legacy
|
|
scan results.
|
|
|
|
If NL80211_SCAN_FLAG_COLOCATED_6GHZ is not set in the scan flags,
|
|
then scan will happen on all supported channels (default behavior).
|
|
|
|
With these optimizations, scan time is improved by 1.5-1.8 seconds on
|
|
WCN6750. Similar savings have been observed on WCN6855.
|
|
|
|
Tested-on: WCN6750 hw1.0 AHB WLAN.MSL.1.0.1-00887-QCAMSLSWPLZ-1
|
|
Tested-on: WCN6855 hw2.1 PCI WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3.6510.16
|
|
|
|
Signed-off-by: Manikanta Pubbisetty <quic_mpubbise@quicinc.com>
|
|
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
|
Link: https://lore.kernel.org/r/20230323060913.10097-1-quic_mpubbise@quicinc.com
|
|
---
|
|
drivers/net/wireless/ath/ath11k/mac.c | 25 +++++++++++++++++++++++--
|
|
drivers/net/wireless/ath/ath11k/wmi.h | 4 ++++
|
|
2 files changed, 27 insertions(+), 2 deletions(-)
|
|
|
|
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
|
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
|
@@ -3816,8 +3816,29 @@ static int ath11k_mac_op_hw_scan(struct
|
|
goto exit;
|
|
}
|
|
|
|
- for (i = 0; i < arg->num_chan; i++)
|
|
- arg->chan_list[i] = req->channels[i]->center_freq;
|
|
+ for (i = 0; i < arg->num_chan; i++) {
|
|
+ if (test_bit(WMI_TLV_SERVICE_SCAN_CONFIG_PER_CHANNEL,
|
|
+ ar->ab->wmi_ab.svc_map)) {
|
|
+ arg->chan_list[i] =
|
|
+ u32_encode_bits(req->channels[i]->center_freq,
|
|
+ WMI_SCAN_CONFIG_PER_CHANNEL_MASK);
|
|
+
|
|
+ /* If NL80211_SCAN_FLAG_COLOCATED_6GHZ is set in scan
|
|
+ * flags, then scan all PSC channels in 6 GHz band and
|
|
+ * those non-PSC channels where RNR IE is found during
|
|
+ * the legacy 2.4/5 GHz scan.
|
|
+ * If NL80211_SCAN_FLAG_COLOCATED_6GHZ is not set,
|
|
+ * then all channels in 6 GHz will be scanned.
|
|
+ */
|
|
+ if (req->channels[i]->band == NL80211_BAND_6GHZ &&
|
|
+ req->flags & NL80211_SCAN_FLAG_COLOCATED_6GHZ &&
|
|
+ !cfg80211_channel_is_psc(req->channels[i]))
|
|
+ arg->chan_list[i] |=
|
|
+ WMI_SCAN_CH_FLAG_SCAN_ONLY_IF_RNR_FOUND;
|
|
+ } else {
|
|
+ arg->chan_list[i] = req->channels[i]->center_freq;
|
|
+ }
|
|
+ }
|
|
}
|
|
|
|
if (req->flags & NL80211_SCAN_FLAG_RANDOM_ADDR) {
|
|
--- a/drivers/net/wireless/ath/ath11k/wmi.h
|
|
+++ b/drivers/net/wireless/ath/ath11k/wmi.h
|
|
@@ -2100,6 +2100,7 @@ enum wmi_tlv_service {
|
|
|
|
/* The second 128 bits */
|
|
WMI_MAX_EXT_SERVICE = 256,
|
|
+ WMI_TLV_SERVICE_SCAN_CONFIG_PER_CHANNEL = 265,
|
|
WMI_TLV_SERVICE_REG_CC_EXT_EVENT_SUPPORT = 281,
|
|
WMI_TLV_SERVICE_BIOS_SAR_SUPPORT = 326,
|
|
|
|
@@ -3249,6 +3250,9 @@ struct wmi_start_scan_cmd {
|
|
#define WMI_SCAN_DWELL_MODE_SHIFT 21
|
|
#define WMI_SCAN_FLAG_EXT_PASSIVE_SCAN_START_TIME_ENHANCE 0x00000800
|
|
|
|
+#define WMI_SCAN_CONFIG_PER_CHANNEL_MASK GENMASK(19, 0)
|
|
+#define WMI_SCAN_CH_FLAG_SCAN_ONLY_IF_RNR_FOUND BIT(20)
|
|
+
|
|
enum {
|
|
WMI_SCAN_DWELL_MODE_DEFAULT = 0,
|
|
WMI_SCAN_DWELL_MODE_CONSERVATIVE = 1,
|