blob: 63e80a8ee2319bc3fe0fac3eb831a34347a93b4f [file] [log] [blame]
From stable-bounces@linux.kernel.org Mon Nov 5 16:33:47 2007
From: Dave Airlie <airlied@linux.ie>
Date: Tue, 6 Nov 2007 00:33:10 +0000 (GMT)
Subject: radeon: set the address to access the GART table on the CPU side correctly
To: stable@kernel.org
Message-ID: <alpine.DEB.0.82.0711060031420.13794@skynet.skynet.ie>
From: Dave Airlie <airlied@linux.ie>
Upstream as 7fc86860cf73e060ab8ed9763010dfe5b5389b1c
This code relied on the CPU and GPU address for the aperture being the same,
On some r5xx hardware I was playing with I noticed that this isn't always true.
This fixes issues seen on some r400 cards. (bugs.freedesktop.org 9957)
Signed-off-by: Dave Airlie <airlied@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/char/drm/radeon_cp.c | 5 +++--
drivers/char/drm/radeon_drv.h | 1 +
2 files changed, 4 insertions(+), 2 deletions(-)
--- a/drivers/char/drm/radeon_cp.c
+++ b/drivers/char/drm/radeon_cp.c
@@ -1679,7 +1679,7 @@ static int radeon_do_init_cp(struct drm_
dev_priv->gart_info.bus_addr =
dev_priv->pcigart_offset + dev_priv->fb_location;
dev_priv->gart_info.mapping.offset =
- dev_priv->gart_info.bus_addr;
+ dev_priv->pcigart_offset + dev_priv->fb_aper_offset;
dev_priv->gart_info.mapping.size =
dev_priv->gart_info.table_size;
@@ -2291,7 +2291,8 @@ int radeon_driver_firstopen(struct drm_d
if (ret != 0)
return ret;
- ret = drm_addmap(dev, drm_get_resource_start(dev, 0),
+ dev_priv->fb_aper_offset = drm_get_resource_start(dev, 0);
+ ret = drm_addmap(dev, dev_priv->fb_aper_offset,
drm_get_resource_len(dev, 0), _DRM_FRAME_BUFFER,
_DRM_WRITE_COMBINING, &map);
if (ret != 0)
--- a/drivers/char/drm/radeon_drv.h
+++ b/drivers/char/drm/radeon_drv.h
@@ -293,6 +293,7 @@ typedef struct drm_radeon_private {
/* starting from here on, data is preserved accross an open */
uint32_t flags; /* see radeon_chip_flags */
+ unsigned long fb_aper_offset;
} drm_radeon_private_t;
typedef struct drm_radeon_buf_priv {