radeon: add userspace mm enable switch

This commit is contained in:
Dave Airlie 2008-08-04 14:59:17 +10:00
parent 29649ddede
commit aa8e15f8b5
4 changed files with 12 additions and 4 deletions

View file

@ -1364,8 +1364,7 @@ static int radeon_do_cleanup_cp(struct drm_device * dev)
if (dev_priv->gart_info.bus_addr) { if (dev_priv->gart_info.bus_addr) {
/* Turn off PCI GART */ /* Turn off PCI GART */
radeon_set_pcigart(dev_priv, 0); radeon_set_pcigart(dev_priv, 0);
if (!drm_ati_pcigart_cleanup(dev, &dev_priv->gart_info)) 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) if (dev_priv->gart_info.gart_table_location == DRM_ATI_GART_FB)
@ -1373,6 +1372,7 @@ static int radeon_do_cleanup_cp(struct drm_device * dev)
if (dev_priv->pcigart_offset_set == 1) { if (dev_priv->pcigart_offset_set == 1) {
drm_core_ioremapfree(&dev_priv->gart_info.mapping, dev); drm_core_ioremapfree(&dev_priv->gart_info.mapping, dev);
dev_priv->gart_info.addr = NULL; dev_priv->gart_info.addr = NULL;
dev_priv->pcigart_offset_set = 0;
} }
} }
} }
@ -1563,8 +1563,10 @@ void radeon_do_release(struct drm_device * dev)
radeon_mem_takedown(&(dev_priv->gart_heap)); radeon_mem_takedown(&(dev_priv->gart_heap));
radeon_mem_takedown(&(dev_priv->fb_heap)); radeon_mem_takedown(&(dev_priv->fb_heap));
if (dev_priv->user_mm_enable) {
radeon_gem_mm_fini(dev); radeon_gem_mm_fini(dev);
dev_priv->user_mm_enable = false;
}
/* deallocate kernel resources */ /* deallocate kernel resources */
radeon_do_cleanup_cp(dev); radeon_do_cleanup_cp(dev);

View file

@ -768,6 +768,7 @@ typedef struct drm_radeon_setparam {
#define RADEON_SETPARAM_NEW_MEMMAP 4 /* Use new memory map */ #define RADEON_SETPARAM_NEW_MEMMAP 4 /* Use new memory map */
#define RADEON_SETPARAM_PCIGART_TABLE_SIZE 5 /* PCI GART Table Size */ #define RADEON_SETPARAM_PCIGART_TABLE_SIZE 5 /* PCI GART Table Size */
#define RADEON_SETPARAM_VBLANK_CRTC 6 /* VBLANK CRTC */ #define RADEON_SETPARAM_VBLANK_CRTC 6 /* VBLANK CRTC */
#define RADEON_SETPARAM_MM_INIT 7 /* Initialise the mm */
/* 1.14: Clients can allocate/free a surface /* 1.14: Clients can allocate/free a surface
*/ */
typedef struct drm_radeon_surface_alloc { typedef struct drm_radeon_surface_alloc {

View file

@ -314,6 +314,8 @@ typedef struct drm_radeon_private {
int new_memmap; int new_memmap;
bool user_mm_enable;
int gart_size; int gart_size;
u32 gart_vm_start; u32 gart_vm_start;
unsigned long gart_buffers_offset; unsigned long gart_buffers_offset;

View file

@ -3182,6 +3182,9 @@ static int radeon_cp_setparam(struct drm_device *dev, void *data, struct drm_fil
case RADEON_SETPARAM_VBLANK_CRTC: case RADEON_SETPARAM_VBLANK_CRTC:
return radeon_vblank_crtc_set(dev, sp->value); return radeon_vblank_crtc_set(dev, sp->value);
break; break;
case RADEON_SETPARAM_MM_INIT:
dev_priv->user_mm_enable = true;
return radeon_gem_mm_init(dev);
default: default:
DRM_DEBUG("Invalid parameter %d\n", sp->param); DRM_DEBUG("Invalid parameter %d\n", sp->param);
return -EINVAL; return -EINVAL;