Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/vapier...
[sfrench/cifs-2.6.git] / drivers / gpu / drm / vmwgfx / vmwgfx_buffer.c
index 825ebe3d89d573c384dc3181e56b988e7bfeea55..c4f5114aee7c8bf956867dd45da9ddb1f4236b00 100644 (file)
@@ -137,9 +137,6 @@ int vmw_invalidate_caches(struct ttm_bo_device *bdev, uint32_t flags)
 int vmw_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
                      struct ttm_mem_type_manager *man)
 {
-       struct vmw_private *dev_priv =
-           container_of(bdev, struct vmw_private, bdev);
-
        switch (type) {
        case TTM_PL_SYSTEM:
                /* System memory */
@@ -151,11 +148,7 @@ int vmw_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
        case TTM_PL_VRAM:
                /* "On-card" video ram */
                man->gpu_offset = 0;
-               man->io_offset = dev_priv->vram_start;
-               man->io_size = dev_priv->vram_size;
-               man->flags = TTM_MEMTYPE_FLAG_FIXED |
-                   TTM_MEMTYPE_FLAG_NEEDS_IOREMAP | TTM_MEMTYPE_FLAG_MAPPABLE;
-               man->io_addr = NULL;
+               man->flags = TTM_MEMTYPE_FLAG_FIXED | TTM_MEMTYPE_FLAG_MAPPABLE;
                man->available_caching = TTM_PL_MASK_CACHING;
                man->default_caching = TTM_PL_FLAG_WC;
                break;
@@ -193,6 +186,42 @@ static void vmw_swap_notify(struct ttm_buffer_object *bo)
        vmw_dmabuf_gmr_unbind(bo);
 }
 
+static int vmw_ttm_io_mem_reserve(struct ttm_bo_device *bdev, struct ttm_mem_reg *mem)
+{
+       struct ttm_mem_type_manager *man = &bdev->man[mem->mem_type];
+       struct vmw_private *dev_priv = container_of(bdev, struct vmw_private, bdev);
+
+       mem->bus.addr = NULL;
+       mem->bus.is_iomem = false;
+       mem->bus.offset = 0;
+       mem->bus.size = mem->num_pages << PAGE_SHIFT;
+       mem->bus.base = 0;
+       if (!(man->flags & TTM_MEMTYPE_FLAG_MAPPABLE))
+               return -EINVAL;
+       switch (mem->mem_type) {
+       case TTM_PL_SYSTEM:
+               /* System memory */
+               return 0;
+       case TTM_PL_VRAM:
+               mem->bus.offset = mem->mm_node->start << PAGE_SHIFT;
+               mem->bus.base = dev_priv->vram_start;
+               mem->bus.is_iomem = true;
+               break;
+       default:
+               return -EINVAL;
+       }
+       return 0;
+}
+
+static void vmw_ttm_io_mem_free(struct ttm_bo_device *bdev, struct ttm_mem_reg *mem)
+{
+}
+
+static int vmw_ttm_fault_reserve_notify(struct ttm_buffer_object *bo)
+{
+       return 0;
+}
+
 /**
  * FIXME: We're using the old vmware polling method to sync.
  * Do this with fences instead.
@@ -248,5 +277,8 @@ struct ttm_bo_driver vmw_bo_driver = {
        .sync_obj_unref = vmw_sync_obj_unref,
        .sync_obj_ref = vmw_sync_obj_ref,
        .move_notify = vmw_move_notify,
-       .swap_notify = vmw_swap_notify
+       .swap_notify = vmw_swap_notify,
+       .fault_reserve_notify = &vmw_ttm_fault_reserve_notify,
+       .io_mem_reserve = &vmw_ttm_io_mem_reserve,
+       .io_mem_free = &vmw_ttm_io_mem_free,
 };