diff options
author | Peter Robinson <pbrobinson@gmail.com> | 2017-03-01 13:33:14 +0000 |
---|---|---|
committer | Peter Robinson <pbrobinson@gmail.com> | 2017-03-01 13:33:14 +0000 |
commit | b83da9ac2e901585747c9755628b4f42acec4da2 (patch) | |
tree | d6e16402e598198e50c0461856782fbc95462fa5 /vc4-fix-vblank-cursor-update-issue.patch | |
parent | a990f2f65dc51b9e1dad258f1793def475d941ce (diff) | |
download | kernel-b83da9ac2e901585747c9755628b4f42acec4da2.tar.gz kernel-b83da9ac2e901585747c9755628b4f42acec4da2.tar.xz kernel-b83da9ac2e901585747c9755628b4f42acec4da2.zip |
Add patch to fix desktop lockups on RPi (vc4) RHBZ# 1389163
Diffstat (limited to 'vc4-fix-vblank-cursor-update-issue.patch')
-rw-r--r-- | vc4-fix-vblank-cursor-update-issue.patch | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/vc4-fix-vblank-cursor-update-issue.patch b/vc4-fix-vblank-cursor-update-issue.patch new file mode 100644 index 000000000..8537d67ca --- /dev/null +++ b/vc4-fix-vblank-cursor-update-issue.patch @@ -0,0 +1,59 @@ +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 + |