| 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 { |