summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Deucher <alexdeucher@gmail.com>2009-02-25 12:54:35 -0500
committerAlex Deucher <alexdeucher@gmail.com>2009-02-25 12:54:35 -0500
commitce6bde7ab9e5e69b3bba69d394db3390b7264fd1 (patch)
treed3b3feef3f9e148fac26c514cbfc814ffe5a1160
parentb37a96750ae80ea1f289cc1dd52477523f835af2 (diff)
RS600: cleanup page table properly
-rw-r--r--shared-core/r600_cp.c2
-rw-r--r--shared-core/radeon_cp.c9
-rw-r--r--shared-core/radeon_drv.h1
3 files changed, 9 insertions, 3 deletions
diff --git a/shared-core/r600_cp.c b/shared-core/r600_cp.c
index 165bd2de..5f675890 100644
--- a/shared-core/r600_cp.c
+++ b/shared-core/r600_cp.c
@@ -427,7 +427,7 @@ static int r600_do_wait_for_idle(drm_radeon_private_t * dev_priv)
return -EBUSY;
}
-static void r600_page_table_cleanup(struct drm_device *dev, struct drm_ati_pcigart_info *gart_info)
+void r600_page_table_cleanup(struct drm_device *dev, struct drm_ati_pcigart_info *gart_info)
{
#ifdef __linux__
struct drm_sg_mem *entry = dev->sg;
diff --git a/shared-core/radeon_cp.c b/shared-core/radeon_cp.c
index 76112bd9..381cb4d7 100644
--- a/shared-core/radeon_cp.c
+++ b/shared-core/radeon_cp.c
@@ -1467,8 +1467,13 @@ static int radeon_do_cleanup_cp(struct drm_device * dev)
if (dev_priv->gart_info.bus_addr) {
/* Turn off PCI GART */
radeon_set_pcigart(dev_priv, 0);
- if (!drm_ati_pcigart_cleanup(dev, &dev_priv->gart_info))
- DRM_ERROR("failed to cleanup PCI GART!\n");
+
+ if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS600)
+ r600_page_table_cleanup(dev, &dev_priv->gart_info);
+ else {
+ if (!drm_ati_pcigart_cleanup(dev, &dev_priv->gart_info))
+ DRM_ERROR("failed to cleanup PCI GART!\n");
+ }
}
if (dev_priv->gart_info.gart_table_location == DRM_ATI_GART_FB)
diff --git a/shared-core/radeon_drv.h b/shared-core/radeon_drv.h
index 300cb063..2e3e4cc6 100644
--- a/shared-core/radeon_drv.h
+++ b/shared-core/radeon_drv.h
@@ -459,6 +459,7 @@ int r600_engine_reset(struct drm_device * dev);
void r600_do_cp_reset(drm_radeon_private_t * dev_priv);
int r600_do_cleanup_cp(struct drm_device * dev);
int r600_page_table_init(struct drm_device *dev);
+void r600_page_table_cleanup(struct drm_device *dev, struct drm_ati_pcigart_info *gart_info);
/* Flags for stats.boxes
*/