summaryrefslogtreecommitdiff
path: root/driver/xf86-video-ati/src
diff options
context:
space:
mode:
Diffstat (limited to 'driver/xf86-video-ati/src')
-rw-r--r--driver/xf86-video-ati/src/ati_pciids_gen.h35
-rw-r--r--driver/xf86-video-ati/src/drmmode_display.c5
-rw-r--r--driver/xf86-video-ati/src/evergreen_exa.c20
-rw-r--r--driver/xf86-video-ati/src/evergreen_textured_videofuncs.c15
-rw-r--r--driver/xf86-video-ati/src/pcidb/ati_pciids.csv35
-rw-r--r--driver/xf86-video-ati/src/r600_exa.c5
-rw-r--r--driver/xf86-video-ati/src/radeon.h2
-rw-r--r--driver/xf86-video-ati/src/radeon_bo_helper.c2
-rw-r--r--driver/xf86-video-ati/src/radeon_chipinfo_gen.h35
-rw-r--r--driver/xf86-video-ati/src/radeon_chipset_gen.h35
-rw-r--r--driver/xf86-video-ati/src/radeon_dri2.c32
-rw-r--r--driver/xf86-video-ati/src/radeon_drm.h2
-rw-r--r--driver/xf86-video-ati/src/radeon_exa_funcs.c5
-rw-r--r--driver/xf86-video-ati/src/radeon_glamor.c13
-rw-r--r--driver/xf86-video-ati/src/radeon_glamor.h4
-rw-r--r--driver/xf86-video-ati/src/radeon_kms.c27
-rw-r--r--driver/xf86-video-ati/src/radeon_pci_chipset_gen.h35
-rw-r--r--driver/xf86-video-ati/src/radeon_pci_device_match_gen.h35
-rw-r--r--driver/xf86-video-ati/src/radeon_probe.c10
-rw-r--r--driver/xf86-video-ati/src/radeon_probe.h2
-rw-r--r--driver/xf86-video-ati/src/radeon_video.c9
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);