diff --git a/driver/xf86-video-ati/ChangeLog b/driver/xf86-video-ati/ChangeLog index 5cb3fa7d1..dc43829f3 100644 --- a/driver/xf86-video-ati/ChangeLog +++ b/driver/xf86-video-ati/ChangeLog @@ -1,3 +1,52 @@ +commit 36703f66c3b06875651606a6280d5dc9d9dad51e +Author: Michel Dänzer +Date: Tue Mar 19 18:01:02 2019 +0100 + + Bump version for 19.0.1 release + +commit 4407c78bd86da4460ee07a15a365e07d99e0dd27 +Author: Dave Airlie +Date: Thu Mar 14 11:17:32 2019 +0100 + + modesetting: add tile property support + + This adds tiling support to the driver, it retrieves the tile info from + the kernel and translates it into the server format and exposes the + property. + + (Ported from xserver commits 8fb8bbb3062f1a06621ab7030a9e89d5e8367b35 + and 6abdb54a11dac4e8854ff94ecdcb90a14321ab31) + (Ported from amdgpu commit 6ee857726166f495abcd68e4ff60e3a09593d079) + Reviewed-by: Alex Deucher + +commit 79bc0e054f37026377d54cac6cd8127d4aa9baca +Author: Michel Dänzer +Date: Thu Mar 14 11:10:51 2019 +0100 + + Use radeon_finish in drmmode_crtc_scanout_update + + radeon_glamor_finish only works if we're using glamor, otherwise it'll + crash. + + Fixes: ce7db51020d3 "Cancel pending scanout update in drmmode_crtc_scanout_update" + Bug: https://bugs.debian.org/924540 + Reviewed-by: Alex Deucher + +commit f6cd4a67d7de5d3ff1a6e58a8c83749fc8ffc310 +Author: Michel Dänzer +Date: Fri Mar 8 11:48:10 2019 +0100 + + Revert "glamor: Avoid glamor_create_pixmap for pixmaps backing windows" + + This reverts commit 274703087f80342f51fa69c935bb9a1cb0c4ae47. + + Reports of visual corruption were bisected to this, e.g. + https://bugs.archlinux.org/task/61941 . I can reproduce this with Turks, + but not with Bonaire. I assume it's a Mesa/glamor bug, but let's revert + for now. + + Acked-by: Alex Deucher + commit 0d132d99e0b750896a78f47d73a8639680495d8c Author: Michel Dänzer Date: Wed Mar 6 17:48:03 2019 +0100 diff --git a/driver/xf86-video-ati/configure b/driver/xf86-video-ati/configure index c6741fd6a..4c1aeb619 100644 --- a/driver/xf86-video-ati/configure +++ b/driver/xf86-video-ati/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for xf86-video-ati 19.0.0. +# Generated by GNU Autoconf 2.69 for xf86-video-ati 19.0.1. # # Report bugs to . # @@ -591,8 +591,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='xf86-video-ati' PACKAGE_TARNAME='xf86-video-ati' -PACKAGE_VERSION='19.0.0' -PACKAGE_STRING='xf86-video-ati 19.0.0' +PACKAGE_VERSION='19.0.1' +PACKAGE_STRING='xf86-video-ati 19.0.1' PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=xorg&component=Driver/Radeon' PACKAGE_URL='' @@ -1398,7 +1398,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures xf86-video-ati 19.0.0 to adapt to many kinds of systems. +\`configure' configures xf86-video-ati 19.0.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1468,7 +1468,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of xf86-video-ati 19.0.0:";; + short | recursive ) echo "Configuration of xf86-video-ati 19.0.1:";; esac cat <<\_ACEOF @@ -1629,7 +1629,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -xf86-video-ati configure 19.0.0 +xf86-video-ati configure 19.0.1 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2044,7 +2044,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by xf86-video-ati $as_me 19.0.0, which was +It was created by xf86-video-ati $as_me 19.0.1, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2876,7 +2876,7 @@ fi # Define the identity of the package. PACKAGE='xf86-video-ati' - VERSION='19.0.0' + VERSION='19.0.1' cat >>confdefs.h <<_ACEOF @@ -20122,7 +20122,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by xf86-video-ati $as_me 19.0.0, which was +This file was extended by xf86-video-ati $as_me 19.0.1, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -20188,7 +20188,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -xf86-video-ati config.status 19.0.0 +xf86-video-ati config.status 19.0.1 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/driver/xf86-video-ati/configure.ac b/driver/xf86-video-ati/configure.ac index 0763a8ed2..49e82fc84 100644 --- a/driver/xf86-video-ati/configure.ac +++ b/driver/xf86-video-ati/configure.ac @@ -23,7 +23,7 @@ # Initialize Autoconf AC_PREREQ([2.60]) AC_INIT([xf86-video-ati], - [19.0.0], + [19.0.1], [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg&component=Driver/Radeon], [xf86-video-ati]) diff --git a/driver/xf86-video-ati/src/drmmode_display.c b/driver/xf86-video-ati/src/drmmode_display.c index c5fccd2aa..0e9e24749 100644 --- a/driver/xf86-video-ati/src/drmmode_display.c +++ b/driver/xf86-video-ati/src/drmmode_display.c @@ -785,7 +785,7 @@ drmmode_crtc_scanout_update(xf86CrtcPtr crtc, DisplayModePtr mode, screen->GetWindowPixmap(screen->root), extents)) { RegionEmpty(DamageRegion(drmmode_crtc->scanout_damage)); - radeon_glamor_finish(scrn); + radeon_finish(scrn, drmmode_crtc->scanout[scanout_id].bo); if (!drmmode_crtc->flip_pending) { radeon_drm_abort_entry(drmmode_crtc-> @@ -1576,6 +1576,51 @@ drmmode_output_mode_valid(xf86OutputPtr output, DisplayModePtr pModes) return MODE_OK; } +static void +drmmode_output_attach_tile(xf86OutputPtr output) +{ +#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1, 17, 99, 901, 0) + drmmode_output_private_ptr drmmode_output = output->driver_private; + drmModeConnectorPtr koutput = drmmode_output->mode_output; + RADEONEntPtr pRADEONEnt = RADEONEntPriv(output->scrn); + struct xf86CrtcTileInfo tile_info, *set = NULL; + int i; + + if (!koutput) { + xf86OutputSetTile(output, NULL); + return; + } + + /* look for a TILE property */ + for (i = 0; i < koutput->count_props; i++) { + drmModePropertyPtr props; + props = drmModeGetProperty(pRADEONEnt->fd, koutput->props[i]); + if (!props) + continue; + + if (!(props->flags & DRM_MODE_PROP_BLOB)) { + drmModeFreeProperty(props); + continue; + } + + if (!strcmp(props->name, "TILE")) { + drmModeFreePropertyBlob(drmmode_output->tile_blob); + drmmode_output->tile_blob = + drmModeGetPropertyBlob(pRADEONEnt->fd, + koutput->prop_values[i]); + } + drmModeFreeProperty(props); + } + if (drmmode_output->tile_blob) { + if (xf86OutputParseKMSTile(drmmode_output->tile_blob->data, + drmmode_output->tile_blob->length, + &tile_info) == TRUE) + set = &tile_info; + } + xf86OutputSetTile(output, set); +#endif +} + static int koutput_get_prop_idx(int fd, drmModeConnectorPtr koutput, int type, const char *name) @@ -1648,6 +1693,8 @@ drmmode_output_get_modes(xf86OutputPtr output) } xf86OutputSetEDID(output, mon); + drmmode_output_attach_tile(output); + /* modes should already be available */ for (i = 0; i < koutput->count_modes; i++) { Mode = xnfalloc(sizeof(DisplayModeRec)); @@ -1665,8 +1712,11 @@ drmmode_output_destroy(xf86OutputPtr output) drmmode_output_private_ptr drmmode_output = output->driver_private; int i; - if (drmmode_output->edid_blob) - drmModeFreePropertyBlob(drmmode_output->edid_blob); + drmModeFreePropertyBlob(drmmode_output->edid_blob); +#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1, 17, 99, 901, 0) + drmModeFreePropertyBlob(drmmode_output->tile_blob); +#endif + for (i = 0; i < drmmode_output->num_props; i++) { drmModeFreeProperty(drmmode_output->props[i].mode_prop); free(drmmode_output->props[i].atoms); diff --git a/driver/xf86-video-ati/src/drmmode_display.h b/driver/xf86-video-ati/src/drmmode_display.h index 2c2c3d57f..96eaef0aa 100644 --- a/driver/xf86-video-ati/src/drmmode_display.h +++ b/driver/xf86-video-ati/src/drmmode_display.h @@ -142,6 +142,9 @@ typedef struct { drmModeConnectorPtr mode_output; drmModeEncoderPtr *mode_encoders; drmModePropertyBlobPtr edid_blob; +#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1, 17, 99, 901, 0) + drmModePropertyBlobPtr tile_blob; +#endif int dpms_enum_id; int num_props; drmmode_prop_ptr props; diff --git a/driver/xf86-video-ati/src/radeon_glamor.c b/driver/xf86-video-ati/src/radeon_glamor.c index eae351fbf..da1edcdf4 100644 --- a/driver/xf86-video-ati/src/radeon_glamor.c +++ b/driver/xf86-video-ati/src/radeon_glamor.c @@ -238,7 +238,7 @@ radeon_glamor_create_pixmap(ScreenPtr screen, int w, int h, int depth, if (info->shadow_primary) { if (usage != CREATE_PIXMAP_USAGE_BACKING_PIXMAP) return fbCreatePixmap(screen, w, h, depth, usage); - } else if (usage != CREATE_PIXMAP_USAGE_BACKING_PIXMAP) { + } else { pixmap = glamor_create_pixmap(screen, w, h, depth, usage); if (pixmap) return pixmap;