diff options
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 | }; |