]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
wifi: ath12k: Fix packets received in WBM error ring with REO LUT enabled
authorNithyanantham Paramasivam <nithyanantham.paramasivam@oss.qualcomm.com>
Thu, 10 Jul 2025 01:17:54 +0000 (06:47 +0530)
committerJeff Johnson <jeff.johnson@oss.qualcomm.com>
Fri, 11 Jul 2025 14:35:02 +0000 (07:35 -0700)
Currently, packets are being received into the WBM error ring when
REO queue lookup is enabled, resulting in degraded RX performance.
The issue arises because the REO queue LUT TID memory reference is
set to zero-it's being assigned before the memory is allocated.
Fix this by assigning the REO queue TID memory reference in the LUT
immediately after memory allocation to ensure correct packet
processing.

Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00173-QCAHKSWPL_SILICONZ-1
Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3

Reported-by: Tanguy Serrat <tanguy@squaremind.io>
Closes: https://bugzilla.kernel.org/show_bug.cgi?id=220282
Fixes: 3b9cbce6fdd3 ("wifi: ath12k: alloc REO queue per station")
Signed-off-by: Nithyanantham Paramasivam <nithyanantham.paramasivam@oss.qualcomm.com>
Reviewed-by: Baochen Qiang <quic_bqiang@quicinc.com>
Reviewed-by: Vasanthakumar Thiagarajan <vasanthakumar.thiagarajan@oss.qualcomm.com>
Link: https://patch.msgid.link/20250710011754.559817-1-nithyanantham.paramasivam@oss.qualcomm.com
Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
drivers/net/wireless/ath/ath12k/dp_rx.c

index 57648febc4a4fc5dc7cff7b0a9bd83208290819d..bd95dc88f9b21f7afb7fdc7cd91844c4cb78da1e 100644 (file)
@@ -1060,7 +1060,6 @@ int ath12k_dp_rx_peer_tid_setup(struct ath12k *ar, const u8 *peer_mac, int vdev_
        }
 
        rx_tid = &peer->rx_tid[tid];
-       paddr_aligned = rx_tid->qbuf.paddr_aligned;
        /* Update the tid queue if it is already setup */
        if (rx_tid->active) {
                ret = ath12k_peer_rx_tid_reo_update(ar, peer, rx_tid,
@@ -1072,6 +1071,7 @@ int ath12k_dp_rx_peer_tid_setup(struct ath12k *ar, const u8 *peer_mac, int vdev_
                }
 
                if (!ab->hw_params->reoq_lut_support) {
+                       paddr_aligned = rx_tid->qbuf.paddr_aligned;
                        ret = ath12k_wmi_peer_rx_reorder_queue_setup(ar, vdev_id,
                                                                     peer_mac,
                                                                     paddr_aligned, tid,
@@ -1098,6 +1098,7 @@ int ath12k_dp_rx_peer_tid_setup(struct ath12k *ar, const u8 *peer_mac, int vdev_
                return ret;
        }
 
+       paddr_aligned = rx_tid->qbuf.paddr_aligned;
        if (ab->hw_params->reoq_lut_support) {
                /* Update the REO queue LUT at the corresponding peer id
                 * and tid with qaddr.