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

Commit 61fa0989 authored by Sivan Reinstein's avatar Sivan Reinstein Committed by Matt Wagantall
Browse files

msm: ipa: remove uC pipe reset before connecting a pipe



uC WA for pipe reset before issuing a pipe connect is no longer
required for IPA HW version greater than v2.5.
A new optional dts entry (qcom,skip-uc-pipe-reset) can be added
to specify explicitly that uC reset can be skipped.

Change-Id: I207a031ff2b69396dac030d7b8a49ceba3dae222
Signed-off-by: default avatarSivan Reinstein <sivanr@codeaurora.org>
Acked-by: default avatarDavid Arinzon <darinzon@qti.qualcomm.com>
parent b2a4d0b5
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -42,6 +42,8 @@ memory allocation over a PCIe bridge
                                is in remote mode.
- qcom,modem-cfg-emb-pipe-flt:  Boolean context flag to determine if modem
                                configures embedded pipe filtering rules
- qcom,skip-uc-pipe-reset:      Boolean context flag to indicate whether
                                a pipe reset via the IPA uC is required

IPA pipe sub nodes (A2 static pipes configurations):

+8 −0
Original line number Diff line number Diff line
@@ -3010,6 +3010,7 @@ static int ipa_init(const struct ipa_plat_drv_res *resource_p,
	ipa_ctx->ipa_bam_remote_mode = resource_p->ipa_bam_remote_mode;
	ipa_ctx->modem_cfg_emb_pipe_flt = resource_p->modem_cfg_emb_pipe_flt;
	ipa_ctx->wan_rx_ring_size = resource_p->wan_rx_ring_size;
	ipa_ctx->skip_uc_pipe_reset = resource_p->skip_uc_pipe_reset;

	/* default aggregation parameters */
	ipa_ctx->aggregation_type = IPA_MBIM_16;
@@ -3565,6 +3566,13 @@ static int get_ipa_dts_configuration(struct platform_device *pdev,
			ipa_drv_res->modem_cfg_emb_pipe_flt
			? "True" : "False");

	ipa_drv_res->skip_uc_pipe_reset =
		of_property_read_bool(pdev->dev.of_node,
		"qcom,skip-uc-pipe-reset");
	IPADBG(": skip uC pipe reset = %s\n",
		ipa_drv_res->skip_uc_pipe_reset
		? "True" : "False");

	/* Get IPA wrapper address */
	resource = platform_get_resource_byname(pdev, IORESOURCE_MEM,
			"ipa-base");
+7 −4
Original line number Diff line number Diff line
@@ -490,10 +490,13 @@ int ipa_sps_connect_safe(struct sps_pipe *h, struct sps_connect *connect,
{
	int res;

	if (ipa_ctx->ipa_hw_type > IPA_HW_v2_5 || ipa_ctx->skip_uc_pipe_reset) {
		IPADBG("uC pipe reset is not required\n");
	} else {
		res = ipa_uc_reset_pipe(ipa_client);
		if (res)
			return res;

	}
	return sps_connect(h, connect);
}
EXPORT_SYMBOL(ipa_sps_connect_safe);
+3 −0
Original line number Diff line number Diff line
@@ -1109,6 +1109,7 @@ struct ipa_sps_pm {
 * @uc_ctx: uC interface context
 * @uc_wdi_ctx: WDI specific fields for uC interface
 * @ipa_num_pipes: The number of pipes used by IPA HW
 * @skip_uc_pipe_reset: Indicates whether pipe reset via uC needs to be avoided

 * IPA context - holds all relevant info about IPA driver and its state
 */
@@ -1199,6 +1200,7 @@ struct ipa_context {

	struct ipa_uc_wdi_ctx uc_wdi_ctx;
	u32 wan_rx_ring_size;
	bool skip_uc_pipe_reset;
};

/**
@@ -1247,6 +1249,7 @@ struct ipa_plat_drv_res {
	bool ipa_bam_remote_mode;
	bool modem_cfg_emb_pipe_flt;
	u32 wan_rx_ring_size;
	bool skip_uc_pipe_reset;
};

struct ipa_mem_partition {