]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: ath12k: add msdu_end structure for WCN7850
authorKang Yang <quic_kangyang@quicinc.com>
Mon, 11 Sep 2023 09:30:54 +0000 (17:30 +0800)
committerKalle Valo <quic_kvalo@quicinc.com>
Thu, 28 Sep 2023 15:12:36 +0000 (18:12 +0300)
WCN7850 and QCN9274 currently use the same structure rx_msdu_end_qcn9274
for msdu_end. But content of msdu_end on WCN7850 is different from that of
QCN9274. Need to update it for WCN7850, otherwise will get the wrong
values when using it.

For example, TID is no longer in WCN7850's msdu_end. But
ath12k_dp_rx_process_err() and ath12k_dp_rx_process_wbm_err() still get
TID from msdu_end. So an uncertain value will be used in these two
functions on WCN7850.

Therefore, add new structure rx_msdu_end_wcn7850 for WCN7850.

Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0-03427-QCAHMTSWPL_V1.0_V2.0_SILICONZ-1.15378.4

Signed-off-by: Kang Yang <quic_kangyang@quicinc.com>
Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
Link: https://lore.kernel.org/r/20230911093054.74943-1-quic_kangyang@quicinc.com
drivers/net/wireless/ath/ath12k/hal.c
drivers/net/wireless/ath/ath12k/rx_desc.h

index e7a150e7158e91793e34c00f3470b81c87230410..eca86fc25a60843dfdbc76a72f4f1d10c493f3e4 100644 (file)
@@ -385,13 +385,13 @@ static u8 ath12k_hw_qcn9274_rx_desc_get_msdu_pkt_type(struct hal_rx_desc *desc)
 static u8 ath12k_hw_qcn9274_rx_desc_get_msdu_nss(struct hal_rx_desc *desc)
 {
        return le32_get_bits(desc->u.qcn9274.msdu_end.info12,
-                            RX_MSDU_END_INFO12_MIMO_SS_BITMAP);
+                            RX_MSDU_END_QCN9274_INFO12_MIMO_SS_BITMAP);
 }
 
 static u8 ath12k_hw_qcn9274_rx_desc_get_mpdu_tid(struct hal_rx_desc *desc)
 {
        return le16_get_bits(desc->u.qcn9274.msdu_end.info5,
-                           RX_MSDU_END_INFO5_TID);
+                           RX_MSDU_END_QCN9274_INFO5_TID);
 }
 
 static u16 ath12k_hw_qcn9274_rx_desc_get_mpdu_peer_id(struct hal_rx_desc *desc)
@@ -819,13 +819,13 @@ static u8 ath12k_hw_wcn7850_rx_desc_get_msdu_pkt_type(struct hal_rx_desc *desc)
 static u8 ath12k_hw_wcn7850_rx_desc_get_msdu_nss(struct hal_rx_desc *desc)
 {
        return le32_get_bits(desc->u.wcn7850.msdu_end.info12,
-                            RX_MSDU_END_INFO12_MIMO_SS_BITMAP);
+                            RX_MSDU_END_WCN7850_INFO12_MIMO_SS_BITMAP);
 }
 
 static u8 ath12k_hw_wcn7850_rx_desc_get_mpdu_tid(struct hal_rx_desc *desc)
 {
-       return le16_get_bits(desc->u.wcn7850.msdu_end.info5,
-                            RX_MSDU_END_INFO5_TID);
+       return le32_get_bits(desc->u.wcn7850.mpdu_start.info2,
+                            RX_MPDU_START_INFO2_TID);
 }
 
 static u16 ath12k_hw_wcn7850_rx_desc_get_mpdu_peer_id(struct hal_rx_desc *desc)
@@ -837,7 +837,7 @@ static void ath12k_hw_wcn7850_rx_desc_copy_end_tlv(struct hal_rx_desc *fdesc,
                                                   struct hal_rx_desc *ldesc)
 {
        memcpy(&fdesc->u.wcn7850.msdu_end, &ldesc->u.wcn7850.msdu_end,
-              sizeof(struct rx_msdu_end_qcn9274));
+              sizeof(struct rx_msdu_end_wcn7850));
 }
 
 static u32 ath12k_hw_wcn7850_rx_desc_get_mpdu_start_tag(struct hal_rx_desc *desc)
