aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Airlie <airlied@linux.ie>2007-11-04 19:45:27 -0500
committerDave Airlie <airlied@linux.ie>2007-11-04 19:49:04 -0500
commit7fc86860cf73e060ab8ed9763010dfe5b5389b1c (patch)
treeccff8d34a2307779d96320158c607ddbd56a2647
parent5da0c7aad6271dd29526e3b49cbeb3bab9e8e491 (diff)
radeon: set the address to access the GART table on the CPU side correctly
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>
-rw-r--r--drivers/char/drm/radeon_cp.c5
-rw-r--r--drivers/char/drm/radeon_drv.h1
2 files changed, 4 insertions, 2 deletions
diff --git a/drivers/char/drm/radeon_cp.c b/drivers/char/drm/radeon_cp.c
index 335423c5c186..24fca8ec1379 100644
--- 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_device * dev, drm_radeon_init_t * init)
1679 dev_priv->gart_info.bus_addr = 1679 dev_priv->gart_info.bus_addr =
1680 dev_priv->pcigart_offset + dev_priv->fb_location; 1680 dev_priv->pcigart_offset + dev_priv->fb_location;
1681 dev_priv->gart_info.mapping.offset = 1681 dev_priv->gart_info.mapping.offset =
1682 dev_priv->gart_info.bus_addr; 1682 dev_priv->pcigart_offset + dev_priv->fb_aper_offset;
1683 dev_priv->gart_info.mapping.size = 1683 dev_priv->gart_info.mapping.size =
1684 dev_priv->gart_info.table_size; 1684 dev_priv->gart_info.table_size;
1685 1685
@@ -2275,7 +2275,8 @@ int radeon_driver_firstopen(struct drm_device *dev)
2275 if (ret != 0) 2275 if (ret != 0)
2276 return ret; 2276 return ret;
2277 2277
2278 ret = drm_addmap(dev, drm_get_resource_start(dev, 0), 2278 dev_priv->fb_aper_offset = drm_get_resource_start(dev, 0);
2279 ret = drm_addmap(dev, dev_priv->fb_aper_offset,
2279 drm_get_resource_len(dev, 0), _DRM_FRAME_BUFFER, 2280 drm_get_resource_len(dev, 0), _DRM_FRAME_BUFFER,
2280 _DRM_WRITE_COMBINING, &map); 2281 _DRM_WRITE_COMBINING, &map);
2281 if (ret != 0) 2282 if (ret != 0)
diff --git a/drivers/char/drm/radeon_drv.h b/drivers/char/drm/radeon_drv.h
index e4077bc212b3..bfbb60a9298c 100644
--- a/drivers/char/drm/radeon_drv.h
+++ b/drivers/char/drm/radeon_drv.h
@@ -293,6 +293,7 @@ typedef struct drm_radeon_private {
293 293
294 /* starting from here on, data is preserved accross an open */ 294 /* starting from here on, data is preserved accross an open */
295 uint32_t flags; /* see radeon_chip_flags */ 295 uint32_t flags; /* see radeon_chip_flags */
296 unsigned long fb_aper_offset;
296} drm_radeon_private_t; 297} drm_radeon_private_t;
297 298
298typedef struct drm_radeon_buf_priv { 299typedef struct drm_radeon_buf_priv {