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>
This commit is contained in:
parent
db8f4d5d32
commit
e765ea77b0
|
@ -430,6 +430,7 @@ static void mdp5_crtc_atomic_disable(struct drm_crtc *crtc,
|
|||
struct mdp5_crtc_state *mdp5_cstate = to_mdp5_crtc_state(crtc->state);
|
||||
struct mdp5_kms *mdp5_kms = get_kms(crtc);
|
||||
struct device *dev = &mdp5_kms->pdev->dev;
|
||||
unsigned long flags;
|
||||
|
||||
DBG("%s", crtc->name);
|
||||
|
||||
|
@ -445,6 +446,14 @@ static void mdp5_crtc_atomic_disable(struct drm_crtc *crtc,
|
|||
mdp_irq_unregister(&mdp5_kms->base, &mdp5_crtc->err);
|
||||
pm_runtime_put_sync(dev);
|
||||
|
||||
if (crtc->state->event && !crtc->state->active) {
|
||||
WARN_ON(mdp5_crtc->event);
|
||||
spin_lock_irqsave(&mdp5_kms->dev->event_lock, flags);
|
||||
drm_crtc_send_vblank_event(crtc, crtc->state->event);
|
||||
crtc->state->event = NULL;
|
||||
spin_unlock_irqrestore(&mdp5_kms->dev->event_lock, flags);
|
||||
}
|
||||
|
||||
mdp5_crtc->enabled = false;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue