From 3f43a6924b62bf3bfed9b8a0e787644d0e7d40c0 Mon Sep 17 00:00:00 2001 From: jiad Date: Wed, 17 Apr 2019 16:43:25 +0800 Subject: [PATCH] qcacmn: Release SMMU IPA mappings after pipes are disabled Currenlty RX buffer mappings to IPA domain are released when REO2IPA ring are disabled but before IPA pipes are disabled. There will be chances that IPA still accessing buffers with mappings released, which could lead to SMMU fault. Fix is to release SMMU mappings to IPA domain until IPA pipes are disabled. Change-Id: I62ac99e6a9b83cfd1e70a17ffacdea3ca3720a5c CRs-Fixed: 2436812 --- dp/wifi3.0/dp_ipa.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/dp/wifi3.0/dp_ipa.c b/dp/wifi3.0/dp_ipa.c index 71df7a253766..4d0e4fab881d 100644 --- a/dp/wifi3.0/dp_ipa.c +++ b/dp/wifi3.0/dp_ipa.c @@ -748,8 +748,6 @@ QDF_STATUS dp_ipa_disable_autonomy(struct cdp_pdev *ppdev) soc->reo_remapped = false; qdf_spin_unlock_bh(&soc->remap_lock); - dp_ipa_handle_rx_buf_pool_smmu_mapping(soc, pdev, false); - return QDF_STATUS_SUCCESS; } @@ -1508,17 +1506,19 @@ QDF_STATUS dp_ipa_enable_pipes(struct cdp_pdev *ppdev) */ QDF_STATUS dp_ipa_disable_pipes(struct cdp_pdev *ppdev) { + struct dp_pdev *pdev = (struct dp_pdev *)ppdev; + struct dp_soc *soc = pdev->soc; QDF_STATUS result; result = qdf_ipa_wdi_disable_pipes(); - if (result) { + if (result) QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_ERROR, "%s: Disable WDI PIPE fail, code %d", __func__, result); - return QDF_STATUS_E_FAILURE; - } - return QDF_STATUS_SUCCESS; + dp_ipa_handle_rx_buf_pool_smmu_mapping(soc, pdev, false); + + return result ? QDF_STATUS_E_FAILURE : QDF_STATUS_SUCCESS; } /**