summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm
diff options
context:
space:
mode:
authorAlex Deucher <alexdeucher@gmail.com>2009-09-11 12:02:03 -0400
committerDave Airlie <airlied@linux.ie>2009-09-12 08:05:05 +1000
commit1be340563cf40210487afe332c0d7c9a523dba5f (patch)
treee9fc1df88b51a70e191cc5bd632a2abe560b1fbf /drivers/gpu/drm
parent7747b713049e63aa64bcac679535ddfff92b312d (diff)
downloadlinux-1be340563cf40210487afe332c0d7c9a523dba5f.tar.bz2
drm/radeon/kms/r600: fix blit dword count for non r6xx
rv6xx emits two extra dwords in the render target setup. Signed-off-by: Alex Deucher <alexdeucher@gmail.com> Signed-off-by: Dave Airlie <airlied@linux.ie>
Diffstat (limited to 'drivers/gpu/drm')
-rw-r--r--drivers/gpu/drm/radeon/r600_blit_kms.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/gpu/drm/radeon/r600_blit_kms.c b/drivers/gpu/drm/radeon/r600_blit_kms.c
index bbb0d615ac1c..1ebfd5a6dfec 100644
--- a/drivers/gpu/drm/radeon/r600_blit_kms.c
+++ b/drivers/gpu/drm/radeon/r600_blit_kms.c
@@ -550,6 +550,12 @@ int r600_blit_prepare_copy(struct radeon_device *rdev, int size_bytes)
int r;
int ring_size;
int max_size;
+ /* loops of emits 64 + fence emit possible */
+ int dwords_per_loop = 76;
+
+ /* set_render_target emits 2 extra dwords on rv6xx */
+ if (rdev->family > CHIP_R600 && rdev->family < CHIP_RV770)
+ dwords_per_loop += 2;
/* 8 bpp vs 32 bpp for xfer unit */
if (size_bytes & 3)
@@ -560,8 +566,7 @@ int r600_blit_prepare_copy(struct radeon_device *rdev, int size_bytes)
r = r600_vb_ib_get(rdev);
WARN_ON(r);
- /* loops of emits 64 + fence emit possible */
- ring_size = ((size_bytes + max_size) / max_size) * 78;
+ ring_size = ((size_bytes + max_size) / max_size) * dwords_per_loop;
/* set default + shaders */
ring_size += 40; /* shaders + def state */
ring_size += 3; /* fence emit for VB IB */