Add patch to fix desktop lockups on RPi (vc4) RHBZ# 1389163

This commit is contained in:
Peter Robinson 2017-03-01 13:31:29 +00:00
parent 9b39e16c8f
commit 2153e0b50f
2 changed files with 64 additions and 0 deletions

View File

@ -538,6 +538,8 @@ Patch434: 0001-i2c-bcm2835-Debug-test-for-curr_msg.patch
# Upstream fixes for i2c/serial/ethernet MAC addresses
Patch435: bcm283x-fixes.patch
Patch436: vc4-fix-vblank-cursor-update-issue.patch
# http://www.spinics.net/lists/arm-kernel/msg552554.html
Patch438: arm-imx6-hummingboard2.patch
@ -2179,6 +2181,9 @@ fi
#
#
%changelog
* Wed Mar 1 2017 Peter Robinson <pbrobinson@fedoraproject.org>
- Add patch to fix desktop lockups on RPi (vc4) RHBZ# 1389163
* Tue Feb 28 2017 Justin M. Forbes <jforbes@fedoraproject.org>
- Fix kernel-devel virtual provide

View File

@ -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