diff options
author | Nicolás Reynolds <fauno@endefensadelsl.org> | 2014-07-02 03:51:56 +0000 |
---|---|---|
committer | Nicolás Reynolds <fauno@endefensadelsl.org> | 2014-07-02 03:51:56 +0000 |
commit | 35f5198d4a73e45c4e9e22d638f5bfd5b9b4bc62 (patch) | |
tree | 0a936fac74a00270ec2c07d3a37a63e79dd80999 /extra/xf86-video-ati | |
parent | 88933a383866089c23f6d62783a6a24ab211e872 (diff) |
Wed Jul 2 03:45:24 UTC 2014
Diffstat (limited to 'extra/xf86-video-ati')
-rw-r--r-- | extra/xf86-video-ati/0001-Handle-CRTC-DPMS-from-output-DPMS-hooks.patch | 78 | ||||
-rw-r--r-- | extra/xf86-video-ati/PKGBUILD | 17 |
2 files changed, 91 insertions, 4 deletions
diff --git a/extra/xf86-video-ati/0001-Handle-CRTC-DPMS-from-output-DPMS-hooks.patch b/extra/xf86-video-ati/0001-Handle-CRTC-DPMS-from-output-DPMS-hooks.patch new file mode 100644 index 000000000..31ef61690 --- /dev/null +++ b/extra/xf86-video-ati/0001-Handle-CRTC-DPMS-from-output-DPMS-hooks.patch @@ -0,0 +1,78 @@ +From c4ae0e2cbcc0e2ebf9f13ee92d59b5120254a1dc Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Michel=20D=C3=A4nzer?= <michel.daenzer@amd.com> +Date: Mon, 30 Jun 2014 10:20:12 +0900 +Subject: [PATCH] Handle CRTC DPMS from output DPMS hooks +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +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 <michel.daenzer@amd.com> +Reviewed-by: Alex Deucher <alexander.deucher@amd.com> +--- + src/drmmode_display.c | 16 ++++++++++++++-- + 1 file changed, 14 insertions(+), 2 deletions(-) + +diff --git a/src/drmmode_display.c b/src/drmmode_display.c +index bd8e701..c366203 100644 +--- a/src/drmmode_display.c ++++ b/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; +-- +2.0.1 + diff --git a/extra/xf86-video-ati/PKGBUILD b/extra/xf86-video-ati/PKGBUILD index 0458a3c4d..e2c7e9d41 100644 --- a/extra/xf86-video-ati/PKGBUILD +++ b/extra/xf86-video-ati/PKGBUILD @@ -1,11 +1,11 @@ -# $Id: PKGBUILD 215782 2014-06-30 12:15:42Z lcarlier $ +# $Id: PKGBUILD 216170 2014-07-01 18:18:25Z andyrtr $ # Maintainer: Jan de Groot <jgc@archlinux.org> # Contributor: Alexander Baldeck <alexander@archlinux.org> pkgname=xf86-video-ati pkgver=7.4.0 epoch=1 -pkgrel=1 +pkgrel=2 pkgdesc="X.org ati video driver" arch=('i686' 'x86_64') url="http://xorg.freedesktop.org/" @@ -14,8 +14,17 @@ depends=('libdrm>=2.4.41' 'systemd' 'ati-dri' 'glamor-egl') makedepends=('xorg-server-devel' 'X-ABI-VIDEODRV_VERSION=15') conflicts=('xorg-server<1.15.0' 'X-ABI-VIDEODRV_VERSION<15' 'X-ABI-VIDEODRV_VERSION>=16') groups=('xorg-drivers' 'xorg') -source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2) -sha256sums=('96230ca9859a2a3e347b7f37597b7b344e80b83f378d3a8463ab1ceb69df76d9') +source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2 + 0001-Handle-CRTC-DPMS-from-output-DPMS-hooks.patch) +sha256sums=('96230ca9859a2a3e347b7f37597b7b344e80b83f378d3a8463ab1ceb69df76d9' + '50b3ff79874c16af449fca40e2c2b9fe3d0341216d47594ff616515174f1e84b') + +prepare() { + cd ${pkgname}-${pkgver} + + # merged upstream + patch -Np1 -i ../0001-Handle-CRTC-DPMS-from-output-DPMS-hooks.patch +} build() { cd ${pkgname}-${pkgver} |