configure.ac | 30 +++++-- man/radeon.man | 28 ++++-- src/ati_pciids_gen.h | 51 ++++++++++++ src/drmmode_display.c | 33 ++++---- src/evergreen_accel.c | 2 src/evergreen_exa.c | 20 +++- src/evergreen_textured_videofuncs.c | 15 ++- src/pcidb/ati_pciids.csv | 51 ++++++++++++ src/r600_exa.c | 5 - src/radeon.h | 23 +++-- src/radeon_bo_helper.c | 2 src/radeon_chipinfo_gen.h | 51 ++++++++++++ src/radeon_chipset_gen.h | 51 ++++++++++++ src/radeon_dri2.c | 41 +++++----- src/radeon_drm.h | 2 src/radeon_exa_funcs.c | 5 - src/radeon_glamor.c | 42 ++++++++-- src/radeon_glamor.h | 4 src/radeon_kms.c | 147 +++++++++++++++++++++++++----------- src/radeon_pci_chipset_gen.h | 51 ++++++++++++ src/radeon_pci_device_match_gen.h | 51 ++++++++++++ src/radeon_probe.c | 15 +++ src/radeon_probe.h | 11 ++ src/radeon_video.c | 9 +- 24 files changed, 607 insertions(+), 133 deletions(-)
New commits: commit cc615d06db0332fc6e673b55632bcc7bf957b44b Author: Michel Dänzer <michel.daen...@amd.com> Date: Wed Jun 4 16:58:53 2014 +0900 Rename Option "NoAccel" to "Accel" Removes the need for a double negation when forcing acceleration on. Note that this change is backwards compatible, as the option parser automagically handles the 'No' prefix. Reviewed-by: Alex Deucher <alexander.deuc...@amd.com> diff --git a/man/radeon.man b/man/radeon.man index 65b880c..802f6c2 100644 --- a/man/radeon.man +++ b/man/radeon.man @@ -225,12 +225,12 @@ are supported: Selects software cursor. The default is .B off. .TP -.BI "Option \*qNoAccel\*q \*q" boolean \*q +.BI "Option \*qAccel\*q \*q" boolean \*q Enables or disables all hardware acceleration. .br -The default is to -.B enable -hardware acceleration. +The default is +.B on +except for HAWAII. .TP .BI "Option \*qZaphodHeads\*q \*q" string \*q Specify the RandR output(s) to use with zaphod mode for a particular driver diff --git a/src/radeon.h b/src/radeon.h index 136a430..eac6ed5 100644 --- a/src/radeon.h +++ b/src/radeon.h @@ -135,7 +135,7 @@ #endif typedef enum { - OPTION_NOACCEL, + OPTION_ACCEL, OPTION_SW_CURSOR, OPTION_PAGE_FLIP, OPTION_EXA_PIXMAPS, diff --git a/src/radeon_kms.c b/src/radeon_kms.c index ceaf575..707d0c7 100644 --- a/src/radeon_kms.c +++ b/src/radeon_kms.c @@ -59,7 +59,7 @@ extern SymTabRec RADEONChipsets[]; static Bool radeon_setup_kernel_mem(ScreenPtr pScreen); const OptionInfoRec RADEONOptions_KMS[] = { - { OPTION_NOACCEL, "NoAccel", OPTV_BOOLEAN, {0}, FALSE }, + { OPTION_ACCEL, "Accel", OPTV_BOOLEAN, {0}, FALSE }, { OPTION_SW_CURSOR, "SWcursor", OPTV_BOOLEAN, {0}, FALSE }, { OPTION_PAGE_FLIP, "EnablePageFlip", OPTV_BOOLEAN, {0}, FALSE }, { OPTION_COLOR_TILING, "ColorTiling", OPTV_BOOLEAN, {0}, FALSE }, @@ -499,8 +499,8 @@ static Bool RADEONPreInitAccel_KMS(ScrnInfoPtr pScrn) info->is_fast_fb = TRUE; } - if (xf86ReturnOptValBool(info->Options, OPTION_NOACCEL, - info->ChipFamily == CHIP_FAMILY_HAWAII) || + if (!xf86ReturnOptValBool(info->Options, OPTION_ACCEL, + info->ChipFamily != CHIP_FAMILY_HAWAII) || (!RADEONIsAccelWorking(pScrn))) { xf86DrvMsg(pScrn->scrnIndex, X_INFO, "GPU accel disabled or not working, using shadowfb for KMS\n"); commit 851b2cf8714618843725f6d067915375485ade9d Author: Adam Jackson <a...@redhat.com> Date: Wed May 21 09:34:32 2014 -0400 kms: Use own thunk function instead of shadowUpdatePackedWeak I plan to delete the Weak functions from a future server. Signed-off-by: Adam Jackson <a...@redhat.com> diff --git a/src/radeon_kms.c b/src/radeon_kms.c index 5e052e4..ceaf575 100644 --- a/src/radeon_kms.c +++ b/src/radeon_kms.c @@ -212,6 +212,12 @@ radeonShadowWindow(ScreenPtr screen, CARD32 row, CARD32 offset, int mode, return ((uint8_t *)info->front_bo->ptr + row * stride + offset); } +static void +radeonUpdatePacked(ScreenPtr pScreen, shadowBufPtr pBuf) +{ + shadowUpdatePacked(pScreen, pBuf); +} + static Bool RADEONCreateScreenResources_KMS(ScreenPtr pScreen) { ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen); @@ -232,7 +238,7 @@ static Bool RADEONCreateScreenResources_KMS(ScreenPtr pScreen) if (info->r600_shadow_fb) { pixmap = pScreen->GetScreenPixmap(pScreen); - if (!shadowAdd(pScreen, pixmap, shadowUpdatePackedWeak(), + if (!shadowAdd(pScreen, pixmap, radeonUpdatePacked, radeonShadowWindow, 0, NULL)) return FALSE; } commit b2dba2906f0b2284f17f53fd5251ba0f03d52a8b Author: Michel Dänzer <michel.daen...@amd.com> Date: Thu May 15 16:07:53 2014 +0900 Don't disable acceleration on >= SI on attempts to force EXA Also make this case clear in the log file: (WW) RADEON(0): EXA not supported, using glamor Reviewed-by: Alex Deucher <alexander.deuc...@amd.com> diff --git a/src/radeon_glamor.c b/src/radeon_glamor.c index 4aea51d..210ddcf 100644 --- a/src/radeon_glamor.c +++ b/src/radeon_glamor.c @@ -90,8 +90,13 @@ radeon_glamor_pre_init(ScrnInfoPtr scrn) if (s == NULL && info->ChipFamily < CHIP_FAMILY_TAHITI) return FALSE; - if (s && strcasecmp(s, "glamor") != 0) - return FALSE; + if (s && strcasecmp(s, "glamor") != 0) { + if (info->ChipFamily >= CHIP_FAMILY_TAHITI) + xf86DrvMsg(scrn->scrnIndex, X_WARNING, + "EXA not supported, using glamor\n"); + else + return FALSE; + } if (info->ChipFamily < CHIP_FAMILY_R300) { xf86DrvMsg(scrn->scrnIndex, X_ERROR, commit be1469cc23aba46daf3293b3d09c5f2e792e7f42 Author: Alex Deucher <alexander.deuc...@amd.com> Date: Fri May 2 17:48:07 2014 -0400 radeon: enable tiling for mullins Signed-off-by: Alex Deucher <alexander.deuc...@amd.com> diff --git a/src/radeon_kms.c b/src/radeon_kms.c index fb93f8a..5e052e4 100644 --- a/src/radeon_kms.c +++ b/src/radeon_kms.c @@ -889,13 +889,13 @@ Bool RADEONPreInit_KMS(ScrnInfoPtr pScrn, int flags) * with proper bit, in the meantime you need to set tiling option in * xorg configuration files */ - info->ChipFamily <= CHIP_FAMILY_HAWAII && + info->ChipFamily <= CHIP_FAMILY_MULLINS && !info->is_fast_fb; /* 2D color tiling */ if (info->ChipFamily >= CHIP_FAMILY_R600) { info->allowColorTiling2D = xf86ReturnOptValBool(info->Options, OPTION_COLOR_TILING_2D, - info->ChipFamily <= CHIP_FAMILY_HAWAII); + info->ChipFamily <= CHIP_FAMILY_MULLINS); } if (info->ChipFamily >= CHIP_FAMILY_R600) { commit 2ae8e4b8d12f5c9bab6655eb8cd3c5c1d5cfb10e Author: Samuel Li <samuel...@amd.com> Date: Tue Nov 12 15:30:42 2013 -0500 radeon: add Mullins pci ids. Signed-off-by: Samuel Li <samuel...@amd.com> Signed-off-by: Alex Deucher <alexander.deuc...@amd.com> Reviewed-by: Michel Dänzer <michel.daen...@amd.com> diff --git a/src/ati_pciids_gen.h b/src/ati_pciids_gen.h index eb57992..94c8fc8 100644 --- a/src/ati_pciids_gen.h +++ b/src/ati_pciids_gen.h @@ -722,6 +722,22 @@ #define PCI_CHIP_KABINI_983D 0x983D #define PCI_CHIP_KABINI_983E 0x983E #define PCI_CHIP_KABINI_983F 0x983F +#define PCI_CHIP_MULLINS_9850 0x9850 +#define PCI_CHIP_MULLINS_9851 0x9851 +#define PCI_CHIP_MULLINS_9852 0x9852 +#define PCI_CHIP_MULLINS_9853 0x9853 +#define PCI_CHIP_MULLINS_9854 0x9854 +#define PCI_CHIP_MULLINS_9855 0x9855 +#define PCI_CHIP_MULLINS_9856 0x9856 +#define PCI_CHIP_MULLINS_9857 0x9857 +#define PCI_CHIP_MULLINS_9858 0x9858 +#define PCI_CHIP_MULLINS_9859 0x9859 +#define PCI_CHIP_MULLINS_985A 0x985A +#define PCI_CHIP_MULLINS_985B 0x985B +#define PCI_CHIP_MULLINS_985C 0x985C +#define PCI_CHIP_MULLINS_985D 0x985D +#define PCI_CHIP_MULLINS_985E 0x985E +#define PCI_CHIP_MULLINS_985F 0x985F #define PCI_CHIP_KAVERI_1304 0x1304 #define PCI_CHIP_KAVERI_1305 0x1305 #define PCI_CHIP_KAVERI_1306 0x1306 diff --git a/src/pcidb/ati_pciids.csv b/src/pcidb/ati_pciids.csv index 8469a2a..e334230 100644 --- a/src/pcidb/ati_pciids.csv +++ b/src/pcidb/ati_pciids.csv @@ -723,6 +723,22 @@ "0x983D","KABINI_983D","KABINI",,1,,,1,"KABINI" "0x983E","KABINI_983E","KABINI",,1,,,1,"KABINI" "0x983F","KABINI_983F","KABINI",,1,,,1,"KABINI" +"0x9850","MULLINS_9850","MULLINS",1,1,,,1,"MULLINS" +"0x9851","MULLINS_9851","MULLINS",1,1,,,1,"MULLINS" +"0x9852","MULLINS_9852","MULLINS",1,1,,,1,"MULLINS" +"0x9853","MULLINS_9853","MULLINS",1,1,,,1,"MULLINS" +"0x9854","MULLINS_9854","MULLINS",1,1,,,1,"MULLINS" +"0x9845","MULLINS_9855","MULLINS",1,1,,,1,"MULLINS" +"0x9856","MULLINS_9856","MULLINS",1,1,,,1,"MULLINS" +"0x9857","MULLINS_9857","MULLINS",1,1,,,1,"MULLINS" +"0x9858","MULLINS_9858","MULLINS",1,1,,,1,"MULLINS" +"0x9859","MULLINS_9859","MULLINS",1,1,,,1,"MULLINS" +"0x985A","MULLINS_985A","MULLINS",1,1,,,1,"MULLINS" +"0x985B","MULLINS_985B","MULLINS",1,1,,,1,"MULLINS" +"0x985C","MULLINS_985C","MULLINS",1,1,,,1,"MULLINS" +"0x985D","MULLINS_985D","MULLINS",1,1,,,1,"MULLINS" +"0x985E","MULLINS_985E","MULLINS",1,1,,,1,"MULLINS" +"0x985F","MULLINS_985F","MULLINS",1,1,,,1,"MULLINS" "0x1304","KAVERI_1304","KAVERI",1,1,,,1,"KAVERI" "0x1305","KAVERI_1305","KAVERI",,1,,,1,"KAVERI" "0x1306","KAVERI_1306","KAVERI",1,1,,,1,"KAVERI" diff --git a/src/radeon_chipinfo_gen.h b/src/radeon_chipinfo_gen.h index fc9474b..4f6e3bc 100644 --- a/src/radeon_chipinfo_gen.h +++ b/src/radeon_chipinfo_gen.h @@ -642,6 +642,22 @@ static RADEONCardInfo RADEONCards[] = { { 0x983D, CHIP_FAMILY_KABINI, 0, 1, 0, 0, 1 }, { 0x983E, CHIP_FAMILY_KABINI, 0, 1, 0, 0, 1 }, { 0x983F, CHIP_FAMILY_KABINI, 0, 1, 0, 0, 1 }, + { 0x9850, CHIP_FAMILY_MULLINS, 1, 1, 0, 0, 1 }, + { 0x9851, CHIP_FAMILY_MULLINS, 1, 1, 0, 0, 1 }, + { 0x9852, CHIP_FAMILY_MULLINS, 1, 1, 0, 0, 1 }, + { 0x9853, CHIP_FAMILY_MULLINS, 1, 1, 0, 0, 1 }, + { 0x9854, CHIP_FAMILY_MULLINS, 1, 1, 0, 0, 1 }, + { 0x9855, CHIP_FAMILY_MULLINS, 1, 1, 0, 0, 1 }, + { 0x9856, CHIP_FAMILY_MULLINS, 1, 1, 0, 0, 1 }, + { 0x9857, CHIP_FAMILY_MULLINS, 1, 1, 0, 0, 1 }, + { 0x9858, CHIP_FAMILY_MULLINS, 1, 1, 0, 0, 1 }, + { 0x9859, CHIP_FAMILY_MULLINS, 1, 1, 0, 0, 1 }, + { 0x985A, CHIP_FAMILY_MULLINS, 1, 1, 0, 0, 1 }, + { 0x985B, CHIP_FAMILY_MULLINS, 1, 1, 0, 0, 1 }, + { 0x985C, CHIP_FAMILY_MULLINS, 1, 1, 0, 0, 1 }, + { 0x985D, CHIP_FAMILY_MULLINS, 1, 1, 0, 0, 1 }, + { 0x985E, CHIP_FAMILY_MULLINS, 1, 1, 0, 0, 1 }, + { 0x985F, CHIP_FAMILY_MULLINS, 1, 1, 0, 0, 1 }, { 0x1304, CHIP_FAMILY_KAVERI, 1, 1, 0, 0, 1 }, { 0x1305, CHIP_FAMILY_KAVERI, 0, 1, 0, 0, 1 }, { 0x1306, CHIP_FAMILY_KAVERI, 1, 1, 0, 0, 1 }, diff --git a/src/radeon_chipset_gen.h b/src/radeon_chipset_gen.h index afab6b0..03a413e 100644 --- a/src/radeon_chipset_gen.h +++ b/src/radeon_chipset_gen.h @@ -642,6 +642,22 @@ SymTabRec RADEONChipsets[] = { { PCI_CHIP_KABINI_983D, "KABINI" }, { PCI_CHIP_KABINI_983E, "KABINI" }, { PCI_CHIP_KABINI_983F, "KABINI" }, + { PCI_CHIP_MULLINS_9850, "MULLINS" }, + { PCI_CHIP_MULLINS_9851, "MULLINS" }, + { PCI_CHIP_MULLINS_9852, "MULLINS" }, + { PCI_CHIP_MULLINS_9853, "MULLINS" }, + { PCI_CHIP_MULLINS_9854, "MULLINS" }, + { PCI_CHIP_MULLINS_9855, "MULLINS" }, + { PCI_CHIP_MULLINS_9856, "MULLINS" }, + { PCI_CHIP_MULLINS_9857, "MULLINS" }, + { PCI_CHIP_MULLINS_9858, "MULLINS" }, + { PCI_CHIP_MULLINS_9859, "MULLINS" }, + { PCI_CHIP_MULLINS_985A, "MULLINS" }, + { PCI_CHIP_MULLINS_985B, "MULLINS" }, + { PCI_CHIP_MULLINS_985C, "MULLINS" }, + { PCI_CHIP_MULLINS_985D, "MULLINS" }, + { PCI_CHIP_MULLINS_985E, "MULLINS" }, + { PCI_CHIP_MULLINS_985F, "MULLINS" }, { PCI_CHIP_KAVERI_1304, "KAVERI" }, { PCI_CHIP_KAVERI_1305, "KAVERI" }, { PCI_CHIP_KAVERI_1306, "KAVERI" }, diff --git a/src/radeon_pci_chipset_gen.h b/src/radeon_pci_chipset_gen.h index da4440b..a9b186c 100644 --- a/src/radeon_pci_chipset_gen.h +++ b/src/radeon_pci_chipset_gen.h @@ -642,6 +642,22 @@ static PciChipsets RADEONPciChipsets[] = { { PCI_CHIP_KABINI_983D, PCI_CHIP_KABINI_983D, RES_SHARED_VGA }, { PCI_CHIP_KABINI_983E, PCI_CHIP_KABINI_983E, RES_SHARED_VGA }, { PCI_CHIP_KABINI_983F, PCI_CHIP_KABINI_983F, RES_SHARED_VGA }, + { PCI_CHIP_MULLINS_9850, PCI_CHIP_MULLINS_9850, RES_SHARED_VGA }, + { PCI_CHIP_MULLINS_9851, PCI_CHIP_MULLINS_9851, RES_SHARED_VGA }, + { PCI_CHIP_MULLINS_9852, PCI_CHIP_MULLINS_9852, RES_SHARED_VGA }, + { PCI_CHIP_MULLINS_9853, PCI_CHIP_MULLINS_9853, RES_SHARED_VGA }, + { PCI_CHIP_MULLINS_9854, PCI_CHIP_MULLINS_9854, RES_SHARED_VGA }, + { PCI_CHIP_MULLINS_9855, PCI_CHIP_MULLINS_9855, RES_SHARED_VGA }, + { PCI_CHIP_MULLINS_9856, PCI_CHIP_MULLINS_9856, RES_SHARED_VGA }, + { PCI_CHIP_MULLINS_9857, PCI_CHIP_MULLINS_9857, RES_SHARED_VGA }, + { PCI_CHIP_MULLINS_9858, PCI_CHIP_MULLINS_9858, RES_SHARED_VGA }, + { PCI_CHIP_MULLINS_9859, PCI_CHIP_MULLINS_9859, RES_SHARED_VGA }, + { PCI_CHIP_MULLINS_985A, PCI_CHIP_MULLINS_985A, RES_SHARED_VGA }, + { PCI_CHIP_MULLINS_985B, PCI_CHIP_MULLINS_985B, RES_SHARED_VGA }, + { PCI_CHIP_MULLINS_985C, PCI_CHIP_MULLINS_985C, RES_SHARED_VGA }, + { PCI_CHIP_MULLINS_985D, PCI_CHIP_MULLINS_985D, RES_SHARED_VGA }, + { PCI_CHIP_MULLINS_985E, PCI_CHIP_MULLINS_985E, RES_SHARED_VGA }, + { PCI_CHIP_MULLINS_985F, PCI_CHIP_MULLINS_985F, RES_SHARED_VGA }, { PCI_CHIP_KAVERI_1304, PCI_CHIP_KAVERI_1304, RES_SHARED_VGA }, { PCI_CHIP_KAVERI_1305, PCI_CHIP_KAVERI_1305, RES_SHARED_VGA }, { PCI_CHIP_KAVERI_1306, PCI_CHIP_KAVERI_1306, RES_SHARED_VGA }, diff --git a/src/radeon_pci_device_match_gen.h b/src/radeon_pci_device_match_gen.h index d4b3763..a73d9c1 100644 --- a/src/radeon_pci_device_match_gen.h +++ b/src/radeon_pci_device_match_gen.h @@ -642,6 +642,22 @@ static const struct pci_id_match radeon_device_match[] = { ATI_DEVICE_MATCH( PCI_CHIP_KABINI_983D, 0 ), ATI_DEVICE_MATCH( PCI_CHIP_KABINI_983E, 0 ), ATI_DEVICE_MATCH( PCI_CHIP_KABINI_983F, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_MULLINS_9850, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_MULLINS_9851, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_MULLINS_9852, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_MULLINS_9853, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_MULLINS_9854, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_MULLINS_9855, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_MULLINS_9856, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_MULLINS_9857, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_MULLINS_9858, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_MULLINS_9859, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_MULLINS_985A, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_MULLINS_985B, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_MULLINS_985C, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_MULLINS_985D, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_MULLINS_985E, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_MULLINS_985F, 0 ), ATI_DEVICE_MATCH( PCI_CHIP_KAVERI_1304, 0 ), ATI_DEVICE_MATCH( PCI_CHIP_KAVERI_1305, 0 ), ATI_DEVICE_MATCH( PCI_CHIP_KAVERI_1306, 0 ), commit 5c86a3461597647224c33d5190b4531aeeb2655f Author: Samuel Li <samuel...@amd.com> Date: Thu Apr 17 15:17:28 2014 -0400 radeon: add support for Mullins. Signed-off-by: Samuel Li <samuel...@amd.com> Signed-off-by: Alex Deucher <alexander.deuc...@amd.com> Reviewed-by: Michel Dänzer <michel.daen...@amd.com> diff --git a/man/radeon.man b/man/radeon.man index f6a825d..65b880c 100644 --- a/man/radeon.man +++ b/man/radeon.man @@ -208,6 +208,9 @@ KABINI APUs .TP 12 .B HAWAII Radeon R9 series +.TP 12 +.B MULLINS +MULLINS APUs .PD .SH CONFIGURATION DETAILS Please refer to __xconfigfile__(__filemansuffix__) for general configuration diff --git a/src/radeon_probe.h b/src/radeon_probe.h index 9500189..3fe4644 100644 --- a/src/radeon_probe.h +++ b/src/radeon_probe.h @@ -116,6 +116,7 @@ typedef enum { CHIP_FAMILY_KAVERI, CHIP_FAMILY_KABINI, CHIP_FAMILY_HAWAII, + CHIP_FAMILY_MULLINS, CHIP_FAMILY_LAST } RADEONChipFamily; commit fdb90ffc50acbb7d5ba0598470f9feeac6ce55fc Author: Alex Deucher <alexander.deuc...@amd.com> Date: Fri May 2 17:45:45 2014 -0400 radeon: require libdrm_radeon 2.4.54 for mullins support Signed-off-by: Alex Deucher <alexander.deuc...@amd.com> diff --git a/configure.ac b/configure.ac index 9086bb6..dc2a656 100644 --- a/configure.ac +++ b/configure.ac @@ -71,7 +71,7 @@ XORG_DRIVER_CHECK_EXT(XV, videoproto) XORG_DRIVER_CHECK_EXT(DPMSExtension, xextproto) # Checks for libraries. -PKG_CHECK_MODULES(LIBDRM, [libdrm >= 2.4.51]) +PKG_CHECK_MODULES(LIBDRM, [libdrm >= 2.4.54]) PKG_CHECK_MODULES(LIBDRM_RADEON, [libdrm_radeon]) # Obtain compiler/linker options for the driver dependencies commit 06e3c8c53ef4bd159f5864eabf726438d008b49a Author: Dave Airlie <airl...@redhat.com> Date: Wed Apr 23 13:39:42 2014 +1000 radeon: fix use-after-free in modesetting cleanup noticed while looking at something else. Reviewed-by: Michel Dänzer <michel.daen...@amd.com> Signed-off-by: Dave Airlie <airl...@redhat.com> diff --git a/src/drmmode_display.c b/src/drmmode_display.c index 02bdf9e..bd8e701 100644 --- a/src/drmmode_display.c +++ b/src/drmmode_display.c @@ -958,8 +958,8 @@ drmmode_output_destroy(xf86OutputPtr output) } for (i = 0; i < drmmode_output->mode_output->count_encoders; i++) { drmModeFreeEncoder(drmmode_output->mode_encoders[i]); - free(drmmode_output->mode_encoders); } + free(drmmode_output->mode_encoders); free(drmmode_output->props); drmModeFreeConnector(drmmode_output->mode_output); free(drmmode_output); commit dbac18c361f9e514ecb40d0617f9d68b65a542e0 Author: Michel Dänzer <michel.daen...@amd.com> Date: Mon Apr 28 17:51:56 2014 +0900 Revert "Adapt to load_cursor_argb signature change in xserver 1.15.99.902" This reverts commit 48d3dbc8a0d3bfde88f46e402e530438f9317715. xserver Git has been updated to be backwards compatible with the previous API. diff --git a/src/drmmode_display.c b/src/drmmode_display.c index fc99128..02bdf9e 100644 --- a/src/drmmode_display.c +++ b/src/drmmode_display.c @@ -590,11 +590,7 @@ drmmode_set_cursor_position (xf86CrtcPtr crtc, int x, int y) drmModeMoveCursor(drmmode->fd, drmmode_crtc->mode_crtc->crtc_id, x, y); } -#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,15,99,902,0) -static Bool -#else static void -#endif drmmode_load_cursor_argb (xf86CrtcPtr crtc, CARD32 *image) { ScrnInfoPtr pScrn = crtc->scrn; @@ -609,10 +605,6 @@ drmmode_load_cursor_argb (xf86CrtcPtr crtc, CARD32 *image) for (i = 0; i < cursor_size; i++) ptr[i] = cpu_to_le32(image[i]); - -#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,15,99,902,0) - return TRUE; -#endif } commit c84230d686c078aac1dc98d82153f8b02521b2e1 Author: Michel Dänzer <michel.daen...@amd.com> Date: Fri Apr 25 09:17:51 2014 +0900 dri2: Handle PRIME for source buffer as well in radeon_dri2_copy_region2 Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=77810 Reviewed-by: Alex Deucher <alexander.deuc...@amd.com> diff --git a/src/radeon_dri2.c b/src/radeon_dri2.c index d47b035..9a9918b 100644 --- a/src/radeon_dri2.c +++ b/src/radeon_dri2.c @@ -409,7 +409,14 @@ radeon_dri2_copy_region2(ScreenPtr pScreen, dst_drawable = &dst_private->pixmap->drawable; if (src_private->attachment == DRI2BufferFrontLeft) { - src_drawable = drawable; +#ifdef USE_DRI2_PRIME + if (drawable->pScreen != pScreen) { + src_drawable = DRI2UpdatePrime(drawable, src_buffer); + if (!src_drawable) + return; + } else +#endif + src_drawable = drawable; } if (dst_private->attachment == DRI2BufferFrontLeft) { #ifdef USE_DRI2_PRIME commit 48d3dbc8a0d3bfde88f46e402e530438f9317715 Author: Michel Dänzer <michel.daen...@amd.com> Date: Tue Apr 15 17:45:35 2014 +0900 Adapt to load_cursor_argb signature change in xserver 1.15.99.902 Apart from the compiler warning below, not doing this may result in accidentally using software cursors. ../../src/drmmode_display.c:808:5: warning: initialization from incompatible pointer type [enabled by default] .load_cursor_argb = drmmode_load_cursor_argb, ^ ../../src/drmmode_display.c:808:5: warning: (near initialization for 'drmmode_crtc_funcs.load_cursor_argb') [enabled by default] Reviewed-by: Alex Deucher <alexander.deuc...@amd.com> diff --git a/src/drmmode_display.c b/src/drmmode_display.c index 02bdf9e..fc99128 100644 --- a/src/drmmode_display.c +++ b/src/drmmode_display.c @@ -590,7 +590,11 @@ drmmode_set_cursor_position (xf86CrtcPtr crtc, int x, int y) drmModeMoveCursor(drmmode->fd, drmmode_crtc->mode_crtc->crtc_id, x, y); } +#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,15,99,902,0) +static Bool +#else static void +#endif drmmode_load_cursor_argb (xf86CrtcPtr crtc, CARD32 *image) { ScrnInfoPtr pScrn = crtc->scrn; @@ -605,6 +609,10 @@ drmmode_load_cursor_argb (xf86CrtcPtr crtc, CARD32 *image) for (i = 0; i < cursor_size; i++) ptr[i] = cpu_to_le32(image[i]); + +#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,15,99,902,0) + return TRUE; +#endif } commit 409786a8f780d78a83bf0bddea5d37117ff6fa39 Author: Michel Dänzer <michel.daen...@amd.com> Date: Thu Apr 10 11:43:04 2014 +0900 glamor: Fix test for creating shared pixmaps The pixmap usage hint is not a bitmask in general. The test for CREATE_PIXMAP_USAGE_SHARED was incorrectly triggering for a glamor internal usage hint being added in the xserver tree. Tested-by: Ed Tomlinson <edt...@gmail.com> diff --git a/src/radeon.h b/src/radeon.h index f364b67..136a430 100644 --- a/src/radeon.h +++ b/src/radeon.h @@ -794,6 +794,13 @@ enum { RADEON_CREATE_PIXMAP_SZBUFFER = 0x80000000, /* for eg */ }; +#define RADEON_CREATE_PIXMAP_TILING_FLAGS \ + (RADEON_CREATE_PIXMAP_TILING_MICRO_SQUARE | \ + RADEON_CREATE_PIXMAP_TILING_MACRO | \ + RADEON_CREATE_PIXMAP_TILING_MICRO | \ + RADEON_CREATE_PIXMAP_DEPTH | \ + RADEON_CREATE_PIXMAP_SZBUFFER) + /* Compute log base 2 of val. */ static __inline__ int diff --git a/src/radeon_glamor.c b/src/radeon_glamor.c index 7f1247c..4aea51d 100644 --- a/src/radeon_glamor.c +++ b/src/radeon_glamor.c @@ -172,12 +172,14 @@ Bool radeon_glamor_pixmap_is_offscreen(PixmapPtr pixmap) return priv && priv->bo; } -#ifdef CREATE_PIXMAP_USAGE_SHARED -#define RADEON_CREATE_PIXMAP_SHARED (CREATE_PIXMAP_USAGE_SHARED | RADEON_CREATE_PIXMAP_DRI2) -#else -#define RADEON_CREATE_PIXMAP_SHARED RADEON_CREATE_PIXMAP_DRI2 +#ifndef CREATE_PIXMAP_USAGE_SHARED +#define CREATE_PIXMAP_USAGE_SHARED RADEON_CREATE_PIXMAP_DRI2 #endif +#define RADEON_CREATE_PIXMAP_SHARED(usage) \ + (((usage) & ~RADEON_CREATE_PIXMAP_TILING_FLAGS) == RADEON_CREATE_PIXMAP_DRI2 || \ + (usage) == CREATE_PIXMAP_USAGE_SHARED) + static PixmapPtr radeon_glamor_create_pixmap(ScreenPtr screen, int w, int h, int depth, unsigned usage) @@ -186,7 +188,7 @@ radeon_glamor_create_pixmap(ScreenPtr screen, int w, int h, int depth, struct radeon_pixmap *priv; PixmapPtr pixmap, new_pixmap = NULL; - if (!(usage & RADEON_CREATE_PIXMAP_SHARED)) { + if (!RADEON_CREATE_PIXMAP_SHARED(usage)) { pixmap = glamor_create_pixmap(screen, w, h, depth, usage); if (pixmap) return pixmap; @@ -229,7 +231,7 @@ radeon_glamor_create_pixmap(ScreenPtr screen, int w, int h, int depth, return pixmap; fallback_glamor: - if (usage & RADEON_CREATE_PIXMAP_SHARED) { + if (RADEON_CREATE_PIXMAP_SHARED(usage)) { /* XXX need further work to handle the DRI2 failure case. * Glamor don't know how to handle a BO only pixmap. Put * a warning indicator here. commit aecf1c4e5f4718adcfb85836830d065d3f4f97a5 Author: Michel Dänzer <michel.daen...@amd.com> Date: Thu Apr 10 15:10:56 2014 +0900 dri2: Fix conflicting CreatePixmap usage flag definitions RADEON_CREATE_PIXMAP_TILING_MICRO_SQUARE was the same as RADEON_CREATE_PIXMAP_DRI2. Disambiguate the definitions and rearrange them to try and prevent this from happening again. Tested-by: Ed Tomlinson <edt...@gmail.com> diff --git a/src/radeon.h b/src/radeon.h index f1817e7..f364b67 100644 --- a/src/radeon.h +++ b/src/radeon.h @@ -786,12 +786,12 @@ static __inline__ void RADEON_SYNC(RADEONInfoPtr info, ScrnInfoPtr pScrn) } enum { - RADEON_CREATE_PIXMAP_DRI2 = 0x08000000, - RADEON_CREATE_PIXMAP_TILING_MACRO = 0x10000000, - RADEON_CREATE_PIXMAP_TILING_MICRO = 0x20000000, - RADEON_CREATE_PIXMAP_DEPTH = 0x40000000, /* for r200 */ - RADEON_CREATE_PIXMAP_SZBUFFER = 0x80000000, /* for eg */ - RADEON_CREATE_PIXMAP_TILING_MICRO_SQUARE = 0x8000000, + RADEON_CREATE_PIXMAP_DRI2 = 0x04000000, + RADEON_CREATE_PIXMAP_TILING_MICRO_SQUARE = 0x08000000, + RADEON_CREATE_PIXMAP_TILING_MACRO = 0x10000000, + RADEON_CREATE_PIXMAP_TILING_MICRO = 0x20000000, + RADEON_CREATE_PIXMAP_DEPTH = 0x40000000, /* for r200 */ + RADEON_CREATE_PIXMAP_SZBUFFER = 0x80000000, /* for eg */ }; commit b50da3b96c212086cb58501dbe988d64f1f35b6d Author: Hans de Goede <hdego...@redhat.com> Date: Fri Apr 11 09:44:37 2014 +0200 Fix building on older servers without xf86platformBus.h Signed-off-by: Hans de Goede <hdego...@redhat.com> diff --git a/src/radeon_kms.c b/src/radeon_kms.c index f7f0a0d..fb93f8a 100644 --- a/src/radeon_kms.c +++ b/src/radeon_kms.c @@ -593,7 +593,7 @@ static int radeon_get_drm_master_fd(ScrnInfoPtr pScrn) char *busid; int fd; -#if defined(ODEV_ATTRIB_FD) +#ifdef XF86_PDEV_SERVER_FD if (pRADEONEnt->platform_dev) { fd = xf86_get_platform_device_int_attrib(pRADEONEnt->platform_dev, ODEV_ATTRIB_FD, -1); diff --git a/src/radeon_probe.h b/src/radeon_probe.h index 4f5e645..9500189 100644 --- a/src/radeon_probe.h +++ b/src/radeon_probe.h @@ -37,12 +37,16 @@ #define _RADEON_PROBE_H_ 1 #include <stdint.h> +#include "xorg-server.h" #include "xf86str.h" #include "xf86DDC.h" #include "randrstr.h" #include "xf86Crtc.h" + +#ifdef XSERVER_PLATFORM_BUS #include "xf86platformBus.h" +#endif #include "compat-api.h" #include "exa.h" @@ -137,7 +141,9 @@ typedef struct int fd_ref; unsigned long fd_wakeup_registered; /* server generation for which fd has been registered for wakeup handling */ int fd_wakeup_ref; +#ifdef XSERVER_PLATFORM_BUS struct xf86_platform_device *platform_dev; +#endif } RADEONEntRec, *RADEONEntPtr; extern const OptionInfoRec *RADEONOptionsWeak(void); commit ed0cfbb4fe77146b0b38f777bc28f3a4ea6da07f Author: Hans de Goede <hdego...@redhat.com> Date: Fri Mar 7 13:27:30 2014 +0100 Add support for server managed fds Signed-off-by: Hans de Goede <hdego...@redhat.com> diff --git a/src/radeon_kms.c b/src/radeon_kms.c index c0f9762..f7f0a0d 100644 --- a/src/radeon_kms.c +++ b/src/radeon_kms.c @@ -180,7 +180,11 @@ static void RADEONFreeRec(ScrnInfoPtr pScrn) pRADEONEnt = pPriv->ptr; pRADEONEnt->fd_ref--; if (!pRADEONEnt->fd_ref) { - drmClose(pRADEONEnt->fd); +#ifdef XF86_PDEV_SERVER_FD + if (!(pRADEONEnt->platform_dev && + pRADEONEnt->platform_dev->flags & XF86_PDEV_SERVER_FD)) +#endif + drmClose(pRADEONEnt->fd); pRADEONEnt->fd = 0; } } @@ -584,10 +588,20 @@ static Bool RADEONPreInitChipType_KMS(ScrnInfoPtr pScrn) static int radeon_get_drm_master_fd(ScrnInfoPtr pScrn) { RADEONInfoPtr info = RADEONPTR(pScrn); + RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn); struct pci_device *dev = info->PciInfo; char *busid; int fd; +#if defined(ODEV_ATTRIB_FD) + if (pRADEONEnt->platform_dev) { + fd = xf86_get_platform_device_int_attrib(pRADEONEnt->platform_dev, + ODEV_ATTRIB_FD, -1); + if (fd != -1) + return fd; + } +#endif + #if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,9,99,901,0) XNFasprintf(&busid, "pci:%04x:%02x:%02x.%d", dev->domain, dev->bus, dev->dev, dev->func); @@ -1107,6 +1121,39 @@ static Bool RADEONSaveScreen_KMS(ScreenPtr pScreen, int mode) return TRUE; } +static Bool radeon_set_drm_master(ScrnInfoPtr pScrn) +{ + RADEONInfoPtr info = RADEONPTR(pScrn); + RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn); + int err; + +#ifdef XF86_PDEV_SERVER_FD + if (pRADEONEnt->platform_dev && + (pRADEONEnt->platform_dev->flags & XF86_PDEV_SERVER_FD)) + return TRUE; +#endif + + err = drmSetMaster(info->dri2.drm_fd); + if (err) + ErrorF("Unable to retrieve master\n"); + + return err == 0; +} + +static void radeon_drop_drm_master(ScrnInfoPtr pScrn) +{ + RADEONInfoPtr info = RADEONPTR(pScrn); + RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn); + +#ifdef XF86_PDEV_SERVER_FD + if (pRADEONEnt->platform_dev && + (pRADEONEnt->platform_dev->flags & XF86_PDEV_SERVER_FD)) + return; +#endif + + drmDropMaster(info->dri2.drm_fd); +} + /* Called at the end of each server generation. Restore the original * text mode, unmap video memory, and unwrap and call the saved * CloseScreen function. @@ -1133,7 +1180,7 @@ static Bool RADEONCloseScreen_KMS(CLOSE_SCREEN_ARGS_DECL) if (info->accel_state->use_vbos) radeon_vbo_free_lists(pScrn); - drmDropMaster(info->dri2.drm_fd); + radeon_drop_drm_master(pScrn); drmmode_fini(pScrn, &info->drmmode); if (info->dri2.enabled) @@ -1168,7 +1215,6 @@ Bool RADEONScreenInit_KMS(SCREEN_INIT_ARGS_DECL) int subPixelOrder = SubPixelUnknown; char* s; void *front_ptr; - int ret; pScrn->fbOffset = 0; @@ -1179,11 +1225,9 @@ Bool RADEONScreenInit_KMS(SCREEN_INIT_ARGS_DECL) pScrn->defaultVisual)) return FALSE; miSetPixmapDepths (); - ret = drmSetMaster(info->dri2.drm_fd); - if (ret) { - ErrorF("Unable to retrieve master\n"); + if (!radeon_set_drm_master(pScrn)) return FALSE; - } + info->directRenderingEnabled = FALSE; if (info->r600_shadow_fb == FALSE) info->directRenderingEnabled = radeon_dri2_screen_init(pScreen); @@ -1396,15 +1440,12 @@ Bool RADEONEnterVT_KMS(VT_FUNC_ARGS_DECL) { SCRN_INFO_PTR(arg); RADEONInfoPtr info = RADEONPTR(pScrn); - int ret; xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, RADEON_LOGLEVEL_DEBUG, "RADEONEnterVT_KMS\n"); + radeon_set_drm_master(pScrn); - ret = drmSetMaster(info->dri2.drm_fd); - if (ret) - ErrorF("Unable to retrieve master\n"); info->accel_state->XInited3D = FALSE; info->accel_state->engineMode = EXA_ENGINEMODE_UNKNOWN; @@ -1425,7 +1466,7 @@ void RADEONLeaveVT_KMS(VT_FUNC_ARGS_DECL) xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, RADEON_LOGLEVEL_DEBUG, "RADEONLeaveVT_KMS\n"); - drmDropMaster(info->dri2.drm_fd); + radeon_drop_drm_master(pScrn); xf86RotateFreeShadow(pScrn); diff --git a/src/radeon_probe.c b/src/radeon_probe.c index 2d3c58e..ad1e96e 100644 --- a/src/radeon_probe.c +++ b/src/radeon_probe.c @@ -202,6 +202,10 @@ RADEONDriverFunc(ScrnInfoPtr scrn, xorgDriverFuncOp op, void *data) flag = (CARD32 *)data; (*flag) = 0; return TRUE; +#if XORG_VERSION_CURRENT > XORG_VERSION_NUMERIC(1,15,99,0,0) + case SUPPORTS_SERVER_FDS: + return TRUE; +#endif default: return FALSE; } @@ -272,6 +276,7 @@ radeon_platform_probe(DriverPtr pDriver, pRADEONEnt = pPriv->ptr; pRADEONEnt->HasSecondary = TRUE; } + pRADEONEnt->platform_dev = dev; } free(pEnt); diff --git a/src/radeon_probe.h b/src/radeon_probe.h index cea6695..4f5e645 100644 --- a/src/radeon_probe.h +++ b/src/radeon_probe.h @@ -42,6 +42,7 @@ #include "randrstr.h" #include "xf86Crtc.h" +#include "xf86platformBus.h" #include "compat-api.h" #include "exa.h" @@ -136,6 +137,7 @@ typedef struct int fd_ref; unsigned long fd_wakeup_registered; /* server generation for which fd has been registered for wakeup handling */ int fd_wakeup_ref; + struct xf86_platform_device *platform_dev; } RADEONEntRec, *RADEONEntPtr; extern const OptionInfoRec *RADEONOptionsWeak(void); commit 3d7861fe112f25874319d4cdc12b745fbcd359cf Author: Hans de Goede <hdego...@redhat.com> Date: Mon Mar 17 10:38:13 2014 +0100 Add radeon_get_drm_master_fd helper function This is a preparation patch for adding server-managed-fd support without it turning into a goto fest. Signed-off-by: Hans de Goede <hdego...@redhat.com> diff --git a/src/radeon_kms.c b/src/radeon_kms.c index 16a1b5f..c0f9762 100644 --- a/src/radeon_kms.c +++ b/src/radeon_kms.c @@ -581,23 +581,12 @@ static Bool RADEONPreInitChipType_KMS(ScrnInfoPtr pScrn) return TRUE; } -static Bool radeon_open_drm_master(ScrnInfoPtr pScrn) +static int radeon_get_drm_master_fd(ScrnInfoPtr pScrn) { RADEONInfoPtr info = RADEONPTR(pScrn); - RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn); struct pci_device *dev = info->PciInfo; char *busid; - drmSetVersion sv; - int err; - - if (pRADEONEnt->fd) { - xf86DrvMsg(pScrn->scrnIndex, X_INFO, - " reusing fd for second head\n"); - - info->drmmode.fd = info->dri2.drm_fd = pRADEONEnt->fd; - pRADEONEnt->fd_ref++; - return TRUE; - } + int fd; #if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,9,99,901,0) XNFasprintf(&busid, "pci:%04x:%02x:%02x.%d", @@ -607,16 +596,35 @@ static Bool radeon_open_drm_master(ScrnInfoPtr pScrn) dev->domain, dev->bus, dev->dev, dev->func); #endif - info->dri2.drm_fd = drmOpen(NULL, busid); - if (info->dri2.drm_fd == -1) { - + fd = drmOpen(NULL, busid); + if (fd == -1) xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "[drm] Failed to open DRM device for %s: %s\n", busid, strerror(errno)); - free(busid); - return FALSE; - } + free(busid); + return fd; +} + +static Bool radeon_open_drm_master(ScrnInfoPtr pScrn) +{ + RADEONInfoPtr info = RADEONPTR(pScrn); + RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn); + drmSetVersion sv; + int err; + + if (pRADEONEnt->fd) { + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + " reusing fd for second head\n"); + + info->drmmode.fd = info->dri2.drm_fd = pRADEONEnt->fd; + pRADEONEnt->fd_ref++; + return TRUE; + } + + info->dri2.drm_fd = radeon_get_drm_master_fd(pScrn); + if (info->dri2.drm_fd == -1) + return FALSE; -- To UNSUBSCRIBE, email to debian-x-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: https://lists.debian.org/e1wwapo-0008gp...@moszumanska.debian.org