RS600: cleanup page table properly

This commit is contained in:
Alex Deucher 2009-02-25 12:54:35 -05:00
parent b37a96750a
commit ce6bde7ab9
3 changed files with 9 additions and 3 deletions

View file

@ -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;

View file

@ -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)

View file

@ -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
*/