diff mbox series

wifi: ath12k: Add support for parsing 64-bit TLVs

Message ID 20241204071238.948885-1-quic_ppranees@quicinc.com (mailing list archive)
State Superseded
Delegated to: Jeff Johnson
Headers show
Series wifi: ath12k: Add support for parsing 64-bit TLVs | expand

Commit Message

P Praneesh Dec. 4, 2024, 7:12 a.m. UTC
There is mismatch between the format of monitor destination TLVs received
and the expected format by the current implementation. The received TLVs
are in 64-bit format, while the implementation is designed to handle
32-bit TLVs. This leads to incorrect parsing. Fix it by adding support
for parsing 64-bit TLVs.

Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00173-QCAHKSWPL_SILICONZ-1

Signed-off-by: P Praneesh <quic_ppranees@quicinc.com>
---
 drivers/net/wireless/ath/ath12k/dp_mon.c   | 14 +++++++-------
 drivers/net/wireless/ath/ath12k/hal_desc.h |  2 ++
 2 files changed, 9 insertions(+), 7 deletions(-)

Comments

Jeff Johnson Dec. 5, 2024, 4:45 a.m. UTC | #1
On 12/3/2024 11:12 PM, P Praneesh wrote:
> There is mismatch between the format of monitor destination TLVs received
> and the expected format by the current implementation. The received TLVs
> are in 64-bit format, while the implementation is designed to handle
> 32-bit TLVs. This leads to incorrect parsing. Fix it by adding support
> for parsing 64-bit TLVs.
> 
> Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00173-QCAHKSWPL_SILICONZ-1
> 
> Signed-off-by: P Praneesh <quic_ppranees@quicinc.com>
Acked-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
Kalle Valo Dec. 16, 2024, 4:15 p.m. UTC | #2
P Praneesh <quic_ppranees@quicinc.com> writes:

> There is mismatch between the format of monitor destination TLVs received
> and the expected format by the current implementation. The received TLVs
> are in 64-bit format, while the implementation is designed to handle
> 32-bit TLVs. This leads to incorrect parsing. Fix it by adding support
> for parsing 64-bit TLVs.
>
> Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00173-QCAHKSWPL_SILICONZ-1
>
> Signed-off-by: P Praneesh <quic_ppranees@quicinc.com>

What about WCN7850? The commit message mentions nothing about it so I
can only assume that this breaks WCN7850.

Please remember that ath12k is not only a QCN9274 project. If I got 0.01
EUR every time I say that...
P Praneesh Dec. 17, 2024, 9:30 a.m. UTC | #3
On 12/16/2024 9:45 PM, Kalle Valo wrote:
> P Praneesh <quic_ppranees@quicinc.com> writes:
> 
>> There is mismatch between the format of monitor destination TLVs received
>> and the expected format by the current implementation. The received TLVs
>> are in 64-bit format, while the implementation is designed to handle
>> 32-bit TLVs. This leads to incorrect parsing. Fix it by adding support
>> for parsing 64-bit TLVs.
>>
>> Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00173-QCAHKSWPL_SILICONZ-1
>>
>> Signed-off-by: P Praneesh <quic_ppranees@quicinc.com>
> 
> What about WCN7850? The commit message mentions nothing about it so I
> can only assume that this breaks WCN7850.
> 
> Please remember that ath12k is not only a QCN9274 project. If I got 0.01
> EUR every time I say that...
> 
This change is common for WCN7850 and QCN9274. Sure, I will add WCN7850 
tested on tag in v2.
Kalle Valo Dec. 17, 2024, 7:35 p.m. UTC | #4
Praneesh P <quic_ppranees@quicinc.com> writes:

> On 12/16/2024 9:45 PM, Kalle Valo wrote:
>> P Praneesh <quic_ppranees@quicinc.com> writes:
>> 
>>> There is mismatch between the format of monitor destination TLVs received
>>> and the expected format by the current implementation. The received TLVs
>>> are in 64-bit format, while the implementation is designed to handle
>>> 32-bit TLVs. This leads to incorrect parsing. Fix it by adding support
>>> for parsing 64-bit TLVs.
>>>
>>> Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00173-QCAHKSWPL_SILICONZ-1
>>>
>>> Signed-off-by: P Praneesh <quic_ppranees@quicinc.com>
>> What about WCN7850? The commit message mentions nothing about it so
>> I
>> can only assume that this breaks WCN7850.
>> Please remember that ath12k is not only a QCN9274 project. If I got
>> 0.01
>> EUR every time I say that...
>> 
> This change is common for WCN7850 and QCN9274. Sure, I will add
> WCN7850 tested on tag in v2.

