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

Commit cfc077d3 authored by Skylar Chang's avatar Skylar Chang
Browse files

msm: ipa: add retry to channel stop



Add a retry mechanism when trying to stop a producer pipe.
This is to avoid a timeout on stop channel when IPA is busy.

Change-Id: If9e0df976def1195171730624e02c185142e2964
CRs-Fixed: 2024084
Acked-by: default avatarAdy Abraham <adya@qti.qualcomm.com>
Signed-off-by: default avatarSkylar Chang <chiaweic@codeaurora.org>
parent 8672e9c8
Loading
Loading
Loading
Loading
+8 −11
Original line number Diff line number Diff line
@@ -4242,11 +4242,6 @@ int ipa3_stop_gsi_channel(u32 clnt_hdl)

	memset(&mem, 0, sizeof(mem));

	if (IPA_CLIENT_IS_PROD(ep->client)) {
		res = gsi_stop_channel(ep->gsi_chan_hdl);
		goto end_sequence;
	}

	for (i = 0; i < IPA_GSI_CHANNEL_STOP_MAX_RETRY; i++) {
		IPADBG("Calling gsi_stop_channel\n");
		res = gsi_stop_channel(ep->gsi_chan_hdl);
@@ -4254,13 +4249,15 @@ int ipa3_stop_gsi_channel(u32 clnt_hdl)
		if (res != -GSI_STATUS_AGAIN && res != -GSI_STATUS_TIMED_OUT)
			goto end_sequence;

		IPADBG("Inject a DMA_TASK with 1B packet to IPA and retry\n");
		if (IPA_CLIENT_IS_CONS(ep->client)) {
			IPADBG("Inject a DMA_TASK with 1B packet to IPA\n");
			/* Send a 1B packet DMA_TASK to IPA and try again */
			res = ipa3_inject_dma_task_for_gsi();
			if (res) {
				IPAERR("Failed to inject DMA TASk for GSI\n");
				goto end_sequence;
			}
		}

		/* sleep for short period to flush IPA */
		usleep_range(IPA_GSI_CHANNEL_STOP_SLEEP_MIN_USEC,