From a833f305060dca8441b8b8e4fdb253337e1b5a8a Mon Sep 17 00:00:00 2001 From: jiad Date: Mon, 10 Jun 2019 14:20:28 +0800 Subject: [PATCH] qcacmn: Properly map RX buffer pool to IPA SMMU domain Currently for WDI 3.0, IPA runtime enablement is done in the way that dp_ipa_enable_pipes API is first invoked and followed by dp_ipa_enable_autonomy API. With SMMU S1 enabled, RX buffers are mapped to IPA domain in dp_ipa_enable_autonomy. However RX buffers could be provided to IPA once after dp_ipa_enable_pipes and this could lead to possible SMMU fault. Fix is to map RX buffers to IPA domain before dp_ipa_enable_pipes API. Change-Id: Ifdad2db6fa26da06a91b84de8f8603cbc779dd67 CRs-Fixed: 2467966 --- dp/wifi3.0/dp_ipa.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/dp/wifi3.0/dp_ipa.c b/dp/wifi3.0/dp_ipa.c index 78b04bb6bc..5cca621c4f 100644 --- a/dp/wifi3.0/dp_ipa.c +++ b/dp/wifi3.0/dp_ipa.c @@ -743,8 +743,6 @@ QDF_STATUS dp_ipa_enable_autonomy(struct cdp_pdev *ppdev) soc->reo_remapped = true; qdf_spin_unlock_bh(&soc->remap_lock); - dp_ipa_handle_rx_buf_pool_smmu_mapping(soc, pdev, true); - /* Call HAL API to remap REO rings to REO2IPA ring */ ix0 = HAL_REO_REMAP_VAL(REO_REMAP_TCL, REO_REMAP_TCL) | HAL_REO_REMAP_VAL(REO_REMAP_SW1, REO_REMAP_SW4) | @@ -1545,13 +1543,18 @@ QDF_STATUS dp_ipa_cleanup_iface(char *ifname, bool is_ipv6_enabled) */ QDF_STATUS dp_ipa_enable_pipes(struct cdp_pdev *ppdev) { + struct dp_pdev *pdev = (struct dp_pdev *)ppdev; + struct dp_soc *soc = pdev->soc; QDF_STATUS result; + dp_ipa_handle_rx_buf_pool_smmu_mapping(soc, pdev, true); + result = qdf_ipa_wdi_enable_pipes(); if (result) { QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_ERROR, "%s: Enable WDI PIPE fail, code %d", __func__, result); + dp_ipa_handle_rx_buf_pool_smmu_mapping(soc, pdev, false); return QDF_STATUS_E_FAILURE; }