Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a6e96b9d authored by qctecmdr Service's avatar qctecmdr Service Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: ipa4: initialize IPAHAL at ipa_pre_init()"

parents 3c59393d 1b189876
Loading
Loading
Loading
Loading
+32 −8
Original line number Diff line number Diff line
@@ -4562,13 +4562,20 @@ static int ipa3_post_init(const struct ipa3_plat_drv_res *resource_p,
	/* move proxy vote for modem on ipa3_post_init */
	if (ipa3_ctx->ipa_hw_type != IPA_HW_v4_0)
		ipa3_proxy_clk_vote();
	/* SMMU was already attached if used, safe to do allocations */

	/*
	 * In Virtual mode, 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->ipa3_hw_mode != IPA_HW_MODE_VIRTUAL) {
		if (ipahal_init(ipa3_ctx->ipa_hw_type, ipa3_ctx->mmio,
			ipa3_ctx->pdev)) {
			IPAERR("fail to init ipahal\n");
			result = -EFAULT;
			goto fail_ipahal;
		}
	}

	result = ipa3_init_hw();
	if (result) {
@@ -4797,9 +4804,9 @@ static int ipa3_post_init(const struct ipa3_plat_drv_res *resource_p,
	ipa3_free_dma_task_for_gsi();
fail_dma_task:
fail_init_hw:
	if (ipa3_ctx->ipa3_hw_mode != IPA_HW_MODE_VIRTUAL)
		ipahal_destroy();
fail_ipahal:

	return result;
}

@@ -5252,6 +5259,20 @@ static int ipa3_pre_init(const struct ipa3_plat_drv_res *resource_p,
		goto fail_remap;
	}

	/*
	 * In Virtual mode, IPAHAL used to load the firmwares
	 * and there is no SMMU so IPAHAL is initialized here.
	 */
	if (ipa3_ctx->ipa3_hw_mode == IPA_HW_MODE_VIRTUAL) {
		if (ipahal_init(ipa3_ctx->ipa_hw_type,
				ipa3_ctx->mmio,
				&(ipa3_ctx->master_pdev->dev))) {
			IPAERR("fail to init ipahal\n");
			result = -EFAULT;
			goto fail_ipahal_init;
		}
	}

	mutex_init(&ipa3_ctx->ipa3_active_clients.mutex);

	IPA_ACTIVE_CLIENTS_PREP_SPECIAL(log_info, "PROXY_CLK_VOTE");
@@ -5538,6 +5559,9 @@ static int ipa3_pre_init(const struct ipa3_plat_drv_res *resource_p,
fail_create_transport_wq:
	destroy_workqueue(ipa3_ctx->power_mgmt_wq);
fail_init_hw:
	if (ipa3_ctx->ipa3_hw_mode == IPA_HW_MODE_VIRTUAL)
		ipahal_destroy();
fail_ipahal_init:
	iounmap(ipa3_ctx->mmio);
fail_remap:
	ipa3_disable_clks();