qcacld-3.0: setup IPA sys pipes if wlan_ipa_wdi_init succeeds

At present, IPA sys pipes setup done before wlan_ipa_wdi_init,
so chances for IPA uC is not yet up and running. As wdi init
succeeds only if uC is up and running, setting up IPA sys pipes
after wlan_ipa_wdi_init succeeds.

Change-Id: I7dcae49db0b0a2114908284379096f39e6f16a50
CRs-Fixed: 2573929
Šī revīzija ir iekļauta:
Vevek Venkatesan
2019-11-26 16:52:52 +05:30
revīziju iesūtīja nshrivas
vecāks 7988b98d82
revīzija 959ac03d07

Parādīt failu

@@ -3020,27 +3020,33 @@ QDF_STATUS wlan_ipa_setup(struct wlan_ipa_priv *ipa_ctx,
qdf_atomic_set(&ipa_ctx->pipes_disabled, 1);
qdf_atomic_set(&ipa_ctx->autonomy_disabled, 1);
ipa_ctx->wdi_enabled = false;
/* Setup IPA system pipes */
if (wlan_ipa_uc_sta_is_enabled(ipa_ctx->config)) {
ret = wlan_ipa_setup_sys_pipe(ipa_ctx);
if (ret)
goto fail_create_sys_pipe;
qdf_create_work(0, &ipa_ctx->mcc_work,
wlan_ipa_mcc_work_handler, ipa_ctx);
}
status = wlan_ipa_wdi_init(ipa_ctx);
if (status == QDF_STATUS_E_BUSY)
status = wlan_ipa_uc_send_wdi_control_msg(false);
if (status != QDF_STATUS_SUCCESS) {
if (status == QDF_STATUS_SUCCESS) {
/* Setup IPA system pipes */
if (wlan_ipa_uc_sta_is_enabled(ipa_ctx->config)) {
ret = wlan_ipa_setup_sys_pipe(ipa_ctx);
if (ret)
goto ipa_wdi_destroy;
qdf_create_work(0, &ipa_ctx->mcc_work,
wlan_ipa_mcc_work_handler,
ipa_ctx);
}
} else if (status == QDF_STATUS_E_BUSY) {
ret = wlan_ipa_uc_send_wdi_control_msg(false);
if (ret) {
ipa_err("IPA WDI msg send failed: ret=%d", ret);
goto ipa_wdi_destroy;
}
} else {
ipa_err("IPA WDI init failed: ret=%d", status);
goto fail_create_sys_pipe;
goto ipa_wdi_destroy;
}
} else {
ret = wlan_ipa_setup_sys_pipe(ipa_ctx);
if (ret)
goto fail_create_sys_pipe;
goto ipa_wdi_destroy;
}
qdf_event_create(&ipa_ctx->ipa_resource_comp);
@@ -3049,7 +3055,7 @@ QDF_STATUS wlan_ipa_setup(struct wlan_ipa_priv *ipa_ctx,
return QDF_STATUS_SUCCESS;
fail_create_sys_pipe:
ipa_wdi_destroy:
wlan_ipa_wdi_destroy_rm(ipa_ctx);
fail_setup_rm:
@@ -3212,6 +3218,18 @@ static void wlan_ipa_uc_loaded_handler(struct wlan_ipa_priv *ipa_ctx)
ipa_err("qdf_dev is null");
return;
}
if (wlan_ipa_uc_sta_is_enabled(ipa_ctx->config)) {
/* Setup IPA system pipes */
status = wlan_ipa_setup_sys_pipe(ipa_ctx);
if (status) {
ipa_err("Fail to setup sys pipes (status=%d)", status);
return;
}
qdf_create_work(0, &ipa_ctx->mcc_work,
wlan_ipa_mcc_work_handler, ipa_ctx);
}
/* Connect pipe */
status = wlan_ipa_wdi_setup(ipa_ctx, qdf_dev);
if (status) {