index bfa87cb8d0213d08679487d89b7dcb9490cde4ee..c4058abc516ee03bf11ff449c3e196fd90fc53be 100644 (file)
@@ -627,17 +627,18 @@ enum rx_msdu_start_reception_type {
 
 #define RX_MSDU_END_INFO5_SA_IDX_TIMEOUT       BIT(0)
 #define RX_MSDU_END_INFO5_DA_IDX_TIMEOUT       BIT(1)
-#define RX_MSDU_END_INFO5_TO_DS                        BIT(2)
-#define RX_MSDU_END_INFO5_TID                  GENMASK(6, 3)
 #define RX_MSDU_END_INFO5_SA_IS_VALID          BIT(7)
 #define RX_MSDU_END_INFO5_DA_IS_VALID          BIT(8)
 #define RX_MSDU_END_INFO5_DA_IS_MCBC           BIT(9)
 #define RX_MSDU_END_INFO5_L3_HDR_PADDING       GENMASK(11, 10)
 #define RX_MSDU_END_INFO5_FIRST_MSDU           BIT(12)
 #define RX_MSDU_END_INFO5_LAST_MSDU            BIT(13)
-#define RX_MSDU_END_INFO5_FROM_DS              BIT(14)
 #define RX_MSDU_END_INFO5_IP_CHKSUM_FAIL_COPY  BIT(15)
 
+#define RX_MSDU_END_QCN9274_INFO5_TO_DS         BIT(2)
+#define RX_MSDU_END_QCN9274_INFO5_TID           GENMASK(6, 3)
+#define RX_MSDU_END_QCN9274_INFO5_FROM_DS       BIT(14)
+
 #define RX_MSDU_END_INFO6_MSDU_DROP            BIT(0)
 #define RX_MSDU_END_INFO6_REO_DEST_IND         GENMASK(5, 1)
 #define RX_MSDU_END_INFO6_FLOW_IDX             GENMASK(25, 6)
@@ -650,14 +651,15 @@ enum rx_msdu_start_reception_type {
 #define RX_MSDU_END_INFO7_AGGR_COUNT           GENMASK(7, 0)
 #define RX_MSDU_END_INFO7_FLOW_AGGR_CONTN      BIT(8)
 #define RX_MSDU_END_INFO7_FISA_TIMEOUT         BIT(9)
-#define RX_MSDU_END_INFO7_TCPUDP_CSUM_FAIL_CPY BIT(10)
-#define RX_MSDU_END_INFO7_MSDU_LIMIT_ERROR     BIT(11)
-#define RX_MSDU_END_INFO7_FLOW_IDX_TIMEOUT     BIT(12)
-#define RX_MSDU_END_INFO7_FLOW_IDX_INVALID     BIT(13)
-#define RX_MSDU_END_INFO7_CCE_MATCH            BIT(14)
-#define RX_MSDU_END_INFO7_AMSDU_PARSER_ERR     BIT(15)
 
-#define RX_MSDU_END_INFO8_KEY_ID               GENMASK(7, 0)
+#define RX_MSDU_END_QCN9274_INFO7_TCPUDP_CSUM_FAIL_CPY BIT(10)
+#define RX_MSDU_END_QCN9274_INFO7_MSDU_LIMIT_ERROR     BIT(11)
+#define RX_MSDU_END_QCN9274_INFO7_FLOW_IDX_TIMEOUT     BIT(12)
+#define RX_MSDU_END_QCN9274_INFO7_FLOW_IDX_INVALID     BIT(13)
+#define RX_MSDU_END_QCN9274_INFO7_CCE_MATCH            BIT(14)
+#define RX_MSDU_END_QCN9274_INFO7_AMSDU_PARSER_ERR     BIT(15)
+
+#define RX_MSDU_END_QCN9274_INFO8_KEY_ID               GENMASK(7, 0)
 
 #define RX_MSDU_END_INFO9_SERVICE_CODE         GENMASK(14, 6)
 #define RX_MSDU_END_INFO9_PRIORITY_VALID       BIT(15)
@@ -698,8 +700,9 @@ enum rx_msdu_start_reception_type {
 #define RX_MSDU_END_INFO12_RATE_MCS            GENMASK(17, 14)
 #define RX_MSDU_END_INFO12_RECV_BW             GENMASK(20, 18)
 #define RX_MSDU_END_INFO12_RECEPTION_TYPE      GENMASK(23, 21)
-#define RX_MSDU_END_INFO12_MIMO_SS_BITMAP      GENMASK(30, 24)
-#define RX_MSDU_END_INFO12_MIMO_DONE_COPY      BIT(31)
+
+#define RX_MSDU_END_QCN9274_INFO12_MIMO_SS_BITMAP      GENMASK(30, 24)
+#define RX_MSDU_END_QCN9274_INFO12_MIMO_DONE_COPY      BIT(31)
 
 #define RX_MSDU_END_INFO13_FIRST_MPDU          BIT(0)
 #define RX_MSDU_END_INFO13_MCAST_BCAST         BIT(2)
@@ -714,7 +717,6 @@ enum rx_msdu_start_reception_type {
 #define RX_MSDU_END_INFO13_EOSP                        BIT(11)
 #define RX_MSDU_END_INFO13_A_MSDU_ERROR                BIT(12)
 #define RX_MSDU_END_INFO13_ORDER               BIT(14)
-#define RX_MSDU_END_INFO13_WIFI_PARSER_ERR     BIT(15)
 #define RX_MSDU_END_INFO13_OVERFLOW_ERR                BIT(16)
 #define RX_MSDU_END_INFO13_MSDU_LEN_ERR                BIT(17)
 #define RX_MSDU_END_INFO13_TCP_UDP_CKSUM_FAIL  BIT(18)
@@ -732,6 +734,8 @@ enum rx_msdu_start_reception_type {
 #define RX_MSDU_END_INFO13_UNDECRYPT_FRAME_ERR BIT(30)
 #define RX_MSDU_END_INFO13_FCS_ERR             BIT(31)
 
+#define RX_MSDU_END_QCN9274_INFO13_WIFI_PARSER_ERR      BIT(15)
+
 #define RX_MSDU_END_INFO14_DECRYPT_STATUS_CODE GENMASK(12, 10)
 #define RX_MSDU_END_INFO14_RX_BITMAP_NOT_UPDED BIT(13)
 #define RX_MSDU_END_INFO14_MSDU_DONE           BIT(31)
@@ -782,6 +786,65 @@ struct rx_msdu_end_qcn9274 {
        __le32 info14;
 } __packed;
 
+/* These macro definitions are only used for WCN7850 */
+#define RX_MSDU_END_WCN7850_INFO2_KEY_ID                       BIT(7, 0)
+
+#define RX_MSDU_END_WCN7850_INFO5_MSDU_LIMIT_ERR               BIT(2)
+#define RX_MSDU_END_WCN7850_INFO5_IDX_TIMEOUT                  BIT(3)
+#define RX_MSDU_END_WCN7850_INFO5_IDX_INVALID                  BIT(4)
+#define RX_MSDU_END_WCN7850_INFO5_WIFI_PARSE_ERR               BIT(5)
+#define RX_MSDU_END_WCN7850_INFO5_AMSDU_PARSER_ERR             BIT(6)
+#define RX_MSDU_END_WCN7850_INFO5_TCPUDP_CSUM_FAIL_CPY         BIT(14)
+
+#define RX_MSDU_END_WCN7850_INFO12_MIMO_SS_BITMAP              GENMASK(31, 24)
+
+#define RX_MSDU_END_WCN7850_INFO13_FRAGMENT_FLAG               BIT(13)
+#define RX_MSDU_END_WCN7850_INFO13_CCE_MATCH                   BIT(15)
+
+struct rx_msdu_end_wcn7850 {
+       __le16 info0;
+       __le16 phy_ppdu_id;
+       __le16 ip_hdr_cksum;
+       __le16 info1;
+       __le16 info2;
+       __le16 cumulative_l3_checksum;
+       __le32 rule_indication0;
+       __le32 rule_indication1;
+       __le16 info3;
+       __le16 l3_type;
+       __le32 ipv6_options_crc;
+       __le32 tcp_seq_num;
+       __le32 tcp_ack_num;
+       __le16 info4;
+       __le16 window_size;
+       __le16 tcp_udp_chksum;
+       __le16 info5;
+       __le16 sa_idx;
+       __le16 da_idx_or_sw_peer_id;
+       __le32 info6;
+       __le32 fse_metadata;
+       __le16 cce_metadata;
+       __le16 sa_sw_peer_id;
+       __le16 info7;
+       __le16 rsvd0;
+       __le16 cumulative_l4_checksum;
+       __le16 cumulative_ip_length;
+       __le32 info9;
+       __le32 info10;
+       __le32 info11;
+       __le32 toeplitz_hash_2_or_4;
+       __le32 flow_id_toeplitz;
+       __le32 info12;
+       __le32 ppdu_start_timestamp_31_0;
+       __le32 ppdu_start_timestamp_63_32;
+       __le32 phy_meta_data;
+       __le16 vlan_ctag_ci;
+       __le16 vlan_stag_ci;
+       __le32 rsvd[3];
+       __le32 info13;
+       __le32 info14;
+} __packed;
+
 /* rx_msdu_end
  *
  * rxpcu_mpdu_filter_in_category
@@ -1410,7 +1473,7 @@ struct rx_pkt_hdr_tlv {
 
 struct hal_rx_desc_wcn7850 {
        __le64 msdu_end_tag;
-       struct rx_msdu_end_qcn9274 msdu_end;
+       struct rx_msdu_end_wcn7850 msdu_end;
        u8 rx_padding0[RX_BE_PADDING0_BYTES];
        __le64 mpdu_start_tag;
        struct rx_mpdu_start_qcn9274 mpdu_start;