From 883d041de64c5bb0fa25872e3572df1c20ccf20d Mon Sep 17 00:00:00 2001 From: Karthik Kantamneni Date: Mon, 22 Mar 2021 11:09:24 +0530 Subject: [PATCH] qcacmn: Fix IPA SMMU mapping issue for RX buffers from refill pool Refill pool buffer IPA mapping is done during allocation time, but in some cases where IPA pipes enable/disable happens in between previous mapping is not valid which is causing SMMU fault from IPA module. Fix this by moving IPA mapping before replenishing buffers to RXDMA ring. Change-Id: Ie6c5eb791b6f832f311a6e89489aebef37094d8f CRS-Fixed: 2901819 --- dp/wifi3.0/dp_rx_buffer_pool.c | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/dp/wifi3.0/dp_rx_buffer_pool.c b/dp/wifi3.0/dp_rx_buffer_pool.c index fec91ee072fc..c6e4a2bcc2ba 100644 --- a/dp/wifi3.0/dp_rx_buffer_pool.c +++ b/dp/wifi3.0/dp_rx_buffer_pool.c @@ -166,9 +166,6 @@ void dp_rx_refill_buff_pool_enqueue(struct dp_soc *soc) continue; } - dp_ipa_handle_rx_buf_smmu_mapping(soc, nbuf, - rx_desc_pool->buf_size, - true); DP_RX_LIST_APPEND(nbuf_head, nbuf_tail, nbuf); count++; } @@ -271,13 +268,13 @@ dp_rx_buffer_pool_nbuf_map(struct dp_soc *soc, if (qdf_unlikely(QDF_IS_STATUS_ERROR(ret))) return ret; - - dp_ipa_handle_rx_buf_smmu_mapping(soc, - (qdf_nbuf_t)((nbuf_frag_info_t->virt_addr).nbuf), - rx_desc_pool->buf_size, - true); } + dp_ipa_handle_rx_buf_smmu_mapping(soc, + (qdf_nbuf_t)((nbuf_frag_info_t->virt_addr).nbuf), + rx_desc_pool->buf_size, + true); + return ret; } @@ -316,9 +313,6 @@ static void dp_rx_refill_buff_pool_init(struct dp_soc *soc, u8 mac_id) continue; } - dp_ipa_handle_rx_buf_smmu_mapping(soc, nbuf, - rx_desc_pool->buf_size, - true); DP_RX_LIST_APPEND(buff_pool->buf_head, buff_pool->buf_tail, nbuf); buff_pool->bufq_len++; @@ -380,9 +374,6 @@ static void dp_rx_refill_buff_pool_deinit(struct dp_soc *soc, u8 mac_id) buff_pool->in_rx_refill_lock = true; while ((nbuf = dp_rx_refill_buff_pool_dequeue_nbuf(soc))) { - dp_ipa_handle_rx_buf_smmu_mapping(soc, nbuf, - rx_desc_pool->buf_size, - false); qdf_nbuf_unmap_nbytes_single(soc->osdev, nbuf, QDF_DMA_BIDIRECTIONAL, rx_desc_pool->buf_size);