diff mbox series

[v2] wifi: ath12k: enable 320 MHz bandwidth for 6 GHz band in EHT PHY capbility for WCN7850

Message ID 20230824025432.19406-1-quic_wgong@quicinc.com
State Superseded
Headers show
Series [v2] wifi: ath12k: enable 320 MHz bandwidth for 6 GHz band in EHT PHY capbility for WCN7850 | expand

Commit Message

Wen Gong Aug. 24, 2023, 2:54 a.m. UTC
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:
EHT Iftypes: managed
        EHT PHY Capabilities: (0xe26f090010768800):
                320MHz in 6GHz Supported
        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@quicinc.com>
---
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(-)


base-commit: 3f257461ab0ab19806bae2bfde4c3cd88dbf050e

Comments

Wen Gong Aug. 28, 2023, 6:09 a.m. UTC | #1
On 8/25/2023 3:53 PM, Kalle Valo wrote:
> Wen Gong <quic_wgong@quicinc.com> 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:
>> EHT Iftypes: managed
>>          EHT PHY Capabilities: (0xe26f090010768800):
>>                  320MHz in 6GHz Supported
>>          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@quicinc.com>
>> Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
> New warning:
>
> drivers/net/wireless/ath/ath12k/wmi.c:4199:69: warning: restricted __le32 degrades to integer
>
> Remember to ALWAYS run ath12k-check.
>
> Patch set to Changes Requested.

I found ath12k-check output many logs, about 5000 lines.

And ath12k-check only has one item in CHECKPATCH_IGNORE, it does not 
have the other items which

existed in ath10k-check/ath11k-check, so ath12k-check output many info

"struct  should normally be const"/"networking block comments don't use 
an empty /* line, use /* Comment..."/.

Also it print many "note: in included file ..." by sparse.


May I change ath12k-check with diff below and use "ath12k-check | grep 
-v "note: in included file"" for the patch check?

wgong@wgong-Latitude-E6430:~/opensource/kernel/ath$ ./ath12k-check --version
/home/wgong/opensource/kernel/ath/./ath12k-check:32: DeprecationWarning: 
The distutils package is deprecated and slated for removal in Python 
3.12. Use setuptools or check PEP 632 for potential alternatives
   import distutils.spawn
ath12k-check (md5sum 194c6d6c4bad47f9780fe22541f2f68c)

gcc:            gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
sparse:         0.6.4 (Ubuntu: 0.6.4-2)
checkpatch.pl:  Version: 0.32 (md5sum b169dcb45a7f32bd19b128e08288e9cc)
gtags:          gtags (Global) 6.6.7

wgong@wgong-Latitude-E6430:~/opensource/kernel/ath$ ./ath12k-check | 
grep -v "note: in included file"
/home/wgong/opensource/kernel/ath/./ath12k-check:32: DeprecationWarning: 
The distutils package is deprecated and slated for removal in Python 
3.12. Use setuptools or check PEP 632 for potential alternatives
   import distutils.spawn
drivers/net/wireless/ath/ath12k/wmi.c: In function 
'ath12k_wmi_tlv_mac_phy_caps_ext_parse':
drivers/net/wireless/ath/ath12k/wmi.c:4197:69: warning: restricted 
__le32 degrades to integer
drivers/net/wireless/ath/ath12k/dp_rx.c:2110: space required after that 
close brace '}'

diff --git a/tools/scripts/ath12k/ath12k-check 
b/tools/scripts/ath12k/ath12k-check
index 7112fd9..3035b34 100755
--- a/tools/scripts/ath12k/ath12k-check
+++ b/tools/scripts/ath12k/ath12k-check
@@ -41,10 +41,48 @@ FILTER_REGEXP = r'/ath'

  IGNORE_FILES = []

-CHECKPATCH_IGNORE = [
-    # some find extra parentheses helpful so ignore the warnings
-    'UNNECESSARY_PARENTHESES',
-]
+CHECKPATCH_IGNORE = ['MSLEEP',
+                     'USLEEP_RANGE',
+                     'PRINTK_WITHOUT_KERN_LEVEL',
+
+                     # ath10k does not follow networking comment style
+                     'NETWORKING_BLOCK_COMMENT_STYLE',
+
+                     'LINUX_VERSION_CODE',
+                     'COMPLEX_MACRO',
+                     'PREFER_DEV_LEVEL',
+                     'PREFER_PR_LEVEL',
+                     'COMPARISON_TO_NULL',
+                     'BIT_MACRO',
+                     'CONSTANT_COMPARISON',
+                     'MACRO_WITH_FLOW_CONTROL',
+
+                     # Spams hundreds of lines useless 'struct should
+                     # normally be const' warnings, maybe a bug in
+                     # checkpatch?
+                     'CONST_STRUCT',
+
+                     # TODO: look like valid warnings, investigate
+                     'MACRO_ARG_REUSE',
+                     'OPEN_ENDED_LINE',
+                     'FUNCTION_ARGUMENTS',
+                     'CONFIG_DESCRIPTION',
+                     'ASSIGNMENT_CONTINUATIONS',
+                     'UNNECESSARY_PARENTHESES',
+
+                     # Not sure if these really useful warnings,
+                     # disable for now.
+                     'MACRO_ARG_PRECEDENCE',
+
+                     'BOOL_MEMBER',
+
+                     # TODO: ath11k uses volatile for now, fix it
+                     'VOLATILE',
+
+                     # TODO: document all DT usage in ath11k
+                     'UNDOCUMENTED_DT_STRING',
+                     ]
+

  CHECKPATCH_OPTS = ['--strict', '-q', '--terse', '--no-summary',
                     '--max-line-length=90', '--show-types']

>
diff mbox series

Patch

diff --git a/drivers/net/wireless/ath/ath12k/wmi.c b/drivers/net/wireless/ath/ath12k/wmi.c
index 9ed33e2d6da0..824c5d777ee6 100644
--- a/drivers/net/wireless/ath/ath12k/wmi.c
+++ b/drivers/net/wireless/ath/ath12k/wmi.c
@@ -4148,7 +4148,11 @@  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];
-	u8 i;
+	u8 i, support_320mhz;
+
+	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]);
@@ -4156,6 +4160,9 @@  static void ath12k_wmi_eht_caps_parse(struct ath12k_pdev *pdev, u32 band,
 	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 +4184,20 @@  ath12k_wmi_tlv_mac_phy_caps_ext_parse(struct ath12k_base *ab,
 				      const struct ath12k_wmi_caps_ext_params *caps,
 				      struct ath12k_pdev *pdev)
 {
+	struct ath12k_band_cap *cap_band;
 	u32 bands;
 	int i;
+	u8 support_320mhz;
 
 	if (ab->hw_params->single_pdev_only) {
+		if (caps->hw_mode_id == WMI_HOST_HW_MODE_SINGLE) {
+			support_320mhz = 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++) {