diff options
author | Alex Deucher <alexdeucher@gmail.com> | 2011-05-25 01:00:45 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2011-05-25 01:10:48 -0400 |
commit | ac10f81d94f49f1bd9618680263400d275ddf825 (patch) | |
tree | 2efa9488ac93523560bf988dec8eaedad29f9b44 /drivers/gpu/drm | |
parent | 2ec8a5feaf3000bf4f9744d0caad0d5f12ce1409 (diff) |
drm/radeon/kms/blit: workaround some hw issues on evergreen+
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm')
-rw-r--r-- | drivers/gpu/drm/radeon/evergreen_blit_kms.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/gpu/drm/radeon/evergreen_blit_kms.c b/drivers/gpu/drm/radeon/evergreen_blit_kms.c index ba06a69c6de8..40867290863c 100644 --- a/drivers/gpu/drm/radeon/evergreen_blit_kms.c +++ b/drivers/gpu/drm/radeon/evergreen_blit_kms.c | |||
@@ -199,6 +199,16 @@ static void | |||
199 | set_scissors(struct radeon_device *rdev, int x1, int y1, | 199 | set_scissors(struct radeon_device *rdev, int x1, int y1, |
200 | int x2, int y2) | 200 | int x2, int y2) |
201 | { | 201 | { |
202 | /* workaround some hw bugs */ | ||
203 | if (x2 == 0) | ||
204 | x1 = 1; | ||
205 | if (y2 == 0) | ||
206 | y1 = 1; | ||
207 | if (rdev->family == CHIP_CAYMAN) { | ||
208 | if ((x2 == 1) && (y2 == 1)) | ||
209 | x2 = 2; | ||
210 | } | ||
211 | |||
202 | radeon_ring_write(rdev, PACKET3(PACKET3_SET_CONTEXT_REG, 2)); | 212 | radeon_ring_write(rdev, PACKET3(PACKET3_SET_CONTEXT_REG, 2)); |
203 | radeon_ring_write(rdev, (PA_SC_SCREEN_SCISSOR_TL - PACKET3_SET_CONTEXT_REG_START) >> 2); | 213 | radeon_ring_write(rdev, (PA_SC_SCREEN_SCISSOR_TL - PACKET3_SET_CONTEXT_REG_START) >> 2); |
204 | radeon_ring_write(rdev, (x1 << 0) | (y1 << 16)); | 214 | radeon_ring_write(rdev, (x1 << 0) | (y1 << 16)); |