aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
authorSean Paul <seanpaul@chromium.org>2018-03-28 14:41:23 -0400
committerRob Clark <robdclark@gmail.com>2018-06-04 12:50:25 -0400
commite765ea77b0fd51152e07aa4e6850b81552b76da3 (patch)
tree2ccd79af414c670386c2c4ed29abc1faf4df07a4 /drivers/gpu
parentdb8f4d5d32334b061d0d9c53ec86480377daeaf0 (diff)
drm/msm: Issue queued events when disabling crtc
Ensure that any queued events are issued when disabling the crtc. This avoids timeouts when we come back and wait for dependencies (like the previous frame's flip_done). Changes in v2: - None Changes in v3: - Rebased on Archit's private_obj set Changes in v4: - None Reviewed-by: Archit Taneja <architt@codeaurora.org> Signed-off-by: Sean Paul <seanpaul@chromium.org> Signed-off-by: Rob Clark <robdclark@gmail.com>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c
index 76b96081916f..10271359789e 100644
--- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c
+++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c
@@ -430,6 +430,7 @@ static void mdp5_crtc_atomic_disable(struct drm_crtc *crtc,
430 struct mdp5_crtc_state *mdp5_cstate = to_mdp5_crtc_state(crtc->state); 430 struct mdp5_crtc_state *mdp5_cstate = to_mdp5_crtc_state(crtc->state);
431 struct mdp5_kms *mdp5_kms = get_kms(crtc); 431 struct mdp5_kms *mdp5_kms = get_kms(crtc);
432 struct device *dev = &mdp5_kms->pdev->dev; 432 struct device *dev = &mdp5_kms->pdev->dev;
433 unsigned long flags;
433 434
434 DBG("%s", crtc->name); 435 DBG("%s", crtc->name);
435 436
@@ -445,6 +446,14 @@ static void mdp5_crtc_atomic_disable(struct drm_crtc *crtc,
445 mdp_irq_unregister(&mdp5_kms->base, &mdp5_crtc->err); 446 mdp_irq_unregister(&mdp5_kms->base, &mdp5_crtc->err);
446 pm_runtime_put_sync(dev); 447 pm_runtime_put_sync(dev);
447 448
449 if (crtc->state->event && !crtc->state->active) {
450 WARN_ON(mdp5_crtc->event);
451 spin_lock_irqsave(&mdp5_kms->dev->event_lock, flags);
452 drm_crtc_send_vblank_event(crtc, crtc->state->event);
453 crtc->state->event = NULL;
454 spin_unlock_irqrestore(&mdp5_kms->dev->event_lock, flags);
455 }
456
448 mdp5_crtc->enabled = false; 457 mdp5_crtc->enabled = false;
449} 458}
450 459