]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: ath11k: Fix unexpected return buffer manager error for WCN6750/WCN6855
authorBalaji Pothunoori <quic_bpothuno@quicinc.com>
Wed, 30 Oct 2024 11:46:25 +0000 (17:16 +0530)
committerJeff Johnson <quic_jjohnson@quicinc.com>
Wed, 13 Nov 2024 00:44:55 +0000 (16:44 -0800)
The following error messages were encountered while parsing fragmented RX
packets for WCN6750/WCN6855:

ath11k 17a10040.wifi: invalid return buffer manager 4

This issue arose due to a hardcoded check for HAL_RX_BUF_RBM_SW3_BM
introduced in 'commit 71c748b5e01e ("ath11k: Fix unexpected return buffer
manager error for QCA6390")'

For WCN6750 and WCN6855, the return buffer manager ID should be
HAL_RX_BUF_RBM_SW1_BM. The incorrect conditional check caused fragmented
packets to be dropped, resulting in the above error log.

Fix this by adding a check for HAL_RX_BUF_RBM_SW1_BM.

Tested-on: WCN6750 hw1.0 AHB WLAN.MSL.2.0.c2-00258-QCAMSLSWPL-1
Tested-on: WCN6855 hw2.1 WLAN.HSP.1.1-04479-QCAHSPSWPL_V1_V2_SILICONZ_IOE-1

Fixes: 71c748b5e01e ("ath11k: Fix unexpected return buffer manager error for QCA6390")
Signed-off-by: Balaji Pothunoori <quic_bpothuno@quicinc.com>
Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
Acked-by: Kalle Valo <kvalo@kernel.org>
Link: https://patch.msgid.link/20241030114625.2416942-1-quic_bpothuno@quicinc.com
Signed-off-by: Jeff Johnson <quic_jjohnson@quicinc.com>
drivers/net/wireless/ath/ath11k/dp_rx.c
drivers/net/wireless/ath/ath11k/hal_rx.c

index c087d8a0f5b25540bea70503e53fefbf103eae51..176bbc5d95a62aee3184d3f13425f501beef7570 100644 (file)
@@ -3872,6 +3872,7 @@ int ath11k_dp_process_rx_err(struct ath11k_base *ab, struct napi_struct *napi,
                ath11k_hal_rx_msdu_link_info_get(link_desc_va, &num_msdus, msdu_cookies,
                                                 &rbm);
                if (rbm != HAL_RX_BUF_RBM_WBM_IDLE_DESC_LIST &&
+                   rbm != HAL_RX_BUF_RBM_SW1_BM &&
                    rbm != HAL_RX_BUF_RBM_SW3_BM) {
                        ab->soc_stats.invalid_rbm++;
                        ath11k_warn(ab, "invalid return buffer manager %d\n", rbm);
index 8f7dd43dc1bd8ee7e9df4096ec1771d806e6b5f8..753bd93f02123d081480cbdb6d2026c234eb5a0d 100644 (file)
@@ -372,7 +372,8 @@ int ath11k_hal_wbm_desc_parse_err(struct ath11k_base *ab, void *desc,
 
        ret_buf_mgr = FIELD_GET(BUFFER_ADDR_INFO1_RET_BUF_MGR,
                                wbm_desc->buf_addr_info.info1);
-       if (ret_buf_mgr != HAL_RX_BUF_RBM_SW3_BM) {
+       if (ret_buf_mgr != HAL_RX_BUF_RBM_SW1_BM &&
+           ret_buf_mgr != HAL_RX_BUF_RBM_SW3_BM) {
                ab->soc_stats.invalid_rbm++;
                return -EINVAL;
        }