diff options
| author | Liangwei Dong <liangwei@codeaurora.org> | 2016-08-25 22:23:18 -0400 |
|---|---|---|
| committer | Anjaneedevi Kapparapu <akappa@codeaurora.org> | 2016-08-31 13:27:25 +0530 |
| commit | 96d04517134f6d2f2c4fe39b82c4795c8b08eb03 (patch) | |
| tree | 8cdff3fa936af19c02f4b67b10cc4e874695c404 | |
| parent | 70660761843d80b0b39b9d8d858829cbb66bc56c (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.c | 2 | ||||
| -rw-r--r-- | CORE/SERVICES/HIF/USB/if_usb.c | 23 |
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; } |
