ath11k: enable support of 6G band for WCN6855
cover ath11k: enable support of 6G band for WCN6855
From: Wen Gong <[email protected]>
This depends on the following patches:
Pradeep Kumar Chitrapu:
ath11k: add channel 2 into 6 GHz channel list
ath11k: fix packet drops due to incorrect 6 GHz freq value in rx status
Wen Gong (3):
ath11k: re-enable ht_cap/vht_cap for 5G band for WCN6855
ath11k: enable 6G channels for WCN6855
ath11k: copy cap info of 6G band under WMI_HOST_WLAN_5G_CAP for WCN6855
drivers/net/wireless/ath/ath11k/mac.c | 29 +++++++++++++++++++---------- drivers/net/wireless/ath/ath11k/wmi.c | 22 +++++++++++----------- 2 files changed, 30 insertions(+), 21 deletions(-)
Signature · 7 lines
2.31.1 -- ath11k mailing list [email protected] http://lists.infradead.org/mailman/listinfo/ath11k
PATCH 1/3 ath11k: re-enable ht_cap/vht_cap for 5G band for WCN6855
From: Wen Gong <[email protected]>
WCN6855 uses single_pdev_only, so it supports both the 5G and 6G bands in the same ath11k/pdev and it needs to enable ht_cap/vht_cap for the 5G band, otherwise it will downgrade to non-HT mode for the 5G band. Some chips like QCN9074 only support the 6G band, not the 5G band, and use the flag ar->supports_6ghz which is true to discard ht_cap/vht_cap.
Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-01720.1-QCAHSPSWPL_V1_V2_SILICONZ_LITE-1
--- drivers/net/wireless/ath/ath11k/mac.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/net/wireless/ath/ath11k/mac.c +3 -1
@@ -4491,7 +4491,9 @@ static void ath11k_mac_setup_ht_vht_cap(struct ath11k *ar, rate_cap_rx_chainmask); } -if (cap->supported_bands &WMI_HOST_WLAN_5G_CAP && !ar->supports_6ghz) { +if (cap->supported_bands &WMI_HOST_WLAN_5G_CAP && + (ar->ab->hw_params.single_pdev_only || + !ar->supports_6ghz)) { band = &ar->mac.sbands[NL80211_BAND_5GHZ ]; ht_cap = cap->band[NL80211_BAND_5GHZ ].ht_cap_info;if (ht_cap_info)
Signature · 7 lines
2.25.1 -- ath11k mailing list [email protected] http://lists.infradead.org/mailman/listinfo/ath11k
Re: [PATCH 1/3] ath11k: re-enable ht_cap/vht_cap for 5G band for WCN6855
Quoted 11 lines · Jouni Malinen
WCN6855 uses
single_pdev_only, so it supports both the 5G and 6G bands in the same ath11k/pdev and it needs to enable ht_cap/vht_cap for the 5G band, otherwise it will downgrade to non-HT mode for the 5G band. Some chips like QCN9074 only support the 6G band, not the 5G band, and use the flagar->supports_6ghzwhich is true to discard ht_cap/vht_cap.Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-01720.1-QCAHSPSWPL_V1_V2_SILICONZ_LITE-1
Signed-off-by Wen Gong <[email protected]>Signed-off-by Jouni Malinen <[email protected]>Signed-off-by Kalle Valo <[email protected]>
3 patches applied to ath-next branch of ath.git, thanks.
54f40f552afd ath11k: re-enable ht_cap/vht_cap for 5G band for WCN6855 74bba5e5ba45 ath11k: enable 6G channels for WCN68550f17ae43823b ath11k: copy cap info of 6G band under WMI_HOST_WLAN_5G_CAP for WCN6855
Signature · 9 lines
https://patchwork.kernel.org/project/linux-wireless/patch/[email protected]/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches -- ath11k mailing list [email protected] http://lists.infradead.org/mailman/listinfo/ath11k
Re: [PATCH 1/3] ath11k: re-enable ht_cap/vht_cap for 5G band for WCN6855
In reply to Jouni MalinenQuoted 11 lines · Jouni Malinen
WCN6855 uses
single_pdev_only, so it supports both the 5G and 6G bands in the same ath11k/pdev and it needs to enable ht_cap/vht_cap for the 5G band, otherwise it will downgrade to non-HT mode for the 5G band. Some chips like QCN9074 only support the 6G band, not the 5G band, and use the flagar->supports_6ghzwhich is true to discard ht_cap/vht_cap.Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-01720.1-QCAHSPSWPL_V1_V2_SILICONZ_LITE-1
Signed-off-by Wen Gong <[email protected]>Signed-off-by Jouni Malinen <[email protected]>Signed-off-by Kalle Valo <[email protected]>
3 patches applied to ath-next branch of ath.git, thanks.
54f40f552afd ath11k: re-enable ht_cap/vht_cap for 5G band for WCN6855 74bba5e5ba45 ath11k: enable 6G channels for WCN68550f17ae43823b ath11k: copy cap info of 6G band under WMI_HOST_WLAN_5G_CAP for WCN6855
Signature · 3 lines
https://patchwork.kernel.org/project/linux-wireless/patch/[email protected]/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches
PATCH 2/3 ath11k: enable 6G channels for WCN6855
In reply to Jouni MalinenFrom: Wen Gong <[email protected]>
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
--- drivers/net/wireless/ath/ath11k/mac.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-)
drivers/net/wireless/ath/ath11k/mac.c +16 -9
@@ -7213,7 +7213,7 @@ static int ath11k_mac_setup_channels_rates(struct ath11k *ar, 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;
@@ -7223,6 +7223,7 @@ static int ath11k_mac_setup_channels_rates(struct ath11k *ar, 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,
@@ -7241,11 +7242,11 @@ static int ath11k_mac_setup_channels_rates(struct ath11k *ar,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 ) {
@@ -7265,9 +7266,15 @@ static int ath11k_mac_setup_channels_rates(struct ath11k *ar, 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 ) {
@@ -7290,12 +7297,12 @@ static int ath11k_mac_setup_channels_rates(struct ath11k *ar,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); } }
Signature · 1 line
2.25.1
PATCH 3/3 ath11k: copy cap info of 6G band under WMI_HOST_WLAN_5G_CAP for WCN6855
In reply to Jouni MalinenFrom: Wen Gong <[email protected]>
WCN6855 has 2 phys, one is 2G, another is 5G/6G, so it should copy the cap info of 6G band under the check of WMI_HOST_WLAN_5G_CAP as well as for the 5G band. Some chips like QCN9074 only have 6G, not have 2G and 5G, and this 6G capability is also under WMI_HOST_WLAN_5G_CAP, so this change will not disturb it.
Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-01720.1-QCAHSPSWPL_V1_V2_SILICONZ_LITE-1
--- drivers/net/wireless/ath/ath11k/wmi.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-)
drivers/net/wireless/ath/ath11k/wmi.c +11 -11
@@ -407,18 +407,18 @@ ath11k_pull_mac_phy_cap_svc_ready_ext(struct ath11k_pdev_wmi *wmi_handle, sizeof(u32) * PSOC_HOST_MAX_PHY_SIZE);memcpy (&cap_band->he_ppet, &mac_phy_caps->he_ppet5g,sizeof (struct ath11k_ppe_threshold )); - } - cap_band = &pdev_cap->band[NL80211_BAND_6GHZ ]; - cap_band->max_bw_supported = mac_phy_caps->max_bw_supported_5g; - cap_band->ht_cap_info = mac_phy_caps->ht_cap_info_5g; - cap_band->he_cap_info[0 ] = mac_phy_caps->he_cap_info_5g; - cap_band->he_cap_info[1 ] = mac_phy_caps->he_cap_info_5g_ext; - cap_band->he_mcs = mac_phy_caps->he_supp_mcs_5g; -memcpy (cap_band->he_cap_phy_info, &mac_phy_caps->he_cap_phy_info_5g, -sizeof (u32) *PSOC_HOST_MAX_PHY_SIZE ); -memcpy (&cap_band->he_ppet, &mac_phy_caps->he_ppet5g, -sizeof (struct ath11k_ppe_threshold )); + cap_band = &pdev_cap->band[NL80211_BAND_6GHZ ]; + cap_band->max_bw_supported = mac_phy_caps->max_bw_supported_5g; + cap_band->ht_cap_info = mac_phy_caps->ht_cap_info_5g; + cap_band->he_cap_info[0 ] = mac_phy_caps->he_cap_info_5g; + cap_band->he_cap_info[1 ] = mac_phy_caps->he_cap_info_5g_ext; + cap_band->he_mcs = mac_phy_caps->he_supp_mcs_5g; +memcpy (cap_band->he_cap_phy_info, &mac_phy_caps->he_cap_phy_info_5g, +sizeof (u32) *PSOC_HOST_MAX_PHY_SIZE ); +memcpy (&cap_band->he_ppet, &mac_phy_caps->he_ppet5g, +sizeof (struct ath11k_ppe_threshold )); + }return 0 ; }
Signature · 1 line
2.25.1