diff options
Diffstat (limited to 'driver/xf86-video-ati/src')
21 files changed, 307 insertions, 56 deletions
diff --git a/driver/xf86-video-ati/src/ati_pciids_gen.h b/driver/xf86-video-ati/src/ati_pciids_gen.h index b7970e188..eb57992c1 100644 --- a/driver/xf86-video-ati/src/ati_pciids_gen.h +++ b/driver/xf86-video-ati/src/ati_pciids_gen.h @@ -460,7 +460,7 @@ #define PCI_CHIP_SUMO2_9645 0x9645 #define PCI_CHIP_SUMO_9647 0x9647 #define PCI_CHIP_SUMO_9648 0x9648 -#define PCI_CHIP_SUMO_9649 0x9649 +#define PCI_CHIP_SUMO2_9649 0x9649 #define PCI_CHIP_SUMO_964A 0x964A #define PCI_CHIP_SUMO_964B 0x964B #define PCI_CHIP_SUMO_964C 0x964C @@ -722,3 +722,36 @@ #define PCI_CHIP_KABINI_983D 0x983D #define PCI_CHIP_KABINI_983E 0x983E #define PCI_CHIP_KABINI_983F 0x983F +#define PCI_CHIP_KAVERI_1304 0x1304 +#define PCI_CHIP_KAVERI_1305 0x1305 +#define PCI_CHIP_KAVERI_1306 0x1306 +#define PCI_CHIP_KAVERI_1307 0x1307 +#define PCI_CHIP_KAVERI_1309 0x1309 +#define PCI_CHIP_KAVERI_130A 0x130A +#define PCI_CHIP_KAVERI_130B 0x130B +#define PCI_CHIP_KAVERI_130C 0x130C +#define PCI_CHIP_KAVERI_130D 0x130D +#define PCI_CHIP_KAVERI_130E 0x130E +#define PCI_CHIP_KAVERI_130F 0x130F +#define PCI_CHIP_KAVERI_1310 0x1310 +#define PCI_CHIP_KAVERI_1311 0x1311 +#define PCI_CHIP_KAVERI_1312 0x1312 +#define PCI_CHIP_KAVERI_1313 0x1313 +#define PCI_CHIP_KAVERI_1315 0x1315 +#define PCI_CHIP_KAVERI_1316 0x1316 +#define PCI_CHIP_KAVERI_1317 0x1317 +#define PCI_CHIP_KAVERI_131B 0x131B +#define PCI_CHIP_KAVERI_131C 0x131C +#define PCI_CHIP_KAVERI_131D 0x131D +#define PCI_CHIP_HAWAII_67A0 0x67A0 +#define PCI_CHIP_HAWAII_67A1 0x67A1 +#define PCI_CHIP_HAWAII_67A2 0x67A2 +#define PCI_CHIP_HAWAII_67A8 0x67A8 +#define PCI_CHIP_HAWAII_67A9 0x67A9 +#define PCI_CHIP_HAWAII_67AA 0x67AA +#define PCI_CHIP_HAWAII_67B0 0x67B0 +#define PCI_CHIP_HAWAII_67B1 0x67B1 +#define PCI_CHIP_HAWAII_67B8 0x67B8 +#define PCI_CHIP_HAWAII_67B9 0x67B9 +#define PCI_CHIP_HAWAII_67BA 0x67BA +#define PCI_CHIP_HAWAII_67BE 0x67BE diff --git a/driver/xf86-video-ati/src/drmmode_display.c b/driver/xf86-video-ati/src/drmmode_display.c index 921b7ba9a..ffb158ae8 100644 --- a/driver/xf86-video-ati/src/drmmode_display.c +++ b/driver/xf86-video-ati/src/drmmode_display.c @@ -1478,7 +1478,7 @@ drmmode_xf86crtc_resize (ScrnInfoPtr scrn, int width, int height) ScreenPtr screen = xf86ScrnToScreen(scrn); uint32_t old_fb_id; int i, pitch, old_width, old_height, old_pitch; - int screen_size; + uint32_t screen_size; int cpp = info->pixel_bytes; struct radeon_bo *front_bo; struct radeon_surface surface; @@ -2014,6 +2014,9 @@ void drmmode_uevent_fini(ScrnInfoPtr scrn, drmmode_ptr drmmode) udev_monitor_unref(drmmode->uevent_monitor); udev_unref(u); } + if (info->ChipFamily < CHIP_FAMILY_R600 && + info->r600_shadow_fb && tiling_flags) + tiling_flags |= RADEON_TILING_SURFACE; #endif } diff --git a/driver/xf86-video-ati/src/evergreen_exa.c b/driver/xf86-video-ati/src/evergreen_exa.c index ccd102d59..d788bfc7b 100644 --- a/driver/xf86-video-ati/src/evergreen_exa.c +++ b/driver/xf86-video-ati/src/evergreen_exa.c @@ -156,7 +156,8 @@ EVERGREENPrepareSolid(PixmapPtr pPix, int alu, Pixel pm, Pixel fg) if (accel_state->planemask & 0xff000000) cb_conf.pmask |= 8; /* A */ cb_conf.rop = accel_state->rop; - if (accel_state->dst_obj.tiling_flags == 0) { + if ((accel_state->dst_obj.tiling_flags & RADEON_TILING_MASK) == + RADEON_TILING_LINEAR) { cb_conf.array_mode = 0; cb_conf.non_disp_tiling = 1; } @@ -335,7 +336,8 @@ EVERGREENDoPrepareCopy(ScrnInfoPtr pScrn) tex_res.base_level = 0; tex_res.last_level = 0; tex_res.perf_modulation = 0; - if (accel_state->src_obj[0].tiling_flags == 0) + if ((accel_state->src_obj[0].tiling_flags & RADEON_TILING_MASK) == + RADEON_TILING_LINEAR) tex_res.array_mode = 0; evergreen_set_tex_resource(pScrn, &tex_res, accel_state->src_obj[0].domain); @@ -378,7 +380,8 @@ EVERGREENDoPrepareCopy(ScrnInfoPtr pScrn) if (accel_state->planemask & 0xff000000) cb_conf.pmask |= 8; /* A */ cb_conf.rop = accel_state->rop; - if (accel_state->dst_obj.tiling_flags == 0) { + if ((accel_state->dst_obj.tiling_flags & RADEON_TILING_MASK) == + RADEON_TILING_LINEAR) { cb_conf.array_mode = 0; cb_conf.non_disp_tiling = 1; } @@ -1001,7 +1004,8 @@ static Bool EVERGREENTextureSetup(PicturePtr pPict, PixmapPtr pPix, tex_res.base_level = 0; tex_res.last_level = 0; tex_res.perf_modulation = 0; - if (accel_state->src_obj[unit].tiling_flags == 0) + if ((accel_state->src_obj[unit].tiling_flags & RADEON_TILING_MASK) == + RADEON_TILING_LINEAR) tex_res.array_mode = 0; evergreen_set_tex_resource (pScrn, &tex_res, accel_state->src_obj[unit].domain); @@ -1449,7 +1453,8 @@ static Bool EVERGREENPrepareComposite(int op, PicturePtr pSrcPicture, cb_conf.blendcntl |= CB_BLEND0_CONTROL__ENABLE_bit; cb_conf.rop = 3; cb_conf.pmask = 0xf; - if (accel_state->dst_obj.tiling_flags == 0) { + if ((accel_state->dst_obj.tiling_flags & RADEON_TILING_MASK) == + RADEON_TILING_LINEAR) { cb_conf.array_mode = 0; cb_conf.non_disp_tiling = 1; } @@ -1653,13 +1658,14 @@ EVERGREENUploadToScreen(PixmapPtr pDst, int x, int y, int w, int h, if (!driver_priv || !driver_priv->bo) return FALSE; - /* If we know the BO won't be busy, don't bother with a scratch */ + /* If we know the BO won't be busy / in VRAM, don't bother with a scratch */ copy_dst = driver_priv->bo; copy_pitch = pDst->devKind; if (!(driver_priv->tiling_flags & (RADEON_TILING_MACRO | RADEON_TILING_MICRO))) { if (!radeon_bo_is_referenced_by_cs(driver_priv->bo, info->cs)) { flush = FALSE; - if (!radeon_bo_is_busy(driver_priv->bo, &dst_domain)) + if (!radeon_bo_is_busy(driver_priv->bo, &dst_domain) && + !(dst_domain & RADEON_GEM_DOMAIN_VRAM)) goto copy; } } diff --git a/driver/xf86-video-ati/src/evergreen_textured_videofuncs.c b/driver/xf86-video-ati/src/evergreen_textured_videofuncs.c index be00ecfac..20805ff40 100644 --- a/driver/xf86-video-ati/src/evergreen_textured_videofuncs.c +++ b/driver/xf86-video-ati/src/evergreen_textured_videofuncs.c @@ -246,7 +246,8 @@ EVERGREENDisplayTexturedVideo(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv) tex_res.last_level = 0; tex_res.perf_modulation = 0; tex_res.interlaced = 0; - if (accel_state->src_obj[0].tiling_flags == 0) + if ((accel_state->src_obj[0].tiling_flags & RADEON_TILING_MASK) == + RADEON_TILING_LINEAR) tex_res.array_mode = 1; evergreen_set_tex_resource(pScrn, &tex_res, accel_state->src_obj[0].domain); @@ -279,7 +280,8 @@ EVERGREENDisplayTexturedVideo(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv) tex_res.base = pPriv->planev_offset; tex_res.mip_base = pPriv->planev_offset; tex_res.size = tex_res.pitch * (pPriv->h >> 1); - if (accel_state->src_obj[0].tiling_flags == 0) + if ((accel_state->src_obj[0].tiling_flags & RADEON_TILING_MASK) == + RADEON_TILING_LINEAR) tex_res.array_mode = 1; evergreen_set_tex_resource(pScrn, &tex_res, accel_state->src_obj[0].domain); @@ -302,7 +304,8 @@ EVERGREENDisplayTexturedVideo(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv) tex_res.base = pPriv->planeu_offset; tex_res.mip_base = pPriv->planeu_offset; tex_res.size = tex_res.pitch * (pPriv->h >> 1); - if (accel_state->src_obj[0].tiling_flags == 0) + if ((accel_state->src_obj[0].tiling_flags & RADEON_TILING_MASK) == + RADEON_TILING_LINEAR) tex_res.array_mode = 1; evergreen_set_tex_resource(pScrn, &tex_res, accel_state->src_obj[0].domain); @@ -342,7 +345,8 @@ EVERGREENDisplayTexturedVideo(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv) tex_res.last_level = 0; tex_res.perf_modulation = 0; tex_res.interlaced = 0; - if (accel_state->src_obj[0].tiling_flags == 0) + if ((accel_state->src_obj[0].tiling_flags & RADEON_TILING_MASK) == + RADEON_TILING_LINEAR) tex_res.array_mode = 1; evergreen_set_tex_resource(pScrn, &tex_res, accel_state->src_obj[0].domain); @@ -397,7 +401,8 @@ EVERGREENDisplayTexturedVideo(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv) cb_conf.blend_clamp = 1; cb_conf.pmask = 0xf; cb_conf.rop = 3; - if (accel_state->dst_obj.tiling_flags == 0) { + if ((accel_state->dst_obj.tiling_flags & RADEON_TILING_MASK) == + RADEON_TILING_LINEAR) { cb_conf.array_mode = 1; cb_conf.non_disp_tiling = 1; } diff --git a/driver/xf86-video-ati/src/pcidb/ati_pciids.csv b/driver/xf86-video-ati/src/pcidb/ati_pciids.csv index 221b83cc8..8469a2a59 100644 --- a/driver/xf86-video-ati/src/pcidb/ati_pciids.csv +++ b/driver/xf86-video-ati/src/pcidb/ati_pciids.csv @@ -461,7 +461,7 @@ "0x9645","SUMO2_9645","SUMO2",1,1,,,1,"SUMO2" "0x9647","SUMO_9647","SUMO",1,1,,,1,"SUMO" "0x9648","SUMO_9648","SUMO",1,1,,,1,"SUMO" -"0x9649","SUMO_9649","SUMO",1,1,,,1,"SUMO" +"0x9649","SUMO2_9649","SUMO2",1,1,,,1,"SUMO2" "0x964A","SUMO_964A","SUMO",,1,,,1,"SUMO" "0x964B","SUMO_964B","SUMO",,1,,,1,"SUMO" "0x964C","SUMO_964C","SUMO",,1,,,1,"SUMO" @@ -723,3 +723,36 @@ "0x983D","KABINI_983D","KABINI",,1,,,1,"KABINI" "0x983E","KABINI_983E","KABINI",,1,,,1,"KABINI" "0x983F","KABINI_983F","KABINI",,1,,,1,"KABINI" +"0x1304","KAVERI_1304","KAVERI",1,1,,,1,"KAVERI" +"0x1305","KAVERI_1305","KAVERI",,1,,,1,"KAVERI" +"0x1306","KAVERI_1306","KAVERI",1,1,,,1,"KAVERI" +"0x1307","KAVERI_1307","KAVERI",,1,,,1,"KAVERI" +"0x1309","KAVERI_1309","KAVERI",1,1,,,1,"KAVERI" +"0x130A","KAVERI_130A","KAVERI",1,1,,,1,"KAVERI" +"0x130B","KAVERI_130B","KAVERI",1,1,,,1,"KAVERI" +"0x130C","KAVERI_130C","KAVERI",1,1,,,1,"KAVERI" +"0x130D","KAVERI_130D","KAVERI",1,1,,,1,"KAVERI" +"0x130E","KAVERI_130E","KAVERI",1,1,,,1,"KAVERI" +"0x130F","KAVERI_130F","KAVERI",,1,,,1,"KAVERI" +"0x1310","KAVERI_1310","KAVERI",,1,,,1,"KAVERI" +"0x1311","KAVERI_1311","KAVERI",,1,,,1,"KAVERI" +"0x1312","KAVERI_1312","KAVERI",,1,,,1,"KAVERI" +"0x1313","KAVERI_1313","KAVERI",,1,,,1,"KAVERI" +"0x1315","KAVERI_1315","KAVERI",,1,,,1,"KAVERI" +"0x1316","KAVERI_1316","KAVERI",,1,,,1,"KAVERI" +"0x1317","KAVERI_1317","KAVERI",1,1,,,1,"KAVERI" +"0x131B","KAVERI_131B","KAVERI",,1,,,1,"KAVERI" +"0x131C","KAVERI_131C","KAVERI",,1,,,1,"KAVERI" +"0x131D","KAVERI_131D","KAVERI",,1,,,1,"KAVERI" +"0x67A0","HAWAII_67A0","HAWAII",,,,,,"HAWAII" +"0x67A1","HAWAII_67A1","HAWAII",,,,,,"HAWAII" +"0x67A2","HAWAII_67A2","HAWAII",,,,,,"HAWAII" +"0x67A8","HAWAII_67A8","HAWAII",,,,,,"HAWAII" +"0x67A9","HAWAII_67A9","HAWAII",,,,,,"HAWAII" +"0x67AA","HAWAII_67AA","HAWAII",,,,,,"HAWAII" +"0x67B0","HAWAII_67B0","HAWAII",,,,,,"HAWAII" +"0x67B1","HAWAII_67B1","HAWAII",,,,,,"HAWAII" +"0x67B8","HAWAII_67B8","HAWAII",,,,,,"HAWAII" +"0x67B9","HAWAII_67B9","HAWAII",,,,,,"HAWAII" +"0x67BA","HAWAII_67BA","HAWAII",,,,,,"HAWAII" +"0x67BE","HAWAII_67BE","HAWAII",,,,,,"HAWAII" diff --git a/driver/xf86-video-ati/src/r600_exa.c b/driver/xf86-video-ati/src/r600_exa.c index a354ccd0d..8d11ce71d 100644 --- a/driver/xf86-video-ati/src/r600_exa.c +++ b/driver/xf86-video-ati/src/r600_exa.c @@ -1538,13 +1538,14 @@ R600UploadToScreenCS(PixmapPtr pDst, int x, int y, int w, int h, if (!driver_priv || !driver_priv->bo) return FALSE; - /* If we know the BO won't be busy, don't bother with a scratch */ + /* If we know the BO won't be busy / in VRAM, don't bother with a scratch */ copy_dst = driver_priv->bo; copy_pitch = pDst->devKind; if (!(driver_priv->tiling_flags & (RADEON_TILING_MACRO | RADEON_TILING_MICRO))) { if (!radeon_bo_is_referenced_by_cs(driver_priv->bo, info->cs)) { flush = FALSE; - if (!radeon_bo_is_busy(driver_priv->bo, &dst_domain)) + if (!radeon_bo_is_busy(driver_priv->bo, &dst_domain) && + !(dst_domain & RADEON_GEM_DOMAIN_VRAM)) goto copy; } /* use cpu copy for fast fb access */ diff --git a/driver/xf86-video-ati/src/radeon.h b/driver/xf86-video-ati/src/radeon.h index 466089380..f1817e741 100644 --- a/driver/xf86-video-ati/src/radeon.h +++ b/driver/xf86-video-ati/src/radeon.h @@ -524,7 +524,7 @@ extern void radeon_cs_flush_indirect(ScrnInfoPtr pScrn); extern void radeon_ddx_cs_start(ScrnInfoPtr pScrn, int num, const char *file, const char *func, int line); -void radeon_kms_update_vram_limit(ScrnInfoPtr pScrn, int new_fb_size); +void radeon_kms_update_vram_limit(ScrnInfoPtr pScrn, uint32_t new_fb_size); extern RADEONEntPtr RADEONEntPriv(ScrnInfoPtr pScrn); drmVBlankSeqType radeon_populate_vbl_request_type(xf86CrtcPtr crtc); diff --git a/driver/xf86-video-ati/src/radeon_bo_helper.c b/driver/xf86-video-ati/src/radeon_bo_helper.c index 539590cb2..ed964d7b0 100644 --- a/driver/xf86-video-ati/src/radeon_bo_helper.c +++ b/driver/xf86-video-ati/src/radeon_bo_helper.c @@ -124,7 +124,7 @@ radeon_alloc_pixmap_bo(ScrnInfoPtr pScrn, int width, int height, int depth, surface.last_level = 0; surface.bpe = cpp; surface.nsamples = 1; - if (height < 64) { + if (height < 128) { /* disable 2d tiling for small surface to work around * the fact that ddx align height to 8 pixel for old * obscure reason i can't remember diff --git a/driver/xf86-video-ati/src/radeon_chipinfo_gen.h b/driver/xf86-video-ati/src/radeon_chipinfo_gen.h index 221d93e93..fc9474b9e 100644 --- a/driver/xf86-video-ati/src/radeon_chipinfo_gen.h +++ b/driver/xf86-video-ati/src/radeon_chipinfo_gen.h @@ -380,7 +380,7 @@ static RADEONCardInfo RADEONCards[] = { { 0x9645, CHIP_FAMILY_SUMO2, 1, 1, 0, 0, 1 }, { 0x9647, CHIP_FAMILY_SUMO, 1, 1, 0, 0, 1 }, { 0x9648, CHIP_FAMILY_SUMO, 1, 1, 0, 0, 1 }, - { 0x9649, CHIP_FAMILY_SUMO, 1, 1, 0, 0, 1 }, + { 0x9649, CHIP_FAMILY_SUMO2, 1, 1, 0, 0, 1 }, { 0x964A, CHIP_FAMILY_SUMO, 0, 1, 0, 0, 1 }, { 0x964B, CHIP_FAMILY_SUMO, 0, 1, 0, 0, 1 }, { 0x964C, CHIP_FAMILY_SUMO, 0, 1, 0, 0, 1 }, @@ -642,4 +642,37 @@ 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 }, + { 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 }, + { 0x1307, CHIP_FAMILY_KAVERI, 0, 1, 0, 0, 1 }, + { 0x1309, CHIP_FAMILY_KAVERI, 1, 1, 0, 0, 1 }, + { 0x130A, CHIP_FAMILY_KAVERI, 1, 1, 0, 0, 1 }, + { 0x130B, CHIP_FAMILY_KAVERI, 1, 1, 0, 0, 1 }, + { 0x130C, CHIP_FAMILY_KAVERI, 1, 1, 0, 0, 1 }, + { 0x130D, CHIP_FAMILY_KAVERI, 1, 1, 0, 0, 1 }, + { 0x130E, CHIP_FAMILY_KAVERI, 1, 1, 0, 0, 1 }, + { 0x130F, CHIP_FAMILY_KAVERI, 0, 1, 0, 0, 1 }, + { 0x1310, CHIP_FAMILY_KAVERI, 0, 1, 0, 0, 1 }, + { 0x1311, CHIP_FAMILY_KAVERI, 0, 1, 0, 0, 1 }, + { 0x1312, CHIP_FAMILY_KAVERI, 0, 1, 0, 0, 1 }, + { 0x1313, CHIP_FAMILY_KAVERI, 0, 1, 0, 0, 1 }, + { 0x1315, CHIP_FAMILY_KAVERI, 0, 1, 0, 0, 1 }, + { 0x1316, CHIP_FAMILY_KAVERI, 0, 1, 0, 0, 1 }, + { 0x1317, CHIP_FAMILY_KAVERI, 1, 1, 0, 0, 1 }, + { 0x131B, CHIP_FAMILY_KAVERI, 0, 1, 0, 0, 1 }, + { 0x131C, CHIP_FAMILY_KAVERI, 0, 1, 0, 0, 1 }, + { 0x131D, CHIP_FAMILY_KAVERI, 0, 1, 0, 0, 1 }, + { 0x67A0, CHIP_FAMILY_HAWAII, 0, 0, 0, 0, 0 }, + { 0x67A1, CHIP_FAMILY_HAWAII, 0, 0, 0, 0, 0 }, + { 0x67A2, CHIP_FAMILY_HAWAII, 0, 0, 0, 0, 0 }, + { 0x67A8, CHIP_FAMILY_HAWAII, 0, 0, 0, 0, 0 }, + { 0x67A9, CHIP_FAMILY_HAWAII, 0, 0, 0, 0, 0 }, + { 0x67AA, CHIP_FAMILY_HAWAII, 0, 0, 0, 0, 0 }, + { 0x67B0, CHIP_FAMILY_HAWAII, 0, 0, 0, 0, 0 }, + { 0x67B1, CHIP_FAMILY_HAWAII, 0, 0, 0, 0, 0 }, + { 0x67B8, CHIP_FAMILY_HAWAII, 0, 0, 0, 0, 0 }, + { 0x67B9, CHIP_FAMILY_HAWAII, 0, 0, 0, 0, 0 }, + { 0x67BA, CHIP_FAMILY_HAWAII, 0, 0, 0, 0, 0 }, + { 0x67BE, CHIP_FAMILY_HAWAII, 0, 0, 0, 0, 0 }, }; diff --git a/driver/xf86-video-ati/src/radeon_chipset_gen.h b/driver/xf86-video-ati/src/radeon_chipset_gen.h index 02ae8528c..afab6b000 100644 --- a/driver/xf86-video-ati/src/radeon_chipset_gen.h +++ b/driver/xf86-video-ati/src/radeon_chipset_gen.h @@ -380,7 +380,7 @@ SymTabRec RADEONChipsets[] = { { PCI_CHIP_SUMO2_9645, "SUMO2" }, { PCI_CHIP_SUMO_9647, "SUMO" }, { PCI_CHIP_SUMO_9648, "SUMO" }, - { PCI_CHIP_SUMO_9649, "SUMO" }, + { PCI_CHIP_SUMO2_9649, "SUMO2" }, { PCI_CHIP_SUMO_964A, "SUMO" }, { PCI_CHIP_SUMO_964B, "SUMO" }, { PCI_CHIP_SUMO_964C, "SUMO" }, @@ -642,5 +642,38 @@ SymTabRec RADEONChipsets[] = { { PCI_CHIP_KABINI_983D, "KABINI" }, { PCI_CHIP_KABINI_983E, "KABINI" }, { PCI_CHIP_KABINI_983F, "KABINI" }, + { PCI_CHIP_KAVERI_1304, "KAVERI" }, + { PCI_CHIP_KAVERI_1305, "KAVERI" }, + { PCI_CHIP_KAVERI_1306, "KAVERI" }, + { PCI_CHIP_KAVERI_1307, "KAVERI" }, + { PCI_CHIP_KAVERI_1309, "KAVERI" }, + { PCI_CHIP_KAVERI_130A, "KAVERI" }, + { PCI_CHIP_KAVERI_130B, "KAVERI" }, + { PCI_CHIP_KAVERI_130C, "KAVERI" }, + { PCI_CHIP_KAVERI_130D, "KAVERI" }, + { PCI_CHIP_KAVERI_130E, "KAVERI" }, + { PCI_CHIP_KAVERI_130F, "KAVERI" }, + { PCI_CHIP_KAVERI_1310, "KAVERI" }, + { PCI_CHIP_KAVERI_1311, "KAVERI" }, + { PCI_CHIP_KAVERI_1312, "KAVERI" }, + { PCI_CHIP_KAVERI_1313, "KAVERI" }, + { PCI_CHIP_KAVERI_1315, "KAVERI" }, + { PCI_CHIP_KAVERI_1316, "KAVERI" }, + { PCI_CHIP_KAVERI_1317, "KAVERI" }, + { PCI_CHIP_KAVERI_131B, "KAVERI" }, + { PCI_CHIP_KAVERI_131C, "KAVERI" }, + { PCI_CHIP_KAVERI_131D, "KAVERI" }, + { PCI_CHIP_HAWAII_67A0, "HAWAII" }, + { PCI_CHIP_HAWAII_67A1, "HAWAII" }, + { PCI_CHIP_HAWAII_67A2, "HAWAII" }, + { PCI_CHIP_HAWAII_67A8, "HAWAII" }, + { PCI_CHIP_HAWAII_67A9, "HAWAII" }, + { PCI_CHIP_HAWAII_67AA, "HAWAII" }, + { PCI_CHIP_HAWAII_67B0, "HAWAII" }, + { PCI_CHIP_HAWAII_67B1, "HAWAII" }, + { PCI_CHIP_HAWAII_67B8, "HAWAII" }, + { PCI_CHIP_HAWAII_67B9, "HAWAII" }, + { PCI_CHIP_HAWAII_67BA, "HAWAII" }, + { PCI_CHIP_HAWAII_67BE, "HAWAII" }, { -1, NULL } }; diff --git a/driver/xf86-video-ati/src/radeon_dri2.c b/driver/xf86-video-ati/src/radeon_dri2.c index fa3719d64..d47b03500 100644 --- a/driver/xf86-video-ati/src/radeon_dri2.c +++ b/driver/xf86-video-ati/src/radeon_dri2.c @@ -66,6 +66,10 @@ #define FALLBACK_SWAP_DELAY 16 +#ifdef USE_GLAMOR +#include <glamor.h> +#endif + typedef DRI2BufferPtr BufferPtr; struct dri2_buffer_priv { @@ -89,7 +93,6 @@ static PixmapPtr fixup_glamor(DrawablePtr drawable, PixmapPtr pixmap) PixmapPtr old = get_drawable_pixmap(drawable); #ifdef USE_GLAMOR ScreenPtr screen = drawable->pScreen; - ScrnInfoPtr scrn = xf86ScreenToScrn(screen); struct radeon_pixmap *priv = radeon_get_pixmap_private(pixmap); GCPtr gc; @@ -118,21 +121,13 @@ static PixmapPtr fixup_glamor(DrawablePtr drawable, PixmapPtr pixmap) } radeon_set_pixmap_private(pixmap, NULL); - screen->DestroyPixmap(pixmap); /* And redirect the pixmap to the new bo (for 3D). */ + glamor_egl_exchange_buffers(old, pixmap); radeon_set_pixmap_private(old, priv); + screen->DestroyPixmap(pixmap); old->refcnt++; - /* This creating should not fail, as we already created its - * successfully. But if it happens, we put a warning indicator - * here, and the old pixmap will still be a glamor pixmap, and - * latter the pixmap_flink will get a 0 name, then the X server - * will pass a BadAlloc to the client.*/ - if (!radeon_glamor_create_textured_pixmap(old)) - xf86DrvMsg(scrn->scrnIndex, X_WARNING, - "Failed to get DRI drawable for glamor pixmap.\n"); - screen->ModifyPixmapHeader(old, old->drawable.width, old->drawable.height, @@ -520,6 +515,8 @@ typedef struct _DRI2ClientEvents { #if HAS_DEVPRIVATEKEYREC +static int DRI2InfoCnt; + static DevPrivateKeyRec DRI2ClientEventsPrivateKeyRec; #define DRI2ClientEventsPrivateKey (&DRI2ClientEventsPrivateKeyRec) @@ -893,7 +890,7 @@ CARD32 radeon_dri2_extrapolate_msc_delay(xf86CrtcPtr crtc, CARD64 *target_msc, RADEONInfoPtr info = RADEONPTR(pScrn); int nominal_frame_rate = drmmode_crtc->dpms_last_fps; CARD64 last_vblank_ust = drmmode_crtc->dpms_last_ust; - int last_vblank_seq = drmmode_crtc->dpms_last_seq; + uint32_t last_vblank_seq = drmmode_crtc->dpms_last_seq; int interpolated_vblanks = drmmode_crtc->interpolated_vblanks; int target_seq; CARD64 now, target_time, delta_t; @@ -1543,7 +1540,6 @@ radeon_dri2_screen_init(ScreenPtr pScreen) RADEONInfoPtr info = RADEONPTR(pScrn); DRI2InfoRec dri2_info = { 0 }; #ifdef USE_DRI2_SCHEDULING - RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn); const char *driverNames[2]; Bool scheduling_works = TRUE; #endif @@ -1607,7 +1603,7 @@ radeon_dri2_screen_init(ScreenPtr pScreen) dri2_info.driverNames = driverNames; driverNames[0] = driverNames[1] = dri2_info.driverName; - if (pRADEONEnt->dri2_info_cnt == 0) { + if (DRI2InfoCnt == 0) { #if HAS_DIXREGISTERPRIVATEKEY if (!dixRegisterPrivateKey(DRI2ClientEventsPrivateKey, PRIVATE_CLIENT, sizeof(DRI2ClientEventsRec))) { @@ -1627,7 +1623,7 @@ radeon_dri2_screen_init(ScreenPtr pScreen) AddCallback(&ClientStateCallback, radeon_dri2_client_state_changed, 0); } - pRADEONEnt->dri2_info_cnt++; + DRI2InfoCnt++; } #endif @@ -1646,12 +1642,12 @@ void radeon_dri2_close_screen(ScreenPtr pScreen) { ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen); RADEONInfoPtr info = RADEONPTR(pScrn); -#ifdef USE_DRI2_SCHEDULING - RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn); - if (--pRADEONEnt->dri2_info_cnt == 0) +#ifdef USE_DRI2_SCHEDULING + if (--DRI2InfoCnt == 0) DeleteCallback(&ClientStateCallback, radeon_dri2_client_state_changed, 0); #endif + DRI2CloseScreen(pScreen); drmFree(info->dri2.device_name); } diff --git a/driver/xf86-video-ati/src/radeon_drm.h b/driver/xf86-video-ati/src/radeon_drm.h index 042e82221..2bbd8fa3d 100644 --- a/driver/xf86-video-ati/src/radeon_drm.h +++ b/driver/xf86-video-ati/src/radeon_drm.h @@ -800,6 +800,8 @@ struct drm_radeon_gem_create { uint32_t flags; }; +#define RADEON_TILING_MASK 0xff +#define RADEON_TILING_LINEAR 0x0 #define RADEON_TILING_MACRO 0x1 #define RADEON_TILING_MICRO 0x2 #define RADEON_TILING_SWAP_16BIT 0x4 diff --git a/driver/xf86-video-ati/src/radeon_exa_funcs.c b/driver/xf86-video-ati/src/radeon_exa_funcs.c index d9340c5f3..d9013057d 100644 --- a/driver/xf86-video-ati/src/radeon_exa_funcs.c +++ b/driver/xf86-video-ati/src/radeon_exa_funcs.c @@ -403,13 +403,14 @@ RADEONUploadToScreenCS(PixmapPtr pDst, int x, int y, int w, int h, } #endif - /* If we know the BO won't be busy, don't bother with a scratch */ + /* If we know the BO won't be busy / in VRAM, don't bother with a scratch */ copy_dst = driver_priv->bo; copy_pitch = pDst->devKind; if (!(driver_priv->tiling_flags & (RADEON_TILING_MACRO | RADEON_TILING_MICRO))) { if (!radeon_bo_is_referenced_by_cs(driver_priv->bo, info->cs)) { flush = FALSE; - if (!radeon_bo_is_busy(driver_priv->bo, &dst_domain)) + if (!radeon_bo_is_busy(driver_priv->bo, &dst_domain) && + !(dst_domain & RADEON_GEM_DOMAIN_VRAM)) goto copy; } /* use cpu copy for fast fb access */ diff --git a/driver/xf86-video-ati/src/radeon_glamor.c b/driver/xf86-video-ati/src/radeon_glamor.c index d52790010..1d666d191 100644 --- a/driver/xf86-video-ati/src/radeon_glamor.c +++ b/driver/xf86-video-ati/src/radeon_glamor.c @@ -93,18 +93,26 @@ radeon_glamor_pre_init(ScrnInfoPtr scrn) if (s && strcasecmp(s, "glamor") != 0) return FALSE; + if (info->ChipFamily < CHIP_FAMILY_R600) { + xf86DrvMsg(scrn->scrnIndex, s ? X_ERROR : X_WARNING, + "glamor requires R600 or newer GPU, disabling.\n"); + return FALSE; + } + if (scrn->depth < 24) { xf86DrvMsg(scrn->scrnIndex, s ? X_ERROR : X_WARNING, "glamor requires depth >= 24, disabling.\n"); return FALSE; } +#if XORG_VERSION_CURRENT < XORG_VERSION_NUMERIC(1,15,0,0,0) if (!xf86LoaderCheckSymbol("glamor_egl_init")) { xf86DrvMsg(scrn->scrnIndex, s ? X_ERROR : X_WARNING, "glamor requires Load \"glamoregl\" in " "Section \"Module\", disabling.\n"); return FALSE; } +#endif /* Load glamor module */ if ((glamor_module = xf86LoadSubModule(scrn, GLAMOR_EGL_MODULE_NAME))) { @@ -349,3 +357,8 @@ radeon_glamor_flush(ScrnInfoPtr pScrn) if (info->use_glamor) glamor_block_handler(pScrn->pScreen); } + +XF86VideoAdaptorPtr radeon_glamor_xv_init(ScreenPtr pScreen, int num_adapt) +{ + return glamor_xv_init(pScreen, num_adapt); +} diff --git a/driver/xf86-video-ati/src/radeon_glamor.h b/driver/xf86-video-ati/src/radeon_glamor.h index cb76ff4f2..36addd70d 100644 --- a/driver/xf86-video-ati/src/radeon_glamor.h +++ b/driver/xf86-video-ati/src/radeon_glamor.h @@ -27,6 +27,7 @@ #ifndef RADEON_GLAMOR_H #define RADEON_GLAMOR_H +#include "xf86xv.h" #ifdef USE_GLAMOR #include "radeon_surface.h" @@ -43,6 +44,8 @@ void radeon_glamor_exchange_buffers(PixmapPtr src, PixmapPtr dst); Bool radeon_glamor_pixmap_is_offscreen(PixmapPtr pixmap); +XF86VideoAdaptorPtr radeon_glamor_xv_init(ScreenPtr pScreen, int num_adapt); + struct radeon_pixmap { struct radeon_surface surface; struct radeon_bo *bo; @@ -88,6 +91,7 @@ static inline Bool radeon_glamor_pixmap_is_offscreen(PixmapPtr pixmap) { return static inline struct radeon_pixmap *radeon_get_pixmap_private(PixmapPtr pixmap) { return NULL; } +static inline XF86VideoAdaptorPtr radeon_glamor_xv_init(ScreenPtr pScreen, int num_adapt) { return NULL; } #endif #endif /* RADEON_GLAMOR_H */ diff --git a/driver/xf86-video-ati/src/radeon_kms.c b/driver/xf86-video-ati/src/radeon_kms.c index 82e88d444..21a420f30 100644 --- a/driver/xf86-video-ati/src/radeon_kms.c +++ b/driver/xf86-video-ati/src/radeon_kms.c @@ -489,7 +489,8 @@ static Bool RADEONPreInitAccel_KMS(ScrnInfoPtr pScrn) info->is_fast_fb = TRUE; } - if (xf86ReturnOptValBool(info->Options, OPTION_NOACCEL, FALSE) || + if (xf86ReturnOptValBool(info->Options, OPTION_NOACCEL, + info->ChipFamily == CHIP_FAMILY_HAWAII) || (!RADEONIsAccelWorking(pScrn))) { xf86DrvMsg(pScrn->scrnIndex, X_INFO, "GPU accel disabled or not working, using shadowfb for KMS\n"); @@ -606,7 +607,7 @@ static Bool radeon_open_drm_master(ScrnInfoPtr pScrn) dev->domain, dev->bus, dev->dev, dev->func); #endif - info->dri2.drm_fd = drmOpen("radeon", busid); + info->dri2.drm_fd = drmOpen(NULL, busid); if (info->dri2.drm_fd == -1) { xf86DrvMsg(pScrn->scrnIndex, X_ERROR, @@ -860,17 +861,17 @@ Bool RADEONPreInit_KMS(ScrnInfoPtr pScrn, int flags) Bool colorTilingDefault = xorgGetVersion() >= XORG_VERSION_NUMERIC(1,9,4,901,0) && info->ChipFamily >= CHIP_FAMILY_R300 && - /* this ARUBA check could be removed sometime after a big mesa release + /* this check could be removed sometime after a big mesa release * with proper bit, in the meantime you need to set tiling option in * xorg configuration files */ - info->ChipFamily <= CHIP_FAMILY_ARUBA && + info->ChipFamily <= CHIP_FAMILY_HAINAN && !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_ARUBA); + info->ChipFamily <= CHIP_FAMILY_HAINAN); } if (info->ChipFamily >= CHIP_FAMILY_R600) { @@ -1321,7 +1322,7 @@ Bool RADEONScreenInit_KMS(SCREEN_INIT_ARGS_DECL) */ /* xf86DiDGAInit(pScreen, info->LinearAddr + pScrn->fbOffset); */ #endif - if (!info->use_glamor && info->r600_shadow_fb == FALSE) { + if (info->r600_shadow_fb == FALSE) { /* Init Xv */ xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, RADEON_LOGLEVEL_DEBUG, "Initializing Xv\n"); @@ -1450,7 +1451,7 @@ static Bool radeon_setup_kernel_mem(ScreenPtr pScreen) RADEONInfoPtr info = RADEONPTR(pScrn); xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn); int cpp = info->pixel_bytes; - int screen_size; + uint32_t screen_size; int pitch, base_align; uint32_t tiling_flags = 0; struct radeon_surface surface; @@ -1600,11 +1601,11 @@ static Bool radeon_setup_kernel_mem(ScreenPtr pScreen) return TRUE; } -void radeon_kms_update_vram_limit(ScrnInfoPtr pScrn, int new_fb_size) +void radeon_kms_update_vram_limit(ScrnInfoPtr pScrn, uint32_t new_fb_size) { xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn); RADEONInfoPtr info = RADEONPTR(pScrn); - int remain_size_bytes; + uint64_t remain_size_bytes; int c; for (c = 0; c < xf86_config->num_crtc; c++) { @@ -1615,9 +1616,13 @@ void radeon_kms_update_vram_limit(ScrnInfoPtr pScrn, int new_fb_size) remain_size_bytes = info->vram_size - new_fb_size; remain_size_bytes = (remain_size_bytes / 10) * 9; - radeon_cs_set_limit(info->cs, RADEON_GEM_DOMAIN_VRAM, remain_size_bytes); + if (remain_size_bytes > 0xffffffff) + remain_size_bytes = 0xffffffff; + radeon_cs_set_limit(info->cs, RADEON_GEM_DOMAIN_VRAM, + (uint32_t)remain_size_bytes); - xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VRAM usage limit set to %dK\n", remain_size_bytes / 1024); + xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VRAM usage limit set to %uK\n", + (uint32_t)remain_size_bytes / 1024); } /* Used to disallow modes that are not supported by the hardware */ diff --git a/driver/xf86-video-ati/src/radeon_pci_chipset_gen.h b/driver/xf86-video-ati/src/radeon_pci_chipset_gen.h index ff6227f03..da4440bfb 100644 --- a/driver/xf86-video-ati/src/radeon_pci_chipset_gen.h +++ b/driver/xf86-video-ati/src/radeon_pci_chipset_gen.h @@ -380,7 +380,7 @@ static PciChipsets RADEONPciChipsets[] = { { PCI_CHIP_SUMO2_9645, PCI_CHIP_SUMO2_9645, RES_SHARED_VGA }, { PCI_CHIP_SUMO_9647, PCI_CHIP_SUMO_9647, RES_SHARED_VGA }, { PCI_CHIP_SUMO_9648, PCI_CHIP_SUMO_9648, RES_SHARED_VGA }, - { PCI_CHIP_SUMO_9649, PCI_CHIP_SUMO_9649, RES_SHARED_VGA }, + { PCI_CHIP_SUMO2_9649, PCI_CHIP_SUMO2_9649, RES_SHARED_VGA }, { PCI_CHIP_SUMO_964A, PCI_CHIP_SUMO_964A, RES_SHARED_VGA }, { PCI_CHIP_SUMO_964B, PCI_CHIP_SUMO_964B, RES_SHARED_VGA }, { PCI_CHIP_SUMO_964C, PCI_CHIP_SUMO_964C, RES_SHARED_VGA }, @@ -642,5 +642,38 @@ 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_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 }, + { PCI_CHIP_KAVERI_1307, PCI_CHIP_KAVERI_1307, RES_SHARED_VGA }, + { PCI_CHIP_KAVERI_1309, PCI_CHIP_KAVERI_1309, RES_SHARED_VGA }, + { PCI_CHIP_KAVERI_130A, PCI_CHIP_KAVERI_130A, RES_SHARED_VGA }, + { PCI_CHIP_KAVERI_130B, PCI_CHIP_KAVERI_130B, RES_SHARED_VGA }, + { PCI_CHIP_KAVERI_130C, PCI_CHIP_KAVERI_130C, RES_SHARED_VGA }, + { PCI_CHIP_KAVERI_130D, PCI_CHIP_KAVERI_130D, RES_SHARED_VGA }, + { PCI_CHIP_KAVERI_130E, PCI_CHIP_KAVERI_130E, RES_SHARED_VGA }, + { PCI_CHIP_KAVERI_130F, PCI_CHIP_KAVERI_130F, RES_SHARED_VGA }, + { PCI_CHIP_KAVERI_1310, PCI_CHIP_KAVERI_1310, RES_SHARED_VGA }, + { PCI_CHIP_KAVERI_1311, PCI_CHIP_KAVERI_1311, RES_SHARED_VGA }, + { PCI_CHIP_KAVERI_1312, PCI_CHIP_KAVERI_1312, RES_SHARED_VGA }, + { PCI_CHIP_KAVERI_1313, PCI_CHIP_KAVERI_1313, RES_SHARED_VGA }, + { PCI_CHIP_KAVERI_1315, PCI_CHIP_KAVERI_1315, RES_SHARED_VGA }, + { PCI_CHIP_KAVERI_1316, PCI_CHIP_KAVERI_1316, RES_SHARED_VGA }, + { PCI_CHIP_KAVERI_1317, PCI_CHIP_KAVERI_1317, RES_SHARED_VGA }, + { PCI_CHIP_KAVERI_131B, PCI_CHIP_KAVERI_131B, RES_SHARED_VGA }, + { PCI_CHIP_KAVERI_131C, PCI_CHIP_KAVERI_131C, RES_SHARED_VGA }, + { PCI_CHIP_KAVERI_131D, PCI_CHIP_KAVERI_131D, RES_SHARED_VGA }, + { PCI_CHIP_HAWAII_67A0, PCI_CHIP_HAWAII_67A0, RES_SHARED_VGA }, + { PCI_CHIP_HAWAII_67A1, PCI_CHIP_HAWAII_67A1, RES_SHARED_VGA }, + { PCI_CHIP_HAWAII_67A2, PCI_CHIP_HAWAII_67A2, RES_SHARED_VGA }, + { PCI_CHIP_HAWAII_67A8, PCI_CHIP_HAWAII_67A8, RES_SHARED_VGA }, + { PCI_CHIP_HAWAII_67A9, PCI_CHIP_HAWAII_67A9, RES_SHARED_VGA }, + { PCI_CHIP_HAWAII_67AA, PCI_CHIP_HAWAII_67AA, RES_SHARED_VGA }, + { PCI_CHIP_HAWAII_67B0, PCI_CHIP_HAWAII_67B0, RES_SHARED_VGA }, + { PCI_CHIP_HAWAII_67B1, PCI_CHIP_HAWAII_67B1, RES_SHARED_VGA }, + { PCI_CHIP_HAWAII_67B8, PCI_CHIP_HAWAII_67B8, RES_SHARED_VGA }, + { PCI_CHIP_HAWAII_67B9, PCI_CHIP_HAWAII_67B9, RES_SHARED_VGA }, + { PCI_CHIP_HAWAII_67BA, PCI_CHIP_HAWAII_67BA, RES_SHARED_VGA }, + { PCI_CHIP_HAWAII_67BE, PCI_CHIP_HAWAII_67BE, RES_SHARED_VGA }, { -1, -1, RES_UNDEFINED } }; diff --git a/driver/xf86-video-ati/src/radeon_pci_device_match_gen.h b/driver/xf86-video-ati/src/radeon_pci_device_match_gen.h index 88603e639..d4b3763cf 100644 --- a/driver/xf86-video-ati/src/radeon_pci_device_match_gen.h +++ b/driver/xf86-video-ati/src/radeon_pci_device_match_gen.h @@ -380,7 +380,7 @@ static const struct pci_id_match radeon_device_match[] = { ATI_DEVICE_MATCH( PCI_CHIP_SUMO2_9645, 0 ), ATI_DEVICE_MATCH( PCI_CHIP_SUMO_9647, 0 ), ATI_DEVICE_MATCH( PCI_CHIP_SUMO_9648, 0 ), - ATI_DEVICE_MATCH( PCI_CHIP_SUMO_9649, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_SUMO2_9649, 0 ), ATI_DEVICE_MATCH( PCI_CHIP_SUMO_964A, 0 ), ATI_DEVICE_MATCH( PCI_CHIP_SUMO_964B, 0 ), ATI_DEVICE_MATCH( PCI_CHIP_SUMO_964C, 0 ), @@ -642,5 +642,38 @@ 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_KAVERI_1304, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_KAVERI_1305, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_KAVERI_1306, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_KAVERI_1307, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_KAVERI_1309, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_KAVERI_130A, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_KAVERI_130B, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_KAVERI_130C, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_KAVERI_130D, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_KAVERI_130E, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_KAVERI_130F, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_KAVERI_1310, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_KAVERI_1311, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_KAVERI_1312, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_KAVERI_1313, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_KAVERI_1315, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_KAVERI_1316, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_KAVERI_1317, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_KAVERI_131B, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_KAVERI_131C, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_KAVERI_131D, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_HAWAII_67A0, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_HAWAII_67A1, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_HAWAII_67A2, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_HAWAII_67A8, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_HAWAII_67A9, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_HAWAII_67AA, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_HAWAII_67B0, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_HAWAII_67B1, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_HAWAII_67B8, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_HAWAII_67B9, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_HAWAII_67BA, 0 ), + ATI_DEVICE_MATCH( PCI_CHIP_HAWAII_67BE, 0 ), { 0, 0, 0 } }; diff --git a/driver/xf86-video-ati/src/radeon_probe.c b/driver/xf86-video-ati/src/radeon_probe.c index baca574ea..2d3c58e82 100644 --- a/driver/xf86-video-ati/src/radeon_probe.c +++ b/driver/xf86-video-ati/src/radeon_probe.c @@ -50,6 +50,10 @@ #include "xf86drmMode.h" #include "dri.h" +#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) +#include <xf86_OSproc.h> +#endif + #ifdef XSERVER_PLATFORM_BUS #include <xf86platformBus.h> #endif @@ -92,6 +96,12 @@ static Bool radeon_kernel_mode_enabled(ScrnInfoPtr pScrn, struct pci_device *pci busIdString = DRICreatePCIBusID(pci_dev); ret = drmCheckModesettingSupported(busIdString); +#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) + if (ret) { + if (xf86LoadKernelModule("radeonkms")) + ret = drmCheckModesettingSupported(busIdString); + } +#endif free(busIdString); if (ret) { xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 0, diff --git a/driver/xf86-video-ati/src/radeon_probe.h b/driver/xf86-video-ati/src/radeon_probe.h index 67e70ef93..cea669561 100644 --- a/driver/xf86-video-ati/src/radeon_probe.h +++ b/driver/xf86-video-ati/src/radeon_probe.h @@ -110,6 +110,7 @@ typedef enum { CHIP_FAMILY_BONAIRE, CHIP_FAMILY_KAVERI, CHIP_FAMILY_KABINI, + CHIP_FAMILY_HAWAII, CHIP_FAMILY_LAST } RADEONChipFamily; @@ -135,7 +136,6 @@ 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; - int dri2_info_cnt; } RADEONEntRec, *RADEONEntPtr; extern const OptionInfoRec *RADEONOptionsWeak(void); diff --git a/driver/xf86-video-ati/src/radeon_video.c b/driver/xf86-video-ati/src/radeon_video.c index 56cd9abde..5349d113d 100644 --- a/driver/xf86-video-ati/src/radeon_video.c +++ b/driver/xf86-video-ati/src/radeon_video.c @@ -165,7 +165,14 @@ void RADEONInitVideo(ScreenPtr pScreen) memcpy(newAdaptors, adaptors, num_adaptors * sizeof(XF86VideoAdaptorPtr)); adaptors = newAdaptors; - if ((info->ChipFamily < CHIP_FAMILY_RS400) + if (info->use_glamor) { + texturedAdaptor = radeon_glamor_xv_init(pScreen, 16); + if (texturedAdaptor != NULL) { + adaptors[num_adaptors++] = texturedAdaptor; + xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Set up textured video (glamor)\n"); + } else + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Failed to set up textured video (glamor)\n"); + } else if ((info->ChipFamily < CHIP_FAMILY_RS400) || (info->directRenderingEnabled) ) { texturedAdaptor = RADEONSetupImageTexturedVideo(pScreen); |