diff options
author | Dave Airlie <airlied@redhat.com> | 2010-04-20 00:15:09 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2010-04-20 00:15:09 -0400 |
commit | 7547a917fa5f3b2406f52c7dcf7ec9ad3c8532eb (patch) | |
tree | 59b0d0e9b6c251c4df5799b93395454592004d57 /drivers/gpu/drm/vmwgfx | |
parent | a8089e849a32c5b6bfd6c88dbd09c0ea4a779b71 (diff) | |
parent | 6b8b1786a8c29ce6e32298b93ac8d4a18a2b11c4 (diff) |
Merge branch 'drm-ttm-unmappable' into drm-core-next
* drm-ttm-unmappable:
drm/radeon/kms: enable use of unmappable VRAM V2
drm/ttm: remove io_ field from TTM V6
drm/vmwgfx: add support for new TTM fault callback V5
drm/nouveau/kms: add support for new TTM fault callback V5
drm/radeon/kms: add support for new fault callback V7
drm/ttm: ttm_fault callback to allow driver to handle bo placement V6
drm/ttm: split no_wait argument in 2 GPU or reserve wait
Conflicts:
drivers/gpu/drm/nouveau/nouveau_bo.c
Diffstat (limited to 'drivers/gpu/drm/vmwgfx')
-rw-r--r-- | drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c | 50 | ||||
-rw-r--r-- | drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/vmwgfx/vmwgfx_fb.c | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/vmwgfx/vmwgfx_overlay.c | 2 |
4 files changed, 46 insertions, 14 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 | }; |
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c b/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c index 0897359b3e4e..dbd36b8910cf 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c | |||
@@ -570,7 +570,7 @@ static int vmw_validate_single_buffer(struct vmw_private *dev_priv, | |||
570 | * Put BO in VRAM, only if there is space. | 570 | * Put BO in VRAM, only if there is space. |
571 | */ | 571 | */ |
572 | 572 | ||
573 | ret = ttm_bo_validate(bo, &vmw_vram_sys_placement, true, false); | 573 | ret = ttm_bo_validate(bo, &vmw_vram_sys_placement, true, false, false); |
574 | if (unlikely(ret == -ERESTARTSYS)) | 574 | if (unlikely(ret == -ERESTARTSYS)) |
575 | return ret; | 575 | return ret; |
576 | 576 | ||
@@ -590,7 +590,7 @@ static int vmw_validate_single_buffer(struct vmw_private *dev_priv, | |||
590 | * previous contents. | 590 | * previous contents. |
591 | */ | 591 | */ |
592 | 592 | ||
593 | ret = ttm_bo_validate(bo, &vmw_vram_placement, true, false); | 593 | ret = ttm_bo_validate(bo, &vmw_vram_placement, true, false, false); |
594 | return ret; | 594 | return ret; |
595 | } | 595 | } |
596 | 596 | ||
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c b/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c index a93367041cdc..80125ffc4e28 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c | |||
@@ -628,7 +628,7 @@ int vmw_dmabuf_from_vram(struct vmw_private *vmw_priv, | |||
628 | if (unlikely(ret != 0)) | 628 | if (unlikely(ret != 0)) |
629 | return ret; | 629 | return ret; |
630 | 630 | ||
631 | ret = ttm_bo_validate(bo, &vmw_sys_placement, false, false); | 631 | ret = ttm_bo_validate(bo, &vmw_sys_placement, false, false, false); |
632 | ttm_bo_unreserve(bo); | 632 | ttm_bo_unreserve(bo); |
633 | 633 | ||
634 | return ret; | 634 | return ret; |
@@ -652,7 +652,7 @@ int vmw_dmabuf_to_start_of_vram(struct vmw_private *vmw_priv, | |||
652 | if (unlikely(ret != 0)) | 652 | if (unlikely(ret != 0)) |
653 | goto err_unlock; | 653 | goto err_unlock; |
654 | 654 | ||
655 | ret = ttm_bo_validate(bo, &ne_placement, false, false); | 655 | ret = ttm_bo_validate(bo, &ne_placement, false, false, false); |
656 | ttm_bo_unreserve(bo); | 656 | ttm_bo_unreserve(bo); |
657 | err_unlock: | 657 | err_unlock: |
658 | ttm_write_unlock(&vmw_priv->active_master->lock); | 658 | ttm_write_unlock(&vmw_priv->active_master->lock); |
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_overlay.c b/drivers/gpu/drm/vmwgfx/vmwgfx_overlay.c index 5b6eabeb7f51..ad566c85b075 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_overlay.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_overlay.c | |||
@@ -118,7 +118,7 @@ static int vmw_dmabuf_pin_in_vram(struct vmw_private *dev_priv, | |||
118 | if (pin) | 118 | if (pin) |
119 | overlay_placement = &vmw_vram_ne_placement; | 119 | overlay_placement = &vmw_vram_ne_placement; |
120 | 120 | ||
121 | ret = ttm_bo_validate(bo, overlay_placement, interruptible, false); | 121 | ret = ttm_bo_validate(bo, overlay_placement, interruptible, false, false); |
122 | 122 | ||
123 | ttm_bo_unreserve(bo); | 123 | ttm_bo_unreserve(bo); |
124 | 124 | ||