X-Git-Url: http://git.openwrt.org/?a=blobdiff_plain;f=target%2Flinux%2Fbrcm2708%2Fpatches-4.19%2F950-0749-drm-vc4-Resolve-the-vblank-warnings-on-mode-switchin.patch;fp=target%2Flinux%2Fbrcm2708%2Fpatches-4.19%2F950-0749-drm-vc4-Resolve-the-vblank-warnings-on-mode-switchin.patch;h=0000000000000000000000000000000000000000;hb=67dcc43f3a22dc3a7ac07a7065971b426feeb043;hp=a80cfba3e4c06bbeeb7743d9c822cdfebaa760b7;hpb=47a93a810f78adce5a130d287f82b28e9b54313c;p=openwrt%2Fstaging%2Fchunkeey.git diff --git a/target/linux/brcm2708/patches-4.19/950-0749-drm-vc4-Resolve-the-vblank-warnings-on-mode-switchin.patch b/target/linux/brcm2708/patches-4.19/950-0749-drm-vc4-Resolve-the-vblank-warnings-on-mode-switchin.patch deleted file mode 100644 index a80cfba3e4..0000000000 --- a/target/linux/brcm2708/patches-4.19/950-0749-drm-vc4-Resolve-the-vblank-warnings-on-mode-switchin.patch +++ /dev/null @@ -1,100 +0,0 @@ -From df276f0a5aa865c7926d9d148605d1a59d1d4fbb Mon Sep 17 00:00:00 2001 -From: Dave Stevenson -Date: Thu, 25 Jul 2019 17:27:44 +0100 -Subject: [PATCH 749/806] drm/vc4: Resolve the vblank warnings on mode - switching - -The details over when and how a driver is to service the -vblank events are sketchy, and the fkms driver was triggering -a kernel warning every time the crtc was enabled or disabled. - -Copy the event handling as used by the vc4-kms driver slightly -more closely, and we avoid the warnings. - -https://github.com/raspberrypi/linux/issues/3020 - -Signed-off-by: Dave Stevenson ---- - drivers/gpu/drm/vc4/vc4_firmware_kms.c | 48 ++++++++++++++++++-------- - 1 file changed, 33 insertions(+), 15 deletions(-) - ---- a/drivers/gpu/drm/vc4/vc4_firmware_kms.c -+++ b/drivers/gpu/drm/vc4/vc4_firmware_kms.c -@@ -933,6 +933,7 @@ static void vc4_crtc_mode_set_nofb(struc - - static void vc4_crtc_disable(struct drm_crtc *crtc, struct drm_crtc_state *old_state) - { -+ struct drm_device *dev = crtc->dev; - struct drm_plane *plane; - - DRM_DEBUG_KMS("[CRTC:%d] vblanks off.\n", -@@ -948,6 +949,35 @@ static void vc4_crtc_disable(struct drm_ - - drm_atomic_crtc_for_each_plane(plane, crtc) - vc4_plane_atomic_disable(plane, plane->state); -+ -+ /* -+ * Make sure we issue a vblank event after disabling the CRTC if -+ * someone was waiting it. -+ */ -+ if (crtc->state->event) { -+ unsigned long flags; -+ -+ spin_lock_irqsave(&dev->event_lock, flags); -+ drm_crtc_send_vblank_event(crtc, crtc->state->event); -+ crtc->state->event = NULL; -+ spin_unlock_irqrestore(&dev->event_lock, flags); -+ } -+} -+ -+static void vc4_crtc_consume_event(struct drm_crtc *crtc) -+{ -+ struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc); -+ struct drm_device *dev = crtc->dev; -+ 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_enable(struct drm_crtc *crtc, struct drm_crtc_state *old_state) -@@ -957,6 +987,7 @@ static void vc4_crtc_enable(struct drm_c - DRM_DEBUG_KMS("[CRTC:%d] vblanks on.\n", - crtc->base.id); - drm_crtc_vblank_on(crtc); -+ vc4_crtc_consume_event(crtc); - - /* Unblank the planes (if they're supposed to be displayed). */ - drm_atomic_crtc_for_each_plane(plane, crtc) -@@ -1028,23 +1059,10 @@ 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; -- - DRM_DEBUG_KMS("[CRTC:%d] crtc_atomic_flush.\n", - crtc->base.id); -- 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); -- } -+ if (crtc->state->active && old_state->active && crtc->state->event) -+ vc4_crtc_consume_event(crtc); - } - - static void vc4_crtc_handle_page_flip(struct vc4_crtc *vc4_crtc)