Workaround for a bug in xrandr
Michel Dänzer
michel at daenzer.net
Mon Apr 28 02:35:45 PDT 2014
On 27.04.2014 02:48, Christian König wrote:
> Hi everyone,
>
> today I noticed that with X server 1.15.1 and current xf86-video-ati
> master that page flipping won't work any more after I switched the mode
> using xrandr. It looks like Ilija Hadzic already stumbled over the same
> issue back in 2012 but didn't reported it upstream (at least I couldn't
> find any reference to it):
> https://github.com/ihadzic/vcrtcm-doc/blob/master/patches/X_1_12/0001-xf86-crtc-HACK-do-not-touch-DPMS-in-xf86DisableUnuse.patch
>
>
> Basic problem is that xrandr calls xf86DisableUnusedFunctions while
> switching the mode which in turn calls the DPMS off function which is
> then never turned on again. This results in both page flipping getting
> disabled and vblank handling not working any more.
>
> Attached is a workaround for xf86-video-ati which just turn DPMS on
> again when the mode set happens, but I'm pretty sure that this isn't the
> right solution to the problem.
>
> Ideas?
Someone on the xorg-devel mailing list might have one, adding to Cc.
> From 18b745f0ea94c3f7048d11ef5b86b652019c9fed Mon Sep 17 00:00:00 2001
> From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig at amd.com>
> Date: Sat, 26 Apr 2014 19:39:46 +0200
> Subject: [PATCH] workaround for xrandr turning DPMS off, but never on again
> MIME-Version: 1.0
> Content-Type: text/plain; charset=UTF-8
> Content-Transfer-Encoding: 8bit
>
> Signed-off-by: Christian König <christian.koenig at amd.com>
> ---
> src/drmmode_display.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/src/drmmode_display.c b/src/drmmode_display.c
> index fc99128..a0a1ea1 100644
> --- a/src/drmmode_display.c
> +++ b/src/drmmode_display.c
> @@ -457,6 +457,9 @@ drmmode_set_mode_major(xf86CrtcPtr crtc, DisplayModePtr mode,
> uint32_t tiling_flags = 0;
> int height;
>
> + /* workaround for xrandr turning DPMS off, but never on again */
> + drmmode_crtc_dpms(crtc, DPMSModeOn);
> +
> if (info->allowColorTiling) {
> if (info->ChipFamily >= CHIP_FAMILY_R600)
> tiling_flags |= RADEON_TILING_MICRO;
> -- 1.9.1
--
Earthling Michel Dänzer | http://www.amd.com
Libre software enthusiast | Mesa and X developer
More information about the xorg-devel
mailing list