60 lines
1.9 KiB
Diff
60 lines
1.9 KiB
Diff
|
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
|
||
|
--- a/drivers/gpu/drm/vc4/vc4_plane.c
|
||
|
+++ b/drivers/gpu/drm/vc4/vc4_plane.c
|
||
|
@@ -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
|
||
|
|