Pārlūkot izejas kodu

qcacmn: Perform runtime and system resume before checking target state

During FILTER_RESERVE request of OPT_WIFI_DP perform both
runtime resume and system resume before checking target
suspend state.

Change-Id: I2ee92c28fb34f07e372f676f34c5561795bd9c37
CRs-Fixed: 3611474
Namita Nair 1 gadu atpakaļ
vecāks
revīzija
aeee5c16cc
1 mainītis faili ar 14 papildinājumiem un 4 dzēšanām
  1. 14 4
      ipa/core/src/wlan_ipa_core.c

+ 14 - 4
ipa/core/src/wlan_ipa_core.c

@@ -5290,6 +5290,10 @@ int wlan_ipa_wdi_opt_dpath_flt_rsrv_cb(
 	pdev_id = ipa_obj->dp_pdev_id;
 	psoc = wlan_pdev_get_psoc(pdev);
 	wmi_handle = get_wmi_unified_hdl_from_psoc(psoc);
+	if (!wmi_handle) {
+		ipa_err("Unable to get wmi handle");
+		return QDF_STATUS_FILT_REQ_ERROR;
+	}
 
 	/* Hold wakelock */
 	qdf_wake_lock_acquire(&ipa_obj->opt_dp_wake_lock,
@@ -5297,7 +5301,14 @@ int wlan_ipa_wdi_opt_dpath_flt_rsrv_cb(
 	ipa_info("opt_dp: Wakelock acquired");
 	qdf_pm_system_wakeup();
 
-	ipa_info("Target suspend state %d", qdf_atomic_read(&wmi_handle->is_target_suspended));
+	response = cdp_ipa_pcie_link_up(ipa_obj->dp_soc);
+	if (response) {
+		ipa_err("opt_dp: Pcie link up fail %d", response);
+		goto error_pcie_link_up;
+	}
+
+	ipa_info("opt_dp :Target suspend state %d",
+		 qdf_atomic_read(&wmi_handle->is_target_suspended));
 	while (qdf_atomic_read(&wmi_handle->is_target_suspended) &&
 	       wait_cnt < OPT_DP_TARGET_RESUME_WAIT_COUNT) {
 		qdf_sleep(OPT_DP_TARGET_RESUME_WAIT_TIMEOUT_MS);
@@ -5309,9 +5320,6 @@ int wlan_ipa_wdi_opt_dpath_flt_rsrv_cb(
 		goto error;
 	}
 
-	response = cdp_ipa_pcie_link_up(ipa_obj->dp_soc);
-	ipa_info("opt_dp: Pcie link up status %d", response);
-
 	/* Disable Low power features before filter reservation */
 	ipa_info("opt_dp: Disable low power features to reserve filter");
 	param_val = 0;
@@ -5334,6 +5342,8 @@ int wlan_ipa_wdi_opt_dpath_flt_rsrv_cb(
 	return cdp_ipa_rx_cce_super_rule_setup(ipa_obj->dp_soc, dp_flt_params);
 
 error:
+	cdp_ipa_pcie_link_down(ipa_obj->dp_soc);
+error_pcie_link_up:
 	qdf_wake_lock_release(&ipa_obj->opt_dp_wake_lock,
 			      WIFI_POWER_EVENT_WAKELOCK_OPT_WIFI_DP);
 	return QDF_STATUS_FILT_REQ_ERROR;