I am not exactly looking for a Tested-on tag. What I'm asking is that
people take into account WCN7850 when designing and writing patches
ath12k. For example, is the firmware interface same and similar
functional differences between supported hardware families.
P Praneesh Dec. 18, 2024, 5:06 p.m. UTC | #5
On 12/18/2024 1:05 AM, Kalle Valo wrote:
> I am not exactly looking for a Tested-on tag. What I'm asking is that
> people take into account WCN7850 when designing and writing patches
> ath12k. For example, is the firmware interface same and similar
> functional differences between supported hardware families.
I'll make sure to keep this in mind for future patches.
diff mbox series

Patch

diff --git a/drivers/net/wireless/ath/ath12k/dp_mon.c b/drivers/net/wireless/ath/ath12k/dp_mon.c
index 494984133a91..dff14f77f504 100644
--- a/drivers/net/wireless/ath/ath12k/dp_mon.c
+++ b/drivers/net/wireless/ath/ath12k/dp_mon.c
@@ -1199,19 +1199,19 @@  ath12k_dp_mon_parse_rx_dest(struct ath12k_base *ab, struct ath12k_mon_data *pmon
 			    struct sk_buff *skb)
 {
 	struct hal_rx_mon_ppdu_info *ppdu_info = &pmon->mon_ppdu_info;
-	struct hal_tlv_hdr *tlv;
+	struct hal_tlv_64_hdr *tlv;
 	enum hal_rx_mon_status hal_status;
-	u32 tlv_userid = 0;
+	u32 tlv_userid;
 	u16 tlv_tag, tlv_len;
 	u8 *ptr = skb->data;
 
 	memset(ppdu_info, 0, sizeof(struct hal_rx_mon_ppdu_info));
 
 	do {
-		tlv = (struct hal_tlv_hdr *)ptr;
-		tlv_tag = le32_get_bits(tlv->tl, HAL_TLV_HDR_TAG);
-		tlv_len = le32_get_bits(tlv->tl, HAL_TLV_HDR_LEN);
-		tlv_userid = le32_get_bits(tlv->tl, HAL_TLV_USR_ID);
+		tlv = (struct hal_tlv_64_hdr *)ptr;
+		tlv_tag = le64_get_bits(tlv->tl, HAL_TLV_64_HDR_TAG);
+		tlv_len = le64_get_bits(tlv->tl, HAL_TLV_64_HDR_LEN);
+		tlv_userid = le64_get_bits(tlv->tl, HAL_TLV_64_USR_ID);
 		ptr += sizeof(*tlv);
 
 		/* The actual length of PPDU_END is the combined length of many PHY
@@ -1226,7 +1226,7 @@  ath12k_dp_mon_parse_rx_dest(struct ath12k_base *ab, struct ath12k_mon_data *pmon
 		hal_status = ath12k_dp_mon_rx_parse_status_tlv(ab, pmon,
 							       tlv_tag, ptr, tlv_userid);
 		ptr += tlv_len;
-		ptr = PTR_ALIGN(ptr, HAL_TLV_ALIGN);
+		ptr = PTR_ALIGN(ptr, HAL_TLV_64_ALIGN);
 
 		if ((ptr - skb->data) >= DP_RX_BUFFER_SIZE)
 			break;
diff --git a/drivers/net/wireless/ath/ath12k/hal_desc.h b/drivers/net/wireless/ath/ath12k/hal_desc.h
index a460d432288f..b90a6da72e29 100644
--- a/drivers/net/wireless/ath/ath12k/hal_desc.h
+++ b/drivers/net/wireless/ath/ath12k/hal_desc.h
@@ -579,6 +579,8 @@  struct hal_tlv_hdr {
 
 #define HAL_TLV_64_HDR_TAG		GENMASK(9, 1)
 #define HAL_TLV_64_HDR_LEN		GENMASK(21, 10)
+#define HAL_TLV_64_USR_ID		GENMASK(31, 26)
+#define HAL_TLV_64_ALIGN		8
 
 struct hal_tlv_64_hdr {
 	__le64 tl;