| From 6d24c1c5918907ab78a5729b78c0d165deb3cc2b Mon Sep 17 00:00:00 2001 |
| From: Michael Zoran <mzoran@crowfest.net> |
| Date: Thu, 23 Feb 2017 17:54:31 -0800 |
| Subject: drm/vc4: Don't wait for vblank when updating the cursor |
| |
| Commonly used desktop environments such as xfce4 and gnome |
| on debian sid can flood the graphics drivers with cursor |
| updates. Because the current implementation is waiting |
| for a vblank between cursor updates, this will cause the |
| display to hang for a long time since a typical refresh |
| rate is only 60Hz. |
| |
| This is unnecessary and unexpected by user mode software, |
| so simply swap out the cursor frame buffer without waiting. |
| |
| Signed-off-by: Michael Zoran <mzoran@crowfest.net> |
| Reviewed-by: Eric Anholt <eric@anholt.net> |
| Link: http://patchwork.freedesktop.org/patch/msgid/20170224015431.24583-1-mzoran@crowfest.net |
| |
| diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c |
| index f7a229d..110224c 100644 |
| |
| |
| @@ -20,6 +20,7 @@ |
| |
| #include "vc4_drv.h" |
| #include "vc4_regs.h" |
| +#include "drm_atomic.h" |
| #include "drm_atomic_helper.h" |
| #include "drm_fb_cma_helper.h" |
| #include "drm_plane_helper.h" |
| @@ -769,12 +770,6 @@ vc4_update_plane(struct drm_plane *plane, |
| if (!plane_state) |
| goto out; |
| |
| - /* If we're changing the cursor contents, do that in the |
| - * normal vblank-synced atomic path. |
| - */ |
| - if (fb != plane_state->fb) |
| - goto out; |
| - |
| /* No configuring new scaling in the fast path. */ |
| if (crtc_w != plane_state->crtc_w || |
| crtc_h != plane_state->crtc_h || |
| @@ -783,6 +778,11 @@ vc4_update_plane(struct drm_plane *plane, |
| goto out; |
| } |
| |
| + if (fb != plane_state->fb) { |
| + drm_atomic_set_fb_for_plane(plane->state, fb); |
| + vc4_plane_async_set_fb(plane, fb); |
| + } |
| + |
| /* Set the cursor's position on the screen. This is the |
| * expected change from the drm_mode_cursor_universal() |
| * helper. |
| -- |
| cgit v0.10.2 |
| |