Re: [PATCH 2/2] drm/radeon: Restrict offset for legacy display engine.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



2012/3/14 Michel Dänzer <michel@xxxxxxxxxxx>:
> From: Michel Dänzer <michel.daenzer@xxxxxxx>
>
> 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@xxxxxxx>

Reviewed-by: Alex Deucher <alexander.deucher@xxxxxxx>

This should probably go to stable as well.  I think it may also fix this bug:
https://bugzilla.kernel.org/show_bug.cgi?id=16515

Alex

> ---
>  drivers/gpu/drm/radeon/radeon_display.c     |    4 +++-
>  drivers/gpu/drm/radeon/radeon_fb.c          |    5 ++++-
>  drivers/gpu/drm/radeon/radeon_legacy_crtc.c |    4 +++-
>  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 d3ffc18..63386a4 100644
> --- a/drivers/gpu/drm/radeon/radeon_display.c
> +++ b/drivers/gpu/drm/radeon/radeon_display.c
> @@ -393,7 +393,9 @@ static int radeon_crtc_page_flip(struct drm_crtc *crtc,
>                DRM_ERROR("failed to reserve new rbo buffer before flip\n");
>                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)) {
>                radeon_bo_unreserve(rbo);
>                r = -EINVAL;
> diff --git a/drivers/gpu/drm/radeon/radeon_fb.c b/drivers/gpu/drm/radeon/radeon_fb.c
> index cf2bf35..93bf920 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,
>        ret = radeon_bo_reserve(rbo, false);
>        if (unlikely(ret != 0))
>                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) {
>                radeon_bo_unreserve(rbo);
>                goto out_unref;
> diff --git a/drivers/gpu/drm/radeon/radeon_legacy_crtc.c b/drivers/gpu/drm/radeon/radeon_legacy_crtc.c
> index 25a19c4..210317c 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,
>        r = radeon_bo_reserve(rbo, false);
>        if (unlikely(r != 0))
>                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)) {
>                radeon_bo_unreserve(rbo);
>                return -EINVAL;
> --
> 1.7.9.1
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@xxxxxxxxxxxxxxxxxxxxx
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
_______________________________________________
dri-devel mailing list
dri-devel@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/dri-devel



[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux