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

Commit 29c57b48 authored by Nitesh Gupta's avatar Nitesh Gupta Committed by Gauri Joshi
Browse files

msm: mhi_dev: Poll for ipa_dma_disable during MHI suspend



Poll for ipa_dma_disable prior to entering mhi suspend, until it returns
success. this is to prevent IPA disable failure in case on
pending transfers.

Change-Id: I38143284447b86ce34c47e100e6fe0c23cf28f0b
Signed-off-by: default avatarSubramanian Ananthanarayanan <skananth@codeaurora.org>
Signed-off-by: default avatarNitesh Gupta <nitegupt@codeaurora.org>
Signed-off-by: default avatarGauri Joshi <gaurjosh@codeaurora.org>
parent 1afca709
Loading
Loading
Loading
Loading
+21 −5
Original line number Diff line number Diff line
@@ -23,6 +23,9 @@
#define MHI_SM_FUNC_EXIT() MHI_SM_DBG("EXIT\n")

#define PCIE_EP_TIMER_US		500000000
#define MHI_IPA_DISABLE_DELAY_MS	10
#define MHI_IPA_DISABLE_COUNTER		20


static inline const char *mhi_sm_dev_event_str(enum mhi_dev_event state)
{
@@ -591,7 +594,7 @@ static int mhi_sm_prepare_suspend(enum mhi_dev_state new_state)
{
	enum mhi_dev_state old_state;
	struct ep_pcie_inactivity inact_param;
	int res = 0, rc;
	int res = 0, rc, wait_timeout = 0;

	MHI_SM_DBG("Switching event:%d\n", new_state);

@@ -668,11 +671,24 @@ static int mhi_sm_prepare_suspend(enum mhi_dev_state new_state)
			 (new_state == MHI_DEV_M3_STATE))) {
		if (mhi_sm_ctx->mhi_dev->use_ipa) {
			MHI_SM_DBG("Disable IPA with ipa_dma_disable()\n");
			while (wait_timeout < MHI_IPA_DISABLE_COUNTER) {
				/* wait for the disable to finish */
				res = ipa_dma_disable();
			if (res) {
				MHI_SM_ERR("IPA disable failed\n");
				if (!res)
					break;
				MHI_SM_ERR
					("IPA disable fail cnt:%d\n",
						wait_timeout);
				msleep(MHI_IPA_DISABLE_DELAY_MS);
				wait_timeout++;
			}

			if (wait_timeout >= MHI_IPA_DISABLE_COUNTER) {
				MHI_SM_ERR
					("Fail to disable IPA for M3\n");
				goto exit;
			}
			MHI_SM_ERR("IPA DMA successfully disabled\n");
		}
	}