diff options
Diffstat (limited to 'drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c')
-rw-r--r-- | drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c | 50 |
1 files changed, 41 insertions, 9 deletions
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c b/drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c index 825ebe3d89d5..c4f5114aee7c 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c | |||
@@ -137,9 +137,6 @@ int vmw_invalidate_caches(struct ttm_bo_device *bdev, uint32_t flags) | |||
137 | int vmw_init_mem_type(struct ttm_bo_device *bdev, uint32_t type, | 137 | int vmw_init_mem_type(struct ttm_bo_device *bdev, uint32_t type, |
138 | struct ttm_mem_type_manager *man) | 138 | struct ttm_mem_type_manager *man) |
139 | { | 139 | { |
140 | struct vmw_private *dev_priv = | ||
141 | container_of(bdev, struct vmw_private, bdev); | ||
142 | |||
143 | switch (type) { | 140 | switch (type) { |
144 | case TTM_PL_SYSTEM: | 141 | case TTM_PL_SYSTEM: |
145 | /* System memory */ | 142 | /* System memory */ |
@@ -151,11 +148,7 @@ int vmw_init_mem_type(struct ttm_bo_device *bdev, uint32_t type, | |||
151 | case TTM_PL_VRAM: | 148 | case TTM_PL_VRAM: |
152 | /* "On-card" video ram */ | 149 | /* "On-card" video ram */ |
153 | man->gpu_offset = 0; | 150 | man->gpu_offset = 0; |
154 | man->io_offset = dev_priv->vram_start; | 151 | man->flags = TTM_MEMTYPE_FLAG_FIXED | TTM_MEMTYPE_FLAG_MAPPABLE; |
155 | man->io_size = dev_priv->vram_size; | ||
156 | man->flags = TTM_MEMTYPE_FLAG_FIXED | | ||
157 | TTM_MEMTYPE_FLAG_NEEDS_IOREMAP | TTM_MEMTYPE_FLAG_MAPPABLE; | ||
158 | man->io_addr = NULL; | ||
159 | man->available_caching = TTM_PL_MASK_CACHING; | 152 | man->available_caching = TTM_PL_MASK_CACHING; |
160 | man->default_caching = TTM_PL_FLAG_WC; | 153 | man->default_caching = TTM_PL_FLAG_WC; |
161 | break; | 154 | break; |
@@ -193,6 +186,42 @@ static void vmw_swap_notify(struct ttm_buffer_object *bo) | |||
193 | vmw_dmabuf_gmr_unbind(bo); | 186 | vmw_dmabuf_gmr_unbind(bo); |
194 | } | 187 | } |
195 | 188 | ||
189 | static int vmw_ttm_io_mem_reserve(struct ttm_bo_device *bdev, struct ttm_mem_reg *mem) | ||
190 | { | ||
191 | struct ttm_mem_type_manager *man = &bdev->man[mem->mem_type]; | ||
192 | struct vmw_private *dev_priv = container_of(bdev, struct vmw_private, bdev); | ||
193 | |||
194 | mem->bus.addr = NULL; | ||
195 | mem->bus.is_iomem = false; | ||
196 | mem->bus.offset = 0; | ||
197 | mem->bus.size = mem->num_pages << PAGE_SHIFT; | ||
198 | mem->bus.base = 0; | ||
199 | if (!(man->flags & TTM_MEMTYPE_FLAG_MAPPABLE)) | ||
200 | return -EINVAL; | ||
201 | switch (mem->mem_type) { | ||
202 | case TTM_PL_SYSTEM: | ||
203 | /* System memory */ | ||
204 | return 0; | ||
205 | case TTM_PL_VRAM: | ||
206 | mem->bus.offset = mem->mm_node->start << PAGE_SHIFT; | ||
207 | mem->bus.base = dev_priv->vram_start; | ||
208 | mem->bus.is_iomem = true; | ||
209 | break; | ||
210 | default: | ||
211 | return -EINVAL; | ||
212 | } | ||
213 | return 0; | ||
214 | } | ||
215 | |||
216 | static void vmw_ttm_io_mem_free(struct ttm_bo_device *bdev, struct ttm_mem_reg *mem) | ||
217 | { | ||
218 | } | ||
219 | |||
220 | static int vmw_ttm_fault_reserve_notify(struct ttm_buffer_object *bo) | ||
221 | { | ||
222 | return 0; | ||
223 | } | ||
224 | |||
196 | /** | 225 | /** |
197 | * FIXME: We're using the old vmware polling method to sync. | 226 | * FIXME: We're using the old vmware polling method to sync. |
198 | * Do this with fences instead. | 227 | * Do this with fences instead. |
@@ -248,5 +277,8 @@ struct ttm_bo_driver vmw_bo_driver = { | |||
248 | .sync_obj_unref = vmw_sync_obj_unref, | 277 | .sync_obj_unref = vmw_sync_obj_unref, |
249 | .sync_obj_ref = vmw_sync_obj_ref, | 278 | .sync_obj_ref = vmw_sync_obj_ref, |
250 | .move_notify = vmw_move_notify, | 279 | .move_notify = vmw_move_notify, |
251 | .swap_notify = vmw_swap_notify | 280 | .swap_notify = vmw_swap_notify, |
281 | .fault_reserve_notify = &vmw_ttm_fault_reserve_notify, | ||
282 | .io_mem_reserve = &vmw_ttm_io_mem_reserve, | ||
283 | .io_mem_free = &vmw_ttm_io_mem_free, | ||
252 | }; | 284 | }; |