summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKomal Seelam <kseelam@qti.qualcomm.com>2014-05-29 15:13:26 +0530
committerPitani Venkata Rajesh Kumar <c_vpitan@qti.qualcomm.com>2014-05-30 19:19:04 +0530
commit8ededa478abc216a34b5e5cc12b2c0a772d9adee (patch)
tree3df040f999c045b653ffb9c72698d5042571d2d9
parent16e15a92a0dfc4619dd112e4d00464c6056701a7 (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.c13
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;
}