[PATCH v3] wifi: ath12k: enable 320 MHz bandwidth for 6 GHz band in EHT PHY capability for WCN7850

Jeff Johnson quic_jjohnson at quicinc.com
Mon Aug 28 07:47:20 PDT 2023


On 8/27/2023 9:04 PM, Wen Gong wrote:
> 320 MHz bandwidth is reported only for single PHY mode for WCN7850, get it
> from WMI_HOST_HW_MODE_SINGLE ath12k_wmi_caps_ext_params and report it for
> 6 GHz band.
> 
> After this patch, "iw list" show 320MHz support for WCN7850:

nit: s/320MHz/320 MHz/ to conform to SI

> EHT Iftypes: managed
>          EHT PHY Capabilities: (0xe26f090010768800):
>                  320MHz in 6GHz Supported

unfortunate that 'iw' doesn't conform to SI representation

>          EHT bw=320 MHz, max NSS for MCS 8-9: Rx=0, Tx=0
>          EHT bw=320 MHz, max NSS for MCS 10-11: Rx=0, Tx=0
>          EHT bw=320 MHz, max NSS for MCS 12-13: Rx=0, Tx=0
> 
> Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0-03427-QCAHMTSWPL_V1.0_V2.0_SILICONZ-1.15378.4
> 
> Signed-off-by: Wen Gong <quic_wgong at quicinc.com>
> ---
> v3:
>     1. fix "wmi.c:4199:69: warning: restricted __le32 degrades to integer"
>     2. s/capbility/capability/
>     3. change "u8 support_320mhz" to "u32 support_320mhz"
> 
> v2: change eht_cap_phy_info_5G to eht_cap_phy_info_5ghz.
> 
>   drivers/net/wireless/ath/ath12k/wmi.c | 22 ++++++++++++++++++++--
>   1 file changed, 20 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/net/wireless/ath/ath12k/wmi.c b/drivers/net/wireless/ath/ath12k/wmi.c
> index 9ed33e2d6da0..5f46259cfa2a 100644
> --- a/drivers/net/wireless/ath/ath12k/wmi.c
> +++ b/drivers/net/wireless/ath/ath12k/wmi.c
> @@ -4148,14 +4148,22 @@ static void ath12k_wmi_eht_caps_parse(struct ath12k_pdev *pdev, u32 band,
>   				       __le32 cap_info_internal)
>   {
>   	struct ath12k_band_cap *cap_band = &pdev->cap.band[band];
> +	u32 support_320mhz;
>   	u8 i;
>   
> +	if (band == NL80211_BAND_6GHZ)
> +		support_320mhz = cap_band->eht_cap_phy_info[0] &
> +					IEEE80211_EHT_PHY_CAP0_320MHZ_IN_6GHZ;
> +
>   	for (i = 0; i < WMI_MAX_EHTCAP_MAC_SIZE; i++)
>   		cap_band->eht_cap_mac_info[i] = le32_to_cpu(cap_mac_info[i]);
>   
>   	for (i = 0; i < WMI_MAX_EHTCAP_PHY_SIZE; i++)
>   		cap_band->eht_cap_phy_info[i] = le32_to_cpu(cap_phy_info[i]);
>   
> +	if (band == NL80211_BAND_6GHZ)
> +		cap_band->eht_cap_phy_info[0] |= support_320mhz;
> +
>   	cap_band->eht_mcs_20_only = le32_to_cpu(supp_mcs[0]);
>   	cap_band->eht_mcs_80 = le32_to_cpu(supp_mcs[1]);
>   	if (band != NL80211_BAND_2GHZ) {
> @@ -4177,10 +4185,19 @@ ath12k_wmi_tlv_mac_phy_caps_ext_parse(struct ath12k_base *ab,
>   				      const struct ath12k_wmi_caps_ext_params *caps,
>   				      struct ath12k_pdev *pdev)
>   {
> -	u32 bands;
> +	struct ath12k_band_cap *cap_band;
> +	u32 bands, support_320mhz;
>   	int i;
>   
>   	if (ab->hw_params->single_pdev_only) {
> +		if (caps->hw_mode_id == WMI_HOST_HW_MODE_SINGLE) {
> +			support_320mhz = le32_to_cpu(caps->eht_cap_phy_info_5ghz[0]) &
> +				IEEE80211_EHT_PHY_CAP0_320MHZ_IN_6GHZ;
> +			cap_band = &pdev->cap.band[NL80211_BAND_6GHZ];
> +			cap_band->eht_cap_phy_info[0] |= support_320mhz;
> +			return 0;
> +		}
> +
>   		for (i = 0; i < ab->fw_pdev_count; i++) {
>   			struct ath12k_fw_pdev *fw_pdev = &ab->fw_pdev[i];
>   
> @@ -4236,7 +4253,8 @@ static int ath12k_wmi_tlv_mac_phy_caps_ext(struct ath12k_base *ab, u16 tag,
>   		return -EPROTO;
>   
>   	if (ab->hw_params->single_pdev_only) {
> -		if (ab->wmi_ab.preferred_hw_mode != le32_to_cpu(caps->hw_mode_id))
> +		if (ab->wmi_ab.preferred_hw_mode != le32_to_cpu(caps->hw_mode_id) &&
> +		    caps->hw_mode_id != WMI_HOST_HW_MODE_SINGLE)
>   			return 0;
>   	} else {
>   		for (i = 0; i < ab->num_radios; i++) {
> 
> base-commit: 3f257461ab0ab19806bae2bfde4c3cd88dbf050e




More information about the ath12k mailing list