Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d10dd666 authored by Jinwei Chen's avatar Jinwei Chen Committed by snandini
Browse files

qcacmn: handle IPA buffer smmu map/unmap correctly

Handle ipa buffer smmu map/unmap with below changes,
(1) Do IPA smmu unmap for RX buffer received from REO
exception/WBM RX release/REO DST/RXDMA DST ring.
(2) Align IPA smmu map length to qdf_nbuf_map_nytes_single()
with fixed length.

Change-Id: I1ed46b31ed31f5b7e4e2484d519bc85d35ce1e69
CRs-Fixed: 2728644
parent f259e58d
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -2060,6 +2060,9 @@ uint32_t dp_rx_process(struct dp_intr *int_ctx, hal_ring_handle_t hal_ring_hdl,
		if (QDF_IS_STATUS_ERROR(status)) {
			if (qdf_unlikely(rx_desc && rx_desc->nbuf)) {
				qdf_assert_always(rx_desc->unmapped);
				dp_ipa_handle_rx_buf_smmu_mapping(soc,
								  rx_desc->nbuf,
								  false);
				qdf_nbuf_unmap_single(soc->osdev,
						      rx_desc->nbuf,
						      QDF_DMA_FROM_DEVICE);
@@ -2148,6 +2151,7 @@ uint32_t dp_rx_process(struct dp_intr *int_ctx, hal_ring_handle_t hal_ring_hdl,
		 * move unmap after scattered msdu waiting break logic
		 * in case double skb unmap happened.
		 */
		dp_ipa_handle_rx_buf_smmu_mapping(soc, rx_desc->nbuf, false);
		qdf_nbuf_unmap_single(soc->osdev, rx_desc->nbuf,
				      QDF_DMA_FROM_DEVICE);
		rx_desc->unmapped = 1;
+1 −0
Original line number Diff line number Diff line
@@ -1906,6 +1906,7 @@ uint32_t dp_rx_frag_handle(struct dp_soc *soc, hal_ring_desc_t ring_desc,

	msdu = rx_desc->nbuf;

	dp_ipa_handle_rx_buf_smmu_mapping(soc, msdu, false);
	qdf_nbuf_unmap_single(soc->osdev, msdu,	QDF_DMA_FROM_DEVICE);
	rx_desc->unmapped = 1;

+7 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@
#include "qdf_trace.h"
#include "qdf_nbuf.h"
#include "dp_rx_defrag.h"
#include "dp_ipa.h"
#ifdef FEATURE_WDS
#include "dp_txrx_wds.h"
#endif
@@ -320,6 +321,7 @@ dp_rx_msdus_drop(struct dp_soc *soc, hal_ring_desc_t ring_desc,
			return rx_bufs_used;
		}

		dp_ipa_handle_rx_buf_smmu_mapping(soc, rx_desc->nbuf, false);
		qdf_nbuf_unmap_single(soc->osdev,
				      rx_desc->nbuf, QDF_DMA_FROM_DEVICE);

@@ -507,6 +509,7 @@ dp_rx_reo_err_entry_process(struct dp_soc *soc,
		pdev = dp_get_pdev_for_lmac_id(soc, rx_desc->pool_id);

		nbuf = rx_desc->nbuf;
		dp_ipa_handle_rx_buf_smmu_mapping(soc, nbuf, false);
		qdf_nbuf_unmap_single(soc->osdev,
				      nbuf, QDF_DMA_FROM_DEVICE);

@@ -1808,6 +1811,7 @@ dp_rx_wbm_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
		}

		nbuf = rx_desc->nbuf;
		dp_ipa_handle_rx_buf_smmu_mapping(soc, nbuf, false);
		qdf_nbuf_unmap_single(soc->osdev, nbuf,	QDF_DMA_FROM_DEVICE);

		/*
@@ -2142,6 +2146,9 @@ dp_rx_err_mpdu_pop(struct dp_soc *soc, uint32_t mac_id,
						continue;
					}

					dp_ipa_handle_rx_buf_smmu_mapping(soc,
									  msdu,
									  false);
					qdf_nbuf_unmap_single(soc->osdev, msdu,
						QDF_DMA_FROM_DEVICE);