]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
radeon: set the address to access the GART table on the CPU side correctly
authorDave Airlie <airlied@linux.ie>
Tue, 6 Nov 2007 00:33:10 +0000 (00:33 +0000)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 16 Nov 2007 17:30:24 +0000 (09:30 -0800)
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
drivers/char/drm/radeon_drv.h

index af5790f8fd53a2631478c77d0aa433de65c66995..2e9fdb9547dd3b42d8a16b6fba2be1dd8bab0e7c 100644 (file)
@@ -1679,7 +1679,7 @@ static int radeon_do_init_cp(struct drm_device * dev, drm_radeon_init_t * init)
                        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_device *dev)
        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)
index 3b3d9357201ca18482265c49f2d7fb3b4af69113..41e91ea392326d34e7b8c703767f5638e5b3b5c7 100644 (file)
@@ -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 {