Browse Source

qcacld-3.0: Fix race between suspend sequence and request resume

Currently when suspend sequence is going on and WOW handshake with
F.W is completed, then we check for wow initial wakeup flag if it
is not set then we proceed for suspend. But if this wow initial
wake flag is set just after it being checked in suspend sequence
then we miss honoring the wake message and host will be stuck in
suspend state.

So to avoid this make sure we are requesting resume from wow initial
wakeup setting context. So that resume request is posted properly.

Change-Id: Idd082ef82a4d7dbd62d7762f10debe1db9baed88
CRs-Fixed: 3743425
Karthik Kantamneni 1 year ago
parent
commit
34d6142c5d
1 changed files with 7 additions and 0 deletions
  1. 7 0
      components/pmo/core/src/wlan_pmo_suspend_resume.c

+ 7 - 0
components/pmo/core/src/wlan_pmo_suspend_resume.c

@@ -1664,12 +1664,19 @@ void pmo_core_psoc_handle_initial_wake_up(void *cb_ctx)
 {
 	struct pmo_psoc_priv_obj *psoc_ctx;
 	struct wlan_objmgr_psoc *psoc = (struct wlan_objmgr_psoc *)cb_ctx;
+	void *hif_ctx;
 
 	if (!psoc) {
 		pmo_err("cb ctx/psoc is null");
 		return;
 	}
 
+	hif_ctx = pmo_core_psoc_get_hif_handle(psoc);
+	if (!hif_ctx)
+		pmo_err("hif ctx is null, request resume not called");
+	else if(hif_pm_get_wake_irq_type(hif_ctx) == HIF_PM_CE_WAKE)
+		hif_rtpm_check_and_request_resume(true);
+
 	psoc_ctx = pmo_psoc_get_priv(psoc);
 	pmo_core_update_wow_initial_wake_up(psoc_ctx, 1);
 }