|
@@ -6604,11 +6604,16 @@ static int ipa3_post_init(const struct ipa3_plat_drv_res *resource_p,
|
|
|
/* The following will retrieve and save the gsi fw version */
|
|
|
ipa_save_gsi_ver();
|
|
|
|
|
|
- if (ipahal_init(ipa3_ctx->ipa_hw_type, ipa3_ctx->mmio,
|
|
|
- ipa3_ctx->ipa_cfg_offset, ipa3_ctx->pdev)) {
|
|
|
- IPAERR("fail to init ipahal\n");
|
|
|
- result = -EFAULT;
|
|
|
- goto fail_ipahal;
|
|
|
+ /* IPA version 3.0 IPAHAL initialized at pre_init as there is no SMMU.
|
|
|
+ * In normal mode need to wait until SMMU is attached and
|
|
|
+ * thus initialization done here*/
|
|
|
+ if (ipa3_ctx->ipa_hw_type != IPA_HW_v3_0) {
|
|
|
+ if (ipahal_init(ipa3_ctx->ipa_hw_type, ipa3_ctx->mmio,
|
|
|
+ ipa3_ctx->ipa_cfg_offset, ipa3_ctx->pdev)) {
|
|
|
+ IPAERR("fail to init ipahal\n");
|
|
|
+ result = -EFAULT;
|
|
|
+ goto fail_ipahal;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
result = ipa3_init_hw();
|
|
@@ -7394,8 +7399,10 @@ static int ipa3_pre_init(const struct ipa3_plat_drv_res *resource_p,
|
|
|
result = -ENOMEM;
|
|
|
goto fail_mem_ctx;
|
|
|
}
|
|
|
-
|
|
|
- ipa3_ctx->fw_load_data.state = IPA_FW_LOAD_STATE_INIT;
|
|
|
+ /* If SMMU not support fw load state will be updated
|
|
|
+ * in probe function. Avoid overwriting in pre-init function */
|
|
|
+ if (ipa3_ctx->fw_load_data.state != IPA_FW_LOAD_STATE_SMMU_DONE)
|
|
|
+ ipa3_ctx->fw_load_data.state = IPA_FW_LOAD_STATE_INIT;
|
|
|
mutex_init(&ipa3_ctx->fw_load_data.lock);
|
|
|
|
|
|
ipa3_ctx->logbuf = ipc_log_context_create(IPA_IPC_LOG_PAGES, "ipa", 0);
|
|
@@ -7660,6 +7667,17 @@ static int ipa3_pre_init(const struct ipa3_plat_drv_res *resource_p,
|
|
|
ipa3_ctx->mmio,
|
|
|
resource_p->ipa_mem_size);
|
|
|
|
|
|
+ /* IPA version 3.0 IPAHAL used to load the firmwares and
|
|
|
+ * there is no SMMU so IPAHAL is initialized here.*/
|
|
|
+ if (ipa3_ctx->ipa_hw_type == IPA_HW_v3_0) {
|
|
|
+ if (ipahal_init(ipa3_ctx->ipa_hw_type, ipa3_ctx->mmio,
|
|
|
+ ipa3_ctx->ipa_cfg_offset, &ipa3_ctx->master_pdev->dev)) {
|
|
|
+ IPAERR("fail to init ipahal\n");
|
|
|
+ result = -EFAULT;
|
|
|
+ goto fail_remap;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/*
|
|
|
* Setup access for register collection/dump on crash
|
|
|
*/
|
|
@@ -7929,11 +7947,13 @@ static int ipa3_pre_init(const struct ipa3_plat_drv_res *resource_p,
|
|
|
goto fail_wwan_init;
|
|
|
}
|
|
|
|
|
|
- result = ipa3_rmnet_ctl_init();
|
|
|
- if (result) {
|
|
|
- IPAERR(":ipa3_rmnet_ctl_init err=%d\n", -result);
|
|
|
- result = -ENODEV;
|
|
|
- goto fail_rmnet_ctl_init;
|
|
|
+ if (ipa3_ctx->rmnet_ctl_enable) {
|
|
|
+ result = ipa3_rmnet_ctl_init();
|
|
|
+ if (result) {
|
|
|
+ IPAERR(":ipa3_rmnet_ctl_init err=%d\n", -result);
|
|
|
+ result = -ENODEV;
|
|
|
+ goto fail_rmnet_ctl_init;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
mutex_init(&ipa3_ctx->app_clock_vote.mutex);
|