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

Commit bb6f15ba authored by Yashwanth's avatar Yashwanth
Browse files

disp: msm: sde: flush commit thread queue during pm suspend



Following is the sequence during which issue is observed:

1) After suspend, resume commit is with doze suspend mode
(LP2) but kickoff didn't begin.
2) At the same time, runtime pm suspend is triggered which
makes idle request on pm suspend/resume thread.
3) Since the kickoff has not yet started on commit thread,
pending kickoff count is not updated and idle power
collapse sequence is started from pm suspend.
4) As part of idle, irqs are turned off from pm suspend
thread which are turned on commit thread after kickoff
before pp tx irq arrives.

In such cases, during pm suspend, commit thread workqueue
is flushed before encoder idle request to prevent irq's
from getting turned off before the transfer is complete to
avoid inconsistent state.

Change-Id: I417ece0ae7021b0fc5005e262a0d87e43ac729be
Signed-off-by: default avatarYashwanth <yvulapu@codeaurora.org>
parent fbe759f9
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -3492,6 +3492,11 @@ static void _sde_kms_pm_suspend_idle_helper(struct sde_kms *sde_kms,
		if (sde_encoder_in_clone_mode(conn->encoder))
			continue;

		crtc_id = drm_crtc_index(conn->state->crtc);
		if (priv->disp_thread[crtc_id].thread)
			kthread_flush_worker(
				&priv->disp_thread[crtc_id].worker);

		ret = sde_encoder_wait_for_event(conn->encoder,
						MSM_ENC_TX_COMPLETE);
		if (ret && ret != -EWOULDBLOCK) {
@@ -3499,7 +3504,6 @@ static void _sde_kms_pm_suspend_idle_helper(struct sde_kms *sde_kms,
				"[conn: %d] wait for commit done returned %d\n",
				conn->base.id, ret);
		} else if (!ret) {
			crtc_id = drm_crtc_index(conn->state->crtc);
			if (priv->event_thread[crtc_id].thread)
				kthread_flush_worker(
					&priv->event_thread[crtc_id].worker);