]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blob - releases/4.4.36/drm-radeon-ensure-vblank-interrupt-is-enabled-on-dpms-transition-to-on.patch
4.9-stable patches
[thirdparty/kernel/stable-queue.git] / releases / 4.4.36 / drm-radeon-ensure-vblank-interrupt-is-enabled-on-dpms-transition-to-on.patch
1 From michel@daenzer.net Tue Nov 29 16:29:26 2016
2 From: Michel Dänzer <michel@daenzer.net>
3 Date: Tue, 29 Nov 2016 18:40:20 +0900
4 Subject: [PATCH] drm/radeon: Ensure vblank interrupt is enabled on DPMS transition to on
5 To: stable@vger.kernel.org
6 Cc: Max Staudt <mstaudt@suse.de>
7 Message-ID: <20161129094020.27353-1-michel@daenzer.net>
8
9 From: Michel Dänzer <michel@daenzer.net>
10
11 NOTE: This patch only applies to 4.5.y or older kernels. With newer
12 kernels, this problem cannot happen because the driver now uses
13 drm_crtc_vblank_on/off instead of drm_vblank_pre/post_modeset[0]. I
14 consider this patch safer for older kernels than backporting the API
15 change, because drm_crtc_vblank_on/off had various issues in older
16 kernels, and I'm not sure all fixes for those have been backported to
17 all stable branches where this patch could be applied.
18
19 ---------------------
20
21 Fixes the vblank interrupt being disabled when it should be on, which
22 can cause at least the following symptoms:
23
24 * Hangs when running 'xset dpms force off' in a GNOME session with
25 gnome-shell using DRI2.
26 * RandR 1.4 slave outputs freezing with garbage displayed using
27 xf86-video-ati 7.8.0 or newer.
28
29 [0] See upstream commit:
30
31 commit 777e3cbc791f131806d9bf24b3325637c7fc228d
32 Author: Daniel Vetter <daniel.vetter@ffwll.ch>
33 Date: Thu Jan 21 11:08:57 2016 +0100
34
35 drm/radeon: Switch to drm_vblank_on/off
36
37 Reported-and-Tested-by: Max Staudt <mstaudt@suse.de>
38 Reviewed-by: Daniel Vetter <daniel@ffwll.ch>
39 Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
40 Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
41 ---
42 drivers/gpu/drm/radeon/atombios_crtc.c | 2 ++
43 drivers/gpu/drm/radeon/radeon_legacy_crtc.c | 2 ++
44 2 files changed, 4 insertions(+)
45
46 --- a/drivers/gpu/drm/radeon/atombios_crtc.c
47 +++ b/drivers/gpu/drm/radeon/atombios_crtc.c
48 @@ -275,6 +275,8 @@ void atombios_crtc_dpms(struct drm_crtc
49 atombios_enable_crtc_memreq(crtc, ATOM_ENABLE);
50 atombios_blank_crtc(crtc, ATOM_DISABLE);
51 drm_vblank_post_modeset(dev, radeon_crtc->crtc_id);
52 + /* Make sure vblank interrupt is still enabled if needed */
53 + radeon_irq_set(rdev);
54 radeon_crtc_load_lut(crtc);
55 break;
56 case DRM_MODE_DPMS_STANDBY:
57 --- a/drivers/gpu/drm/radeon/radeon_legacy_crtc.c
58 +++ b/drivers/gpu/drm/radeon/radeon_legacy_crtc.c
59 @@ -331,6 +331,8 @@ static void radeon_crtc_dpms(struct drm_
60 WREG32_P(RADEON_CRTC_EXT_CNTL, crtc_ext_cntl, ~(mask | crtc_ext_cntl));
61 }
62 drm_vblank_post_modeset(dev, radeon_crtc->crtc_id);
63 + /* Make sure vblank interrupt is still enabled if needed */
64 + radeon_irq_set(rdev);
65 radeon_crtc_load_lut(crtc);
66 break;
67 case DRM_MODE_DPMS_STANDBY: