Commit 0349af70 authored by Michel Dänzer's avatar Michel Dänzer Committed by Dave Airlie

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: default avatarMichel Dänzer <michel.daenzer@amd.com>
Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent c4353016
...@@ -402,7 +402,9 @@ static int radeon_crtc_page_flip(struct drm_crtc *crtc, ...@@ -402,7 +402,9 @@ static int radeon_crtc_page_flip(struct drm_crtc *crtc,
DRM_ERROR("failed to reserve new rbo buffer before flip\n"); DRM_ERROR("failed to reserve new rbo buffer before flip\n");
goto pflip_cleanup; goto pflip_cleanup;
} }
r = radeon_bo_pin(rbo, RADEON_GEM_DOMAIN_VRAM, &base); /* Only 27 bit offset for legacy CRTC */
r = radeon_bo_pin_restricted(rbo, RADEON_GEM_DOMAIN_VRAM,
ASIC_IS_AVIVO(rdev) ? 0 : 1 << 27, &base);
if (unlikely(r != 0)) { if (unlikely(r != 0)) {
radeon_bo_unreserve(rbo); radeon_bo_unreserve(rbo);
r = -EINVAL; r = -EINVAL;
......
...@@ -164,7 +164,10 @@ static int radeonfb_create_pinned_object(struct radeon_fbdev *rfbdev, ...@@ -164,7 +164,10 @@ static int radeonfb_create_pinned_object(struct radeon_fbdev *rfbdev,
ret = radeon_bo_reserve(rbo, false); ret = radeon_bo_reserve(rbo, false);
if (unlikely(ret != 0)) if (unlikely(ret != 0))
goto out_unref; goto out_unref;
ret = radeon_bo_pin(rbo, RADEON_GEM_DOMAIN_VRAM, NULL); /* Only 27 bit offset for legacy CRTC */
ret = radeon_bo_pin_restricted(rbo, RADEON_GEM_DOMAIN_VRAM,
ASIC_IS_AVIVO(rdev) ? 0 : 1 << 27,
NULL);
if (ret) { if (ret) {
radeon_bo_unreserve(rbo); radeon_bo_unreserve(rbo);
goto out_unref; goto out_unref;
......
...@@ -419,7 +419,9 @@ int radeon_crtc_do_set_base(struct drm_crtc *crtc, ...@@ -419,7 +419,9 @@ int radeon_crtc_do_set_base(struct drm_crtc *crtc,
r = radeon_bo_reserve(rbo, false); r = radeon_bo_reserve(rbo, false);
if (unlikely(r != 0)) if (unlikely(r != 0))
return r; return r;
r = radeon_bo_pin(rbo, RADEON_GEM_DOMAIN_VRAM, &base); /* Only 27 bit offset for legacy CRTC */
r = radeon_bo_pin_restricted(rbo, RADEON_GEM_DOMAIN_VRAM, 1 << 27,
&base);
if (unlikely(r != 0)) { if (unlikely(r != 0)) {
radeon_bo_unreserve(rbo); radeon_bo_unreserve(rbo);
return -EINVAL; return -EINVAL;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment