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:

committed by
snandini

parent
592d540d18
commit
d60dfebd0b
@@ -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);
|
||||
|
Reference in New Issue
Block a user