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

此提交包含在:
qctecmdr
2021-06-01 20:21:34 -07:00
提交者 Gerrit - the friendly Code Review server
當前提交 8bbc6f2698
共有 8 個檔案被更改,包括 58 行新增22 行删除

查看文件

@@ -1581,7 +1581,7 @@ static void sde_kms_wait_for_commit_done(struct msm_kms *kms,
ret = sde_encoder_wait_for_event(encoder, MSM_ENC_COMMIT_DONE);
if (ret && ret != -EWOULDBLOCK) {
SDE_ERROR("wait for commit done returned %d\n", ret);
sde_crtc_request_frame_reset(crtc);
sde_crtc_request_frame_reset(crtc, encoder);
break;
}
@@ -1601,7 +1601,7 @@ static void sde_kms_prepare_fence(struct msm_kms *kms,
{
struct drm_crtc *crtc;
struct drm_crtc_state *old_crtc_state;
int i, rc;
int i;
if (!kms || !old_state || !old_state->dev || !old_state->acquire_ctx) {
SDE_ERROR("invalid argument(s)\n");
@@ -1609,15 +1609,6 @@ static void sde_kms_prepare_fence(struct msm_kms *kms,
}
SDE_ATRACE_BEGIN("sde_kms_prepare_fence");
retry:
/* attempt to acquire ww mutex for connection */
rc = drm_modeset_lock(&old_state->dev->mode_config.connection_mutex,
old_state->acquire_ctx);
if (rc == -EDEADLK) {
drm_modeset_backoff(old_state->acquire_ctx);
goto retry;
}
/* old_state actually contains updated crtc pointers */
for_each_old_crtc_in_state(old_state, crtc, old_crtc_state, i) {
@@ -3565,6 +3556,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) {
@@ -3572,7 +3568,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);