aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorMichel Dänzer <michel.daenzer@amd.com>2012-03-14 12:12:42 -0400
committerDave Airlie <airlied@redhat.com>2012-03-20 04:47:46 -0400
commit0349af70da5e590793986a0e03dbf2a435f75103 (patch)
treec4104646049fcf3862397cac1b51284bbd48e1b9 /drivers
parentc4353016dac10133fa5d8535af83f0c4845a2915 (diff)
drm/radeon: Restrict offset for legacy display engine.
The hardware only takes 27 bits for the offset, so larger offsets are truncated, and the display shows random bits other than the intended ones. Signed-off-by: Michel Dänzer <michel.daenzer@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/drm/radeon/radeon_display.c4
-rw-r--r--drivers/gpu/drm/radeon/radeon_fb.c5
-rw-r--r--drivers/gpu/drm/radeon/radeon_legacy_crtc.c4
3 files changed, 10 insertions, 3 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
index b25bb2a55814..1ebcef25b915 100644
--- a/drivers/gpu/drm/radeon/radeon_display.c
+++ b/drivers/gpu/drm/radeon/radeon_display.c
@@ -402,7 +402,9 @@ static int radeon_crtc_page_flip(struct drm_crtc *crtc,
402 DRM_ERROR("failed to reserve new rbo buffer before flip\n"); 402 DRM_ERROR("failed to reserve new rbo buffer before flip\n");
403 goto pflip_cleanup; 403 goto pflip_cleanup;
404 } 404 }
405 r = radeon_bo_pin(rbo, RADEON_GEM_DOMAIN_VRAM, &base); 405 /* Only 27 bit offset for legacy CRTC */
406 r = radeon_bo_pin_restricted(rbo, RADEON_GEM_DOMAIN_VRAM,
407 ASIC_IS_AVIVO(rdev) ? 0 : 1 << 27, &base);
406 if (unlikely(r != 0)) { 408 if (unlikely(r != 0)) {
407 radeon_bo_unreserve(rbo); 409 radeon_bo_unreserve(rbo);
408 r = -EINVAL; 410 r = -EINVAL;
diff --git a/drivers/gpu/drm/radeon/radeon_fb.c b/drivers/gpu/drm/radeon/radeon_fb.c
index 60b97ab1d19e..5906914a78bc 100644
--- a/drivers/gpu/drm/radeon/radeon_fb.c
+++ b/drivers/gpu/drm/radeon/radeon_fb.c
@@ -164,7 +164,10 @@ static int radeonfb_create_pinned_object(struct radeon_fbdev *rfbdev,
164 ret = radeon_bo_reserve(rbo, false); 164 ret = radeon_bo_reserve(rbo, false);
165 if (unlikely(ret != 0)) 165 if (unlikely(ret != 0))
166 goto out_unref; 166 goto out_unref;
167 ret = radeon_bo_pin(rbo, RADEON_GEM_DOMAIN_VRAM, NULL); 167 /* Only 27 bit offset for legacy CRTC */
168 ret = radeon_bo_pin_restricted(rbo, RADEON_GEM_DOMAIN_VRAM,
169 ASIC_IS_AVIVO(rdev) ? 0 : 1 << 27,
170 NULL);
168 if (ret) { 171 if (ret) {
169 radeon_bo_unreserve(rbo); 172 radeon_bo_unreserve(rbo);
170 goto out_unref; 173 goto out_unref;
diff --git a/drivers/gpu/drm/radeon/radeon_legacy_crtc.c b/drivers/gpu/drm/radeon/radeon_legacy_crtc.c
index 25a19c483075..210317c7045e 100644
--- a/drivers/gpu/drm/radeon/radeon_legacy_crtc.c
+++ b/drivers/gpu/drm/radeon/radeon_legacy_crtc.c
@@ -419,7 +419,9 @@ int radeon_crtc_do_set_base(struct drm_crtc *crtc,
419 r = radeon_bo_reserve(rbo, false); 419 r = radeon_bo_reserve(rbo, false);
420 if (unlikely(r != 0)) 420 if (unlikely(r != 0))
421 return r; 421 return r;
422 r = radeon_bo_pin(rbo, RADEON_GEM_DOMAIN_VRAM, &base); 422 /* Only 27 bit offset for legacy CRTC */
423 r = radeon_bo_pin_restricted(rbo, RADEON_GEM_DOMAIN_VRAM, 1 << 27,
424 &base);
423 if (unlikely(r != 0)) { 425 if (unlikely(r != 0)) {
424 radeon_bo_unreserve(rbo); 426 radeon_bo_unreserve(rbo);
425 return -EINVAL; 427 return -EINVAL;