123456789101112131415161718192021222324252627282930313233343536373839404142 |
- From 5aecf0a83cc2271427aad4f1a313a3c01e581c03 Mon Sep 17 00:00:00 2001
- From: Eric Anholt <eric@anholt.net>
- Date: Thu, 2 Feb 2017 09:42:18 -0800
- Subject: [PATCH] drm/vc4: Fix sending of page flip completion events in FKMS
- mode.
- In the rewrite of vc4_crtc.c for fkms, I dropped the part of the
- CRTC's atomic flush handler that moved the completion event from the
- proposed atomic state change to the CRTC's current state. That meant
- that when full screen pageflipping happened (glxgears -fullscreen in
- X, compton, por weston), the app would end up blocked firever waiting
- to draw its next frame.
- Signed-off-by: Eric Anholt <eric@anholt.net>
- ---
- drivers/gpu/drm/vc4/vc4_firmware_kms.c | 15 +++++++++++++++
- 1 file changed, 15 insertions(+)
- --- a/drivers/gpu/drm/vc4/vc4_firmware_kms.c
- +++ b/drivers/gpu/drm/vc4/vc4_firmware_kms.c
- @@ -312,6 +312,21 @@ static int vc4_crtc_atomic_check(struct
- static void vc4_crtc_atomic_flush(struct drm_crtc *crtc,
- struct drm_crtc_state *old_state)
- {
- + struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc);
- + struct drm_device *dev = crtc->dev;
- +
- + if (crtc->state->event) {
- + unsigned long flags;
- +
- + crtc->state->event->pipe = drm_crtc_index(crtc);
- +
- + WARN_ON(drm_crtc_vblank_get(crtc) != 0);
- +
- + spin_lock_irqsave(&dev->event_lock, flags);
- + vc4_crtc->event = crtc->state->event;
- + crtc->state->event = NULL;
- + spin_unlock_irqrestore(&dev->event_lock, flags);
- + }
- }
-
- static void vc4_crtc_handle_page_flip(struct vc4_crtc *vc4_crtc)
|