qcacld-3.0: enabled EXT GRP IRQs after power save exit

Currently in the WoW design of Moselle, EXT GRP IRQs are
enabled before sending SMP2P power save exit message is
sent to the FW. Because of this, any pending IRQs in the
GIC will immediately fire and could race with the SMP2P
power save exit logic. Any access to the registers done
before power save exit would result in system errors.
Enable the EXT GRP IRQs after sending power save exit
command will fix the problem.

Change-Id: I16f580279b5aa24861ab5111b9c13db3e38063f4
CRs-Fixed: 2925554
This commit is contained in:
Manikanta Pubbisetty
2021-04-19 06:53:39 +05:30
committed by snandini
parent 592d540d18
commit d60dfebd0b
3 changed files with 20 additions and 13 deletions

View File

@@ -1003,6 +1003,7 @@ QDF_STATUS pmo_core_txrx_suspend(struct wlan_objmgr_psoc *psoc)
goto out;
cdp_drain_txrx(dp_soc);
pmo_ctx->wow.txrx_suspended = true;
out:
pmo_psoc_put_ref(psoc);
return status;
@@ -1022,7 +1023,7 @@ QDF_STATUS pmo_core_txrx_resume(struct wlan_objmgr_psoc *psoc)
}
pmo_ctx = pmo_psoc_get_priv(psoc);
if (pmo_core_get_wow_state(pmo_ctx) != pmo_wow_state_unified_d3)
if (!pmo_ctx->wow.txrx_suspended)
goto out;
hif_ctx = pmo_core_psoc_get_hif_handle(psoc);
@@ -1036,7 +1037,10 @@ QDF_STATUS pmo_core_txrx_resume(struct wlan_objmgr_psoc *psoc)
if (ret && ret != -EOPNOTSUPP) {
pmo_err("Failed to enable grp irqs: %d", ret);
status = qdf_status_from_os_return(ret);
goto out;
}
pmo_ctx->wow.txrx_suspended = false;
out:
pmo_psoc_put_ref(psoc);
return status;
@@ -1266,10 +1270,6 @@ QDF_STATUS pmo_core_psoc_bus_runtime_resume(struct wlan_objmgr_psoc *psoc,
}
}
status = pmo_core_txrx_resume(psoc);
if (QDF_IS_STATUS_ERROR(status))
goto fail;
if (hif_runtime_resume(hif_ctx)) {
status = QDF_STATUS_E_FAILURE;
goto fail;
@@ -1279,6 +1279,10 @@ QDF_STATUS pmo_core_psoc_bus_runtime_resume(struct wlan_objmgr_psoc *psoc,
if (status != QDF_STATUS_SUCCESS)
goto fail;
status = pmo_core_txrx_resume(psoc);
if (QDF_IS_STATUS_ERROR(status))
goto fail;
hif_pm_set_link_state(hif_ctx, HIF_PM_LINK_STATE_UP);
status = pmo_core_psoc_configure_resume(psoc, true);