diff options
author | Alex Deucher <alexdeucher@gmail.com> | 2009-02-25 12:54:35 -0500 |
---|---|---|
committer | Alex Deucher <alexdeucher@gmail.com> | 2009-02-25 12:54:35 -0500 |
commit | ce6bde7ab9e5e69b3bba69d394db3390b7264fd1 (patch) | |
tree | d3b3feef3f9e148fac26c514cbfc814ffe5a1160 | |
parent | b37a96750ae80ea1f289cc1dd52477523f835af2 (diff) |
RS600: cleanup page table properly
-rw-r--r-- | shared-core/r600_cp.c | 2 | ||||
-rw-r--r-- | shared-core/radeon_cp.c | 9 | ||||
-rw-r--r-- | shared-core/radeon_drv.h | 1 |
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 */ |