diff --git a/srcpkgs/xf86-video-ati/patches/c4ae0e2cbcc0e2ebf9f13ee92d59b5120254a1dc.patch b/srcpkgs/xf86-video-ati/patches/c4ae0e2cbcc0e2ebf9f13ee92d59b5120254a1dc.patch new file mode 100644 index 00000000000..d69ee5bdef2 --- /dev/null +++ b/srcpkgs/xf86-video-ati/patches/c4ae0e2cbcc0e2ebf9f13ee92d59b5120254a1dc.patch @@ -0,0 +1,71 @@ +From c4ae0e2cbcc0e2ebf9f13ee92d59b5120254a1dc Mon Sep 17 00:00:00 2001 +From: Michel Dänzer +Date: Mon, 30 Jun 2014 01:20:12 +0000 +Subject: Handle CRTC DPMS from output DPMS hooks + +This fixes at least two issues: + +The CRTC DPMS hook isn't called after a modeset, so the vertical blank +interrupt emulation code considered the CRTC disabled after a modeset. As +a side effect, page flipping was no longer used after a modeset. + +This change also makes sure the vertical blank interrupt emulation code +runs before the hardware CRTC is disabled and after it's enabled from the +output DPMS hook. The wrong order could cause gnome-shell to hang after +a suspend/resume and/or DPMS off/on cycle. + +Signed-off-by: Michel Dänzer +Reviewed-by: Alex Deucher +--- +diff --git a/src/drmmode_display.c b/src/drmmode_display.c +index bd8e701..c366203 100644 +--- src/drmmode_display.c ++++ src/drmmode_display.c +@@ -247,7 +247,7 @@ int drmmode_get_current_ust(int drm_fd, CARD64 *ust) + } + + static void +-drmmode_crtc_dpms(xf86CrtcPtr crtc, int mode) ++drmmode_do_crtc_dpms(xf86CrtcPtr crtc, int mode) + { + drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private; + ScrnInfoPtr scrn = crtc->scrn; +@@ -308,6 +308,12 @@ drmmode_crtc_dpms(xf86CrtcPtr crtc, int mode) + drmmode_crtc->dpms_mode = mode; + } + ++static void ++drmmode_crtc_dpms(xf86CrtcPtr crtc, int mode) ++{ ++ /* Nothing to do. drmmode_do_crtc_dpms() is called as appropriate */ ++} ++ + static PixmapPtr + create_pixmap_for_fbcon(drmmode_ptr drmmode, + ScrnInfoPtr pScrn, int fbcon_id) +@@ -973,9 +979,14 @@ drmmode_output_dpms(xf86OutputPtr output, int mode) + drmModeConnectorPtr koutput = drmmode_output->mode_output; + drmmode_ptr drmmode = drmmode_output->drmmode; + ++ if (mode != DPMSModeOn && output->crtc) ++ drmmode_do_crtc_dpms(output->crtc, mode); ++ + drmModeConnectorSetProperty(drmmode->fd, koutput->connector_id, + drmmode_output->dpms_enum_id, mode); +- return; ++ ++ if (mode == DPMSModeOn && output->crtc) ++ drmmode_do_crtc_dpms(output->crtc, mode); + } + + +@@ -1833,6 +1844,7 @@ Bool drmmode_set_desired_modes(ScrnInfoPtr pScrn, drmmode_ptr drmmode) + + /* Skip disabled CRTCs */ + if (!crtc->enabled) { ++ drmmode_do_crtc_dpms(crtc, DPMSModeOff); + drmModeSetCrtc(drmmode->fd, drmmode_crtc->mode_crtc->crtc_id, + 0, 0, 0, NULL, 0, NULL); + continue; +-- +cgit v0.9.0.2-2-gbebe diff --git a/srcpkgs/xf86-video-ati/template b/srcpkgs/xf86-video-ati/template index 02b646b75e1..78a359abb71 100644 --- a/srcpkgs/xf86-video-ati/template +++ b/srcpkgs/xf86-video-ati/template @@ -1,7 +1,7 @@ # Template build file for 'xf86-video-ati'. pkgname=xf86-video-ati version=7.4.0 -revision=5 +revision=6 lib32disabled=yes only_for_archs="i686 x86_64" build_style=gnu-configure