mirror of
https://github.com/coolsnowwolf/lede.git
synced 2025-04-16 04:13:31 +00:00
99 lines
3.5 KiB
Diff
99 lines
3.5 KiB
Diff
From 74bba5e5ba45d511a944082d76b64cc1849e4c2e Mon Sep 17 00:00:00 2001
|
|
From: Wen Gong <wgong@codeaurora.org>
|
|
Date: Tue, 28 Sep 2021 14:00:43 +0300
|
|
Subject: [PATCH] ath11k: enable 6G channels for WCN6855
|
|
|
|
For some chips such as WCN6855, single_pdev_only is set in struct
|
|
ath11k_hw_params which means ath11k calls ieee80211_register_hw() only
|
|
once and create only one device interface, and that device interface
|
|
supports all 2G/5G/6G channels.
|
|
|
|
ath11k_mac_setup_channels_rates() sets up the channels and it is called
|
|
for each device interface. It is called only once for single_pdev_only,
|
|
and then set up all channels for 2G/5G/6G. The logic of
|
|
ath11k_mac_setup_channels_rates() is not suitable for single_pdev_only,
|
|
it leads to all 6G channels being disabled for the device interface
|
|
which is single_pdev_only such as WCN6855.
|
|
|
|
Add channel frequency checks for the 6G band and enable the 6G channels
|
|
properly based on what is supported by the chip.
|
|
|
|
Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-01720.1-QCAHSPSWPL_V1_V2_SILICONZ_LITE-1
|
|
|
|
Signed-off-by: Wen Gong <wgong@codeaurora.org>
|
|
Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
|
|
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
|
Link: https://lore.kernel.org/r/20210804181217.88751-3-jouni@codeaurora.org
|
|
---
|
|
drivers/net/wireless/ath/ath11k/mac.c | 25 ++++++++++++++++---------
|
|
1 file changed, 16 insertions(+), 9 deletions(-)
|
|
|
|
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
|
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
|
@@ -7322,7 +7322,7 @@ static int ath11k_mac_setup_channels_rat
|
|
u32 supported_bands)
|
|
{
|
|
struct ieee80211_supported_band *band;
|
|
- struct ath11k_hal_reg_capabilities_ext *reg_cap;
|
|
+ struct ath11k_hal_reg_capabilities_ext *reg_cap, *temp_reg_cap;
|
|
void *channels;
|
|
u32 phy_id;
|
|
|
|
@@ -7332,6 +7332,7 @@ static int ath11k_mac_setup_channels_rat
|
|
ATH11K_NUM_CHANS);
|
|
|
|
reg_cap = &ar->ab->hal_reg_cap[ar->pdev_idx];
|
|
+ temp_reg_cap = reg_cap;
|
|
|
|
if (supported_bands & WMI_HOST_WLAN_2G_CAP) {
|
|
channels = kmemdup(ath11k_2ghz_channels,
|
|
@@ -7350,11 +7351,11 @@ static int ath11k_mac_setup_channels_rat
|
|
|
|
if (ar->ab->hw_params.single_pdev_only) {
|
|
phy_id = ath11k_get_phy_id(ar, WMI_HOST_WLAN_2G_CAP);
|
|
- reg_cap = &ar->ab->hal_reg_cap[phy_id];
|
|
+ temp_reg_cap = &ar->ab->hal_reg_cap[phy_id];
|
|
}
|
|
ath11k_mac_update_ch_list(ar, band,
|
|
- reg_cap->low_2ghz_chan,
|
|
- reg_cap->high_2ghz_chan);
|
|
+ temp_reg_cap->low_2ghz_chan,
|
|
+ temp_reg_cap->high_2ghz_chan);
|
|
}
|
|
|
|
if (supported_bands & WMI_HOST_WLAN_5G_CAP) {
|
|
@@ -7374,9 +7375,15 @@ static int ath11k_mac_setup_channels_rat
|
|
band->n_bitrates = ath11k_a_rates_size;
|
|
band->bitrates = ath11k_a_rates;
|
|
ar->hw->wiphy->bands[NL80211_BAND_6GHZ] = band;
|
|
+
|
|
+ if (ar->ab->hw_params.single_pdev_only) {
|
|
+ phy_id = ath11k_get_phy_id(ar, WMI_HOST_WLAN_5G_CAP);
|
|
+ temp_reg_cap = &ar->ab->hal_reg_cap[phy_id];
|
|
+ }
|
|
+
|
|
ath11k_mac_update_ch_list(ar, band,
|
|
- reg_cap->low_5ghz_chan,
|
|
- reg_cap->high_5ghz_chan);
|
|
+ temp_reg_cap->low_5ghz_chan,
|
|
+ temp_reg_cap->high_5ghz_chan);
|
|
}
|
|
|
|
if (reg_cap->low_5ghz_chan < ATH11K_MIN_6G_FREQ) {
|
|
@@ -7399,12 +7406,12 @@ static int ath11k_mac_setup_channels_rat
|
|
|
|
if (ar->ab->hw_params.single_pdev_only) {
|
|
phy_id = ath11k_get_phy_id(ar, WMI_HOST_WLAN_5G_CAP);
|
|
- reg_cap = &ar->ab->hal_reg_cap[phy_id];
|
|
+ temp_reg_cap = &ar->ab->hal_reg_cap[phy_id];
|
|
}
|
|
|
|
ath11k_mac_update_ch_list(ar, band,
|
|
- reg_cap->low_5ghz_chan,
|
|
- reg_cap->high_5ghz_chan);
|
|
+ temp_reg_cap->low_5ghz_chan,
|
|
+ temp_reg_cap->high_5ghz_chan);
|
|
}
|
|
}
|
|
|