Browse Source

qcacld-3.0: Trigger recovery on pdev suspend timeout

Historically, recovery was triggered if PDEV suspend failed, but the
logic was lost during componentization. Restore the previous logic of
triggering recovery on PDEV suspend timeout.

Change-Id: I6e193e98c5ef45fd7ab4b6595ea85d986fa84131
CRs-Fixed: 2215588
Dustin Brown 7 years ago
parent
commit
d69ec37568

+ 14 - 14
components/pmo/core/src/wlan_pmo_suspend_resume.c

@@ -557,10 +557,10 @@ out:
  *
  * Return: QDF status
  */
-static
-QDF_STATUS pmo_core_enable_wow_in_fw(struct wlan_objmgr_psoc *psoc,
-		struct pmo_psoc_priv_obj *psoc_ctx,
-		struct pmo_wow_enable_params *wow_params)
+static QDF_STATUS
+pmo_core_enable_wow_in_fw(struct wlan_objmgr_psoc *psoc,
+			  struct pmo_psoc_priv_obj *psoc_ctx,
+			  struct pmo_wow_enable_params *wow_params)
 {
 	int host_credits, wmi_pending_cmds;
 	struct pmo_wow_cmd_params param = {0};
@@ -621,15 +621,14 @@ QDF_STATUS pmo_core_enable_wow_in_fw(struct wlan_objmgr_psoc *psoc,
 
 	pmo_tgt_update_target_suspend_flag(psoc, true);
 
-	if (qdf_wait_for_event_completion(&psoc_ctx->wow.target_suspend,
-				  PMO_TGT_SUSPEND_COMPLETE_TIMEOUT)
-	    != QDF_STATUS_SUCCESS) {
+	status = qdf_wait_for_event_completion(&psoc_ctx->wow.target_suspend,
+					       PMO_TARGET_SUSPEND_TIMEOUT);
+	if (QDF_IS_STATUS_ERROR(status)) {
 		pmo_err("Failed to receive WoW Enable Ack from FW");
 		pmo_err("Credits:%d; Pending_Cmds: %d",
 			pmo_tgt_psoc_get_host_credits(psoc),
 			pmo_tgt_psoc_get_pending_cmnds(psoc));
 		pmo_tgt_update_target_suspend_flag(psoc, false);
-		status = QDF_STATUS_E_FAILURE;
 		qdf_trigger_self_recovery();
 		goto out;
 	}
@@ -654,6 +653,7 @@ QDF_STATUS pmo_core_enable_wow_in_fw(struct wlan_objmgr_psoc *psoc,
 		host_credits, wmi_pending_cmds);
 
 	pmo_core_update_wow_enable_cmd_sent(psoc_ctx, true);
+
 out:
 	pmo_exit();
 
@@ -661,7 +661,7 @@ out:
 }
 
 QDF_STATUS pmo_core_psoc_suspend_target(struct wlan_objmgr_psoc *psoc,
-		int disable_target_intr)
+					int disable_target_intr)
 {
 	QDF_STATUS status;
 	struct pmo_suspend_params param;
@@ -679,14 +679,14 @@ QDF_STATUS pmo_core_psoc_suspend_target(struct wlan_objmgr_psoc *psoc,
 
 	pmo_tgt_update_target_suspend_flag(psoc, true);
 
-	if (qdf_wait_for_event_completion(&psoc_ctx->wow.target_suspend,
-				  PMO_TGT_SUSPEND_COMPLETE_TIMEOUT)
-	    != QDF_STATUS_SUCCESS) {
-		status = QDF_STATUS_E_TIMEOUT;
+	status = qdf_wait_for_event_completion(&psoc_ctx->wow.target_suspend,
+					       PMO_TARGET_SUSPEND_TIMEOUT);
+	if (QDF_IS_STATUS_ERROR(status)) {
 		pmo_err("Failed to get ACK from firmware for pdev suspend");
 		pmo_tgt_update_target_suspend_flag(psoc, false);
-		/* wma_suspend_target_timeout(pmac->sme.enableSelfRecovery); */
+		qdf_trigger_self_recovery();
 	}
+
 out:
 	pmo_exit();
 

+ 3 - 3
components/pmo/dispatcher/inc/wlan_pmo_common_public_struct.h

@@ -183,9 +183,9 @@ enum pmo_wow_interface_pause {
 	PMO_WOW_INTERFACE_PAUSE_COUNT
 };
 
-#define PMO_TGT_SUSPEND_COMPLETE_TIMEOUT   6000
-#define PMO_WAKE_LOCK_TIMEOUT              1000
-#define PMO_RESUME_TIMEOUT                 6000
+#define PMO_TARGET_SUSPEND_TIMEOUT   6000
+#define PMO_WAKE_LOCK_TIMEOUT        1000
+#define PMO_RESUME_TIMEOUT           6000
 
 /**
  * struct wow_enable_params - A collection of wow enable override parameters