diff options
| author | Jerome Glisse <jglisse@redhat.com> | 2010-04-09 08:39:26 -0400 |
|---|---|---|
| committer | Dave Airlie <airlied@redhat.com> | 2010-04-20 00:12:43 -0400 |
| commit | 96bf8b8778976a6e6a4fe4e6e0421d8ed7892798 (patch) | |
| tree | a56bc90ca55dbf623bcdcbefa6550cb426d0934e /drivers/gpu/drm/vmwgfx | |
| parent | f32f02fd81f3177cce0c16cc7d210fcc9cad953c (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.c | 44 |
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 | ||
| 195 | static 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 | |||
| 222 | static void vmw_ttm_io_mem_free(struct ttm_bo_device *bdev, struct ttm_mem_reg *mem) | ||
| 223 | { | ||
| 224 | } | ||
| 225 | |||
| 226 | static 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 | }; |
