[PATCH ath-next v3 12/13] wifi: ath12k: ng: wire RX TID REO operations

Pradeep Kumar Chitrapu pradeep.chitrapu at oss.qualcomm.com
Tue Nov 3 17:10:55 PST 2026


RX TID setup fails on Wi-Fi 8 while the architecture hooks are empty,
so common peer setup falls back to paths that cannot program QCN9625 REO
queue descriptors.

Install the Wi-Fi 8 RX TID hooks, initialize the REO command/list locks
used by those paths, and enable REO queue LUT support for QCN9625. Expose
the single Wi-Fi 8 REO LUT through the expected ML pointer so common qref
programming can use the same address table.

Tested-on: Compilation only, M=drivers/net/wireless/ath/ath12k
Signed-off-by: Pradeep Kumar Chitrapu <pradeep.chitrapu at oss.qualcomm.com>
---
 drivers/net/wireless/ath/ath12k/wifi8/dp.c | 18 ++++++++++++++++++
 drivers/net/wireless/ath/ath12k/wifi8/hw.c |  1 +
 2 files changed, 19 insertions(+)

diff --git a/drivers/net/wireless/ath/ath12k/wifi8/dp.c b/drivers/net/wireless/ath/ath12k/wifi8/dp.c
index e89826f33206..1e636e79fc32 100644
--- a/drivers/net/wireless/ath/ath12k/wifi8/dp.c
+++ b/drivers/net/wireless/ath/ath12k/wifi8/dp.c
@@ -197,6 +197,9 @@ static int ath12k_wifi8_dp_reoq_lut_setup(struct ath12k_base *ab)
 	ath12k_hal_write_reoq_lut_addr(ab, dp->reoq_lut.paddr >> 8);
 	ath12k_hal_write_ml_reoq_lut_addr(ab, dp->reoq_lut.paddr >> 8);
 
+	dp->ml_reoq_lut.vaddr = dp->reoq_lut.vaddr;
+	dp->ml_reoq_lut.paddr = dp->reoq_lut.paddr;
+
 	ath12k_hal_reoq_lut_addr_read_enable(ab);
 	ath12k_hal_reoq_lut_set_max_peerid(ab);
 
@@ -215,6 +218,10 @@ static void ath12k_wifi8_dp_reoq_lut_cleanup(struct ath12k_base *ab)
 				  dp->reoq_lut.vaddr_unaligned,
 				  dp->reoq_lut.paddr_unaligned);
 		dp->reoq_lut.vaddr_unaligned = NULL;
+		dp->reoq_lut.vaddr = NULL;
+		dp->reoq_lut.paddr = 0;
+		dp->ml_reoq_lut.vaddr = NULL;
+		dp->ml_reoq_lut.paddr = 0;
 	}
 }
 
@@ -519,6 +526,17 @@ static struct ath12k_dp_arch_ops ath12k_wifi8_dp_arch_ops = {
 	.dp_op_mlo_init = ath12k_wifi8_dp_op_mlo_init,
 	.dp_op_mlo_deinit = ath12k_wifi8_dp_op_mlo_deinit,
 	.service_srng = ath12k_wifi8_dp_service_srng,
+	.reo_cmd_send = ath12k_wifi8_dp_reo_cmd_send,
+	.setup_pn_check_reo_cmd = ath12k_wifi8_dp_setup_pn_check_reo_cmd,
+	.rx_peer_tid_delete = ath12k_wifi8_dp_rx_peer_tid_delete,
+	.reo_cache_flush = ath12k_wifi8_dp_reo_cache_flush,
+	.rx_link_desc_return = ath12k_wifi8_dp_rx_link_desc_return,
+	.rx_frags_cleanup = ath12k_wifi8_dp_rx_frags_cleanup,
+	.peer_rx_tid_reo_update = ath12k_wifi8_peer_rx_tid_reo_update,
+	.rx_assign_reoq = ath12k_wifi8_dp_rx_assign_reoq,
+	.peer_rx_tid_qref_setup = ath12k_wifi8_peer_rx_tid_qref_setup,
+	.peer_rx_tid_qref_reset = ath12k_wifi8_peer_rx_tid_qref_reset,
+	.rx_tid_delete_handler = ath12k_wifi8_dp_rx_tid_delete_handler,
 	.dp_peer_create = ath12k_wifi8_dp_peer_create,
 	.dp_peer_delete = ath12k_wifi8_dp_peer_delete,
 	.dp_link_peer_create = ath12k_wifi8_dp_link_peer_create,
diff --git a/drivers/net/wireless/ath/ath12k/wifi8/hw.c b/drivers/net/wireless/ath/ath12k/wifi8/hw.c
index ed3ac770e754..a7da8b3a44cd 100644
--- a/drivers/net/wireless/ath/ath12k/wifi8/hw.c
+++ b/drivers/net/wireless/ath/ath12k/wifi8/hw.c
@@ -211,6 +211,7 @@ static const struct ath12k_hw_params ath12k_wifi8_hw_params[] = {
 
 		.current_cc_support = false,
 		.ring_mask = &ath12k_wifi8_hw_ring_mask_qcn9625,
+		.reoq_lut_support = true,
 		.num_tcl_banks = 128,
 	},
 };

-- 
2.43.0




More information about the ath12k mailing list