diff options
| author | Komal Seelam <kseelam@qti.qualcomm.com> | 2014-05-29 15:13:26 +0530 |
|---|---|---|
| committer | Pitani Venkata Rajesh Kumar <c_vpitan@qti.qualcomm.com> | 2014-05-30 19:19:04 +0530 |
| commit | 8ededa478abc216a34b5e5cc12b2c0a772d9adee (patch) | |
| tree | 3df040f999c045b653ffb9c72698d5042571d2d9 | |
| parent | 16e15a92a0dfc4619dd112e4d00464c6056701a7 (diff) | |
qcacld: Defer WMI commands from Host during suspend.
Defer WMI Commands from HOST until the response from FW is Processed
by host for wow_enable command.
Problem reported as host queued WMI command on recieving FW event
in the window where wow_enable is sent to FW and ACK/NACK is received
from FW. Results in Target Assert.
Fix by Defering WMI commands until Host process HTC ACK/NACK from
FW for WOW_ENABLE.
Change-Id: Ie2dc28b54fb4aae0a1e047b0a276dba28f215345
CRs-Fixed: 672205
| -rw-r--r-- | CORE/SERVICES/WMA/wma.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c index b039f9f0048d..40e05180c8c4 100644 --- a/CORE/SERVICES/WMA/wma.c +++ b/CORE/SERVICES/WMA/wma.c @@ -13205,6 +13205,8 @@ int wma_enable_wow_in_fw(WMA_HANDLE handle) goto error; } + wmi_set_target_suspend(wma->wmi_handle, TRUE); + if (vos_wait_single_event(&wma->target_suspend, WMA_TGT_SUSPEND_COMPLETE_TIMEOUT) != VOS_STATUS_SUCCESS) { @@ -13213,11 +13215,13 @@ int wma_enable_wow_in_fw(WMA_HANDLE handle) wmi_get_host_credits(wma->wmi_handle), wmi_get_pending_cmds(wma->wmi_handle)); + wmi_set_target_suspend(wma->wmi_handle, FALSE); return VOS_STATUS_E_FAILURE; } if (wma->wow_nack) { WMA_LOGE("FW not ready to WOW"); + wmi_set_target_suspend(wma->wmi_handle, FALSE); return VOS_STATUS_E_AGAIN; } @@ -13242,6 +13246,7 @@ int wma_enable_wow_in_fw(WMA_HANDLE handle) if (scn == NULL) { WMA_LOGE("%s: Failed to get HIF context", __func__); + VOS_ASSERT(0); return VOS_STATUS_E_FAULT; } @@ -13249,7 +13254,6 @@ int wma_enable_wow_in_fw(WMA_HANDLE handle) wma->wow.wow_enable_cmd_sent = TRUE; - wmi_set_target_suspend(wma->wmi_handle, TRUE); return VOS_STATUS_SUCCESS; error: @@ -19558,10 +19562,15 @@ int wma_suspend_target(WMA_HANDLE handle, int disable_target_intr) adf_nbuf_free(wmibuf); return -1; } + + + wmi_set_target_suspend(wma_handle->wmi_handle, TRUE); + if (vos_wait_single_event(&wma_handle->target_suspend, WMA_TGT_SUSPEND_COMPLETE_TIMEOUT) != VOS_STATUS_SUCCESS) { WMA_LOGE("Failed to get ACK from firmware for pdev suspend"); + wmi_set_target_suspend(wma_handle->wmi_handle, FALSE); return -1; } @@ -19569,12 +19578,12 @@ int wma_suspend_target(WMA_HANDLE handle, int disable_target_intr) if (scn == NULL) { WMA_LOGE("%s: Failed to get HIF context", __func__); + VOS_ASSERT(0); return -1; } HTCCancelDeferredTargetSleep(scn); - wmi_set_target_suspend(wma_handle->wmi_handle, TRUE); return 0; } |
