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

Commit d8746791 authored by Mohammed Siddiq's avatar Mohammed Siddiq Committed by Gerrit - the friendly Code Review server
Browse files

cnss2: retry mhi fast suspend if mhi returns EBUSY



Add code to retry mhi fast suspend if mhi layer has pending
packets and returns EBUSY.

Change-Id: Ifb9ee8371c092db3fd7bece2de1e7166ac6f303f
Signed-off-by: default avatarMohammed Siddiq <msiddiq@codeaurora.org>
parent 0a69438b
Loading
Loading
Loading
Loading
+10 −10
Original line number Diff line number Diff line
@@ -1737,20 +1737,20 @@ static int cnss_pci_set_mhi_state(struct cnss_pci_data *pci_priv,
		break;
	case CNSS_MHI_SUSPEND:
		mutex_lock(&pci_priv->mhi_ctrl->pm_mutex);
retry:
		if (pci_priv->drv_connected_last) {
			ret = mhi_pm_fast_suspend(pci_priv->mhi_ctrl, true);
		} else {
			ret = mhi_pm_suspend(pci_priv->mhi_ctrl);
		}
		/* in some corner case, when cnss try to suspend,
		 * there is still packets pending in mhi layer,
		 * so retry suspend to save roll back effort.
		 */
			while (ret == -EBUSY && retry < MHI_SUSPEND_RETRY_CNT) {
		if (ret == -EBUSY && retry++ < MHI_SUSPEND_RETRY_CNT) {
			usleep_range(5000, 6000);
				retry++;
			cnss_pr_err("mhi is busy, retry #%u", retry);
				ret = mhi_pm_suspend(pci_priv->mhi_ctrl);
			}
			goto retry;
		}
		mutex_unlock(&pci_priv->mhi_ctrl->pm_mutex);
		break;