aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/vmwgfx
diff options
context:
space:
mode:
authorJerome Glisse <jglisse@redhat.com>2010-04-09 08:39:26 -0400
committerDave Airlie <airlied@redhat.com>2010-04-20 00:12:43 -0400
commit96bf8b8778976a6e6a4fe4e6e0421d8ed7892798 (patch)
treea56bc90ca55dbf623bcdcbefa6550cb426d0934e /drivers/gpu/drm/vmwgfx
parentf32f02fd81f3177cce0c16cc7d210fcc9cad953c (diff)
drm/vmwgfx: add support for new TTM fault callback V5
This add the support for the new fault callback, does change anything from driver point of view. Improvement: store the aperture base in a variable so that we don't call a function to get it on each fault. Patch hasn't been tested. V2 don't derefence bo->mem.mm_node as it's not NULL only for VRAM or GTT V3 update after io_mem_reserve/io_mem_free callback balancing V4 callback has to ioremap V5 ioremap is done by TTM Signed-off-by: Jerome Glisse <jglisse@redhat.com> Reviewed-by: Thomas Hellstrom <thellstrom@vmware.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/vmwgfx')
-rw-r--r--drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c44
1 files changed, 41 insertions, 3 deletions
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c b/drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c
index 825ebe3d89d5..f3558968fdff 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c
@@ -153,8 +153,7 @@ int vmw_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
153 man->gpu_offset = 0; 153 man->gpu_offset = 0;
154 man->io_offset = dev_priv->vram_start; 154 man->io_offset = dev_priv->vram_start;
155 man->io_size = dev_priv->vram_size; 155 man->io_size = dev_priv->vram_size;
156 man->flags = TTM_MEMTYPE_FLAG_FIXED | 156 man->flags = TTM_MEMTYPE_FLAG_FIXED | TTM_MEMTYPE_FLAG_MAPPABLE;
157 TTM_MEMTYPE_FLAG_NEEDS_IOREMAP | TTM_MEMTYPE_FLAG_MAPPABLE;
158 man->io_addr = NULL; 157 man->io_addr = NULL;
159 man->available_caching = TTM_PL_MASK_CACHING; 158 man->available_caching = TTM_PL_MASK_CACHING;
160 man->default_caching = TTM_PL_FLAG_WC; 159 man->default_caching = TTM_PL_FLAG_WC;
@@ -193,6 +192,42 @@ static void vmw_swap_notify(struct ttm_buffer_object *bo)
193 vmw_dmabuf_gmr_unbind(bo); 192 vmw_dmabuf_gmr_unbind(bo);
194} 193}
195 194
195static int vmw_ttm_io_mem_reserve(struct ttm_bo_device *bdev, struct ttm_mem_reg *mem)
196{
197 struct ttm_mem_type_manager *man = &bdev->man[mem->mem_type];
198 struct vmw_private *dev_priv = container_of(bdev, struct vmw_private, bdev);
199
200 mem->bus.addr = NULL;
201 mem->bus.is_iomem = false;
202 mem->bus.offset = 0;
203 mem->bus.size = mem->num_pages << PAGE_SHIFT;
204 mem->bus.base = 0;
205 if (!(man->flags & TTM_MEMTYPE_FLAG_MAPPABLE))
206 return -EINVAL;
207 switch (mem->mem_type) {
208 case TTM_PL_SYSTEM:
209 /* System memory */
210 return 0;
211 case TTM_PL_VRAM:
212 mem->bus.offset = mem->mm_node->start << PAGE_SHIFT;
213 mem->bus.base = dev_priv->vram_start;
214 mem->bus.is_iomem = true;
215 break;
216 default:
217 return -EINVAL;
218 }
219 return 0;
220}
221
222static void vmw_ttm_io_mem_free(struct ttm_bo_device *bdev, struct ttm_mem_reg *mem)
223{
224}
225
226static int vmw_ttm_fault_reserve_notify(struct ttm_buffer_object *bo)
227{
228 return 0;
229}
230
196/** 231/**
197 * FIXME: We're using the old vmware polling method to sync. 232 * FIXME: We're using the old vmware polling method to sync.
198 * Do this with fences instead. 233 * Do this with fences instead.
@@ -248,5 +283,8 @@ struct ttm_bo_driver vmw_bo_driver = {
248 .sync_obj_unref = vmw_sync_obj_unref, 283 .sync_obj_unref = vmw_sync_obj_unref,
249 .sync_obj_ref = vmw_sync_obj_ref, 284 .sync_obj_ref = vmw_sync_obj_ref,
250 .move_notify = vmw_move_notify, 285 .move_notify = vmw_move_notify,
251 .swap_notify = vmw_swap_notify 286 .swap_notify = vmw_swap_notify,
287 .fault_reserve_notify = &vmw_ttm_fault_reserve_notify,
288 .io_mem_reserve = &vmw_ttm_io_mem_reserve,
289 .io_mem_free = &vmw_ttm_io_mem_free,
252}; 290};