summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLiangwei Dong <liangwei@codeaurora.org>2016-08-25 22:23:18 -0400
committerAnjaneedevi Kapparapu <akappa@codeaurora.org>2016-08-31 13:27:25 +0530
commit96d04517134f6d2f2c4fe39b82c4795c8b08eb03 (patch)
tree8cdff3fa936af19c02f4b67b10cc4e874695c404
parent70660761843d80b0b39b9d8d858829cbb66bc56c (diff)
qcacld-2.0: Fix USB wlan resume firmware crash
In USB wlan LE x86 solution SNS case, "hif_usb_suspend" function returns failure due to active scan, the system still transit to suspend, e.g. the return result is ignored by system. So, WMI_PDEV_SUSPEND_CMDID is not sent to FW, which causes the Firmware assert during resume. Driver needs to reject the system suspend if driver is not ready and no WMI_PDEV_SUSPEND_CMDID command is sent to FW. This change is to do the suspend check and task in HDD layer to fix inconsistent issue. Change-Id: I2114db154043718e1be8e0392cb20561da501d47 CRs-Fixed: 1058101
-rw-r--r--CORE/SERVICES/HIF/USB/hif_usb.c2
-rw-r--r--CORE/SERVICES/HIF/USB/if_usb.c23
2 files changed, 1 insertions, 24 deletions
diff --git a/CORE/SERVICES/HIF/USB/hif_usb.c b/CORE/SERVICES/HIF/USB/hif_usb.c
index a6a88bf2754c..47bea8324a02 100644
--- a/CORE/SERVICES/HIF/USB/hif_usb.c
+++ b/CORE/SERVICES/HIF/USB/hif_usb.c
@@ -1060,5 +1060,5 @@ void HIFSetBundleMode(HIF_DEVICE *hif_device, bool enabled, int rx_bundle_cnt)
*/
bool hif_is_80211_fw_wow_required(void)
{
- return false;
+ return true;
}
diff --git a/CORE/SERVICES/HIF/USB/if_usb.c b/CORE/SERVICES/HIF/USB/if_usb.c
index cf63e6104b70..ea8a7fe6ef88 100644
--- a/CORE/SERVICES/HIF/USB/if_usb.c
+++ b/CORE/SERVICES/HIF/USB/if_usb.c
@@ -348,22 +348,6 @@ static int hif_usb_suspend(struct usb_interface *interface, pm_message_t state)
return (-1);
}
- /* No need to send WMI_PDEV_SUSPEND_CMDID to FW if WOW is enabled */
- if (wma_is_wow_mode_selected(temp_module)) {
- if (wma_enable_wow_in_fw(temp_module, 0)) {
- pr_warn("%s[%d]: fail\n", __func__, __LINE__);
- return -1;
- }
- } else if ((PM_EVENT_FREEZE & state.event) == PM_EVENT_FREEZE ||
- (PM_EVENT_SUSPEND & state.event) == PM_EVENT_SUSPEND ||
- (PM_EVENT_HIBERNATE & state.event) == PM_EVENT_HIBERNATE) {
- if (wma_suspend_target
- (vos_get_context(VOS_MODULE_ID_WDA, vos), 0)) {
- pr_warn("%s[%d]: fail\n", __func__, __LINE__);
- return -1;
- }
- }
-
sc->suspend_state = 1;
usb_hif_flush_all(device);
@@ -396,13 +380,6 @@ static int hif_usb_resume(struct usb_interface *interface)
usb_hif_post_recv_transfers(&device->pipes[HIF_RX_INT_PIPE],
HIF_USB_RX_BUFFER_SIZE);
#endif
- /* No need to send WMI_PDEV_RESUME_CMDID to FW if WOW is enabled */
- if (!wma_is_wow_mode_selected(temp_module)) {
- wma_resume_target(temp_module, 0);
- } else if (wma_disable_wow_in_fw(temp_module, 0)) {
- pr_warn("%s[%d]: fail\n", __func__, __LINE__);
- return (-1);
- }
printk("Exit:%s,Line:%d\n", __func__,__LINE__);
return 0;
}