aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBen Widawsky <ben@bwidawsk.net>2013-07-31 19:59:58 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2013-08-05 13:04:09 -0400
commitc37e22046148971a35a89931aa1f951bb99d5514 (patch)
tree26e14956bac6256dae10f6f9753643a445f81e1f
parentfcb4a57805e04dee04f736c25a5648ec7bebe30f (diff)
drm/i915: Add VM to pin
To verbalize it, one can say, "pin an object into the given address space." The semantics of pinning remain the same otherwise. Certain objects will always have to be bound into the global GTT. Therefore, global GTT is a special case, and keep a special interface around for it (i915_gem_obj_ggtt_pin). v2: s/i915_gem_ggtt_pin/i915_gem_obj_ggtt_pin Signed-off-by: Ben Widawsky <ben@bwidawsk.net> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r--drivers/gpu/drm/i915/i915_drv.h11
-rw-r--r--drivers/gpu/drm/i915/i915_gem.c9
-rw-r--r--drivers/gpu/drm/i915/i915_gem_context.c4
-rw-r--r--drivers/gpu/drm/i915/i915_gem_execbuffer.c4
-rw-r--r--drivers/gpu/drm/i915/intel_overlay.c2
-rw-r--r--drivers/gpu/drm/i915/intel_pm.c2
-rw-r--r--drivers/gpu/drm/i915/intel_ringbuffer.c8
7 files changed, 27 insertions, 13 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 79d4fed9d066..a8b51d525f8c 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1710,6 +1710,7 @@ struct i915_vma *i915_gem_vma_create(struct drm_i915_gem_object *obj,
1710void i915_gem_vma_destroy(struct i915_vma *vma); 1710void i915_gem_vma_destroy(struct i915_vma *vma);
1711 1711
1712int __must_check i915_gem_object_pin(struct drm_i915_gem_object *obj, 1712int __must_check i915_gem_object_pin(struct drm_i915_gem_object *obj,
1713 struct i915_address_space *vm,
1713 uint32_t alignment, 1714 uint32_t alignment,
1714 bool map_and_fenceable, 1715 bool map_and_fenceable,
1715 bool nonblocking); 1716 bool nonblocking);
@@ -1895,6 +1896,16 @@ i915_gem_obj_ggtt_size(struct drm_i915_gem_object *obj)
1895{ 1896{
1896 return i915_gem_obj_size(obj, obj_to_ggtt(obj)); 1897 return i915_gem_obj_size(obj, obj_to_ggtt(obj));
1897} 1898}
1899
1900static inline int __must_check
1901i915_gem_obj_ggtt_pin(struct drm_i915_gem_object *obj,
1902 uint32_t alignment,
1903 bool map_and_fenceable,
1904 bool nonblocking)
1905{
1906 return i915_gem_object_pin(obj, obj_to_ggtt(obj), alignment,
1907 map_and_fenceable, nonblocking);
1908}
1898#undef obj_to_ggtt 1909#undef obj_to_ggtt
1899 1910
1900/* i915_gem_context.c */ 1911/* i915_gem_context.c */
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index c9de97ac1d08..8322dbe3ff16 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -592,7 +592,7 @@ i915_gem_gtt_pwrite_fast(struct drm_device *dev,
592 char __user *user_data; 592 char __user *user_data;
593 int page_offset, page_length, ret; 593 int page_offset, page_length, ret;
594 594
595 ret = i915_gem_object_pin(obj, 0, true, true); 595 ret = i915_gem_obj_ggtt_pin(obj, 0, true, true);
596 if (ret) 596 if (ret)
597 goto out; 597 goto out;
598 598
@@ -1346,7 +1346,7 @@ int i915_gem_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
1346 } 1346 }
1347 1347
1348 /* Now bind it into the GTT if needed */ 1348 /* Now bind it into the GTT if needed */
1349 ret = i915_gem_object_pin(obj, 0, true, false); 1349 ret = i915_gem_obj_ggtt_pin(obj, 0, true, false);
1350 if (ret) 1350 if (ret)
1351 goto unlock; 1351 goto unlock;
1352 1352
@@ -3488,7 +3488,7 @@ i915_gem_object_pin_to_display_plane(struct drm_i915_gem_object *obj,
3488 * (e.g. libkms for the bootup splash), we have to ensure that we 3488 * (e.g. libkms for the bootup splash), we have to ensure that we
3489 * always use map_and_fenceable for all scanout buffers. 3489 * always use map_and_fenceable for all scanout buffers.
3490 */ 3490 */
3491 ret = i915_gem_object_pin(obj, alignment, true, false); 3491 ret = i915_gem_obj_ggtt_pin(obj, alignment, true, false);
3492 if (ret) 3492 if (ret)
3493 return ret; 3493 return ret;
3494 3494
@@ -3631,6 +3631,7 @@ i915_gem_ring_throttle(struct drm_device *dev, struct drm_file *file)
3631 3631
3632int 3632int
3633i915_gem_object_pin(struct drm_i915_gem_object *obj, 3633i915_gem_object_pin(struct drm_i915_gem_object *obj,
3634 struct i915_address_space *vm,
3634 uint32_t alignment, 3635 uint32_t alignment,
3635 bool map_and_fenceable, 3636 bool map_and_fenceable,
3636 bool nonblocking) 3637 bool nonblocking)
@@ -3720,7 +3721,7 @@ i915_gem_pin_ioctl(struct drm_device *dev, void *data,
3720 } 3721 }
3721 3722
3722 if (obj->user_pin_count == 0) { 3723 if (obj->user_pin_count == 0) {
3723 ret = i915_gem_object_pin(obj, args->alignment, true, false); 3724 ret = i915_gem_obj_ggtt_pin(obj, args->alignment, true, false);
3724 if (ret) 3725 if (ret)
3725 goto out; 3726 goto out;
3726 } 3727 }
diff --git a/drivers/gpu/drm/i915/i915_gem_context.c b/drivers/gpu/drm/i915/i915_gem_context.c
index 2470206a4d07..d1cb28cbc71e 100644
--- a/drivers/gpu/drm/i915/i915_gem_context.c
+++ b/drivers/gpu/drm/i915/i915_gem_context.c
@@ -214,7 +214,7 @@ static int create_default_context(struct drm_i915_private *dev_priv)
214 * default context. 214 * default context.
215 */ 215 */
216 dev_priv->ring[RCS].default_context = ctx; 216 dev_priv->ring[RCS].default_context = ctx;
217 ret = i915_gem_object_pin(ctx->obj, CONTEXT_ALIGN, false, false); 217 ret = i915_gem_obj_ggtt_pin(ctx->obj, CONTEXT_ALIGN, false, false);
218 if (ret) { 218 if (ret) {
219 DRM_DEBUG_DRIVER("Couldn't pin %d\n", ret); 219 DRM_DEBUG_DRIVER("Couldn't pin %d\n", ret);
220 goto err_destroy; 220 goto err_destroy;
@@ -400,7 +400,7 @@ static int do_switch(struct i915_hw_context *to)
400 if (from == to) 400 if (from == to)
401 return 0; 401 return 0;
402 402
403 ret = i915_gem_object_pin(to->obj, CONTEXT_ALIGN, false, false); 403 ret = i915_gem_obj_ggtt_pin(to->obj, CONTEXT_ALIGN, false, false);
404 if (ret) 404 if (ret)
405 return ret; 405 return ret;
406 406
diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
index 5b6d764e9bb2..7addab31783f 100644
--- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
+++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
@@ -409,7 +409,9 @@ i915_gem_execbuffer_reserve_object(struct drm_i915_gem_object *obj,
409 obj->tiling_mode != I915_TILING_NONE; 409 obj->tiling_mode != I915_TILING_NONE;
410 need_mappable = need_fence || need_reloc_mappable(obj); 410 need_mappable = need_fence || need_reloc_mappable(obj);
411 411
412 ret = i915_gem_object_pin(obj, entry->alignment, need_mappable, false); 412 /* FIXME: vm plubming */
413 ret = i915_gem_object_pin(obj, &dev_priv->gtt.base, entry->alignment,
414 need_mappable, false);
413 if (ret) 415 if (ret)
414 return ret; 416 return ret;
415 417
diff --git a/drivers/gpu/drm/i915/intel_overlay.c b/drivers/gpu/drm/i915/intel_overlay.c
index 9ec5a4e12af2..ddfd0aefe0c0 100644
--- a/drivers/gpu/drm/i915/intel_overlay.c
+++ b/drivers/gpu/drm/i915/intel_overlay.c
@@ -1352,7 +1352,7 @@ void intel_setup_overlay(struct drm_device *dev)
1352 } 1352 }
1353 overlay->flip_addr = reg_bo->phys_obj->handle->busaddr; 1353 overlay->flip_addr = reg_bo->phys_obj->handle->busaddr;
1354 } else { 1354 } else {
1355 ret = i915_gem_object_pin(reg_bo, PAGE_SIZE, true, false); 1355 ret = i915_gem_obj_ggtt_pin(reg_bo, PAGE_SIZE, true, false);
1356 if (ret) { 1356 if (ret) {
1357 DRM_ERROR("failed to pin overlay register bo\n"); 1357 DRM_ERROR("failed to pin overlay register bo\n");
1358 goto out_free_bo; 1358 goto out_free_bo;
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index da1b64121611..4c4020631b36 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -2886,7 +2886,7 @@ intel_alloc_context_page(struct drm_device *dev)
2886 return NULL; 2886 return NULL;
2887 } 2887 }
2888 2888
2889 ret = i915_gem_object_pin(ctx, 4096, true, false); 2889 ret = i915_gem_obj_ggtt_pin(ctx, 4096, true, false);
2890 if (ret) { 2890 if (ret) {
2891 DRM_ERROR("failed to pin power context: %d\n", ret); 2891 DRM_ERROR("failed to pin power context: %d\n", ret);
2892 goto err_unref; 2892 goto err_unref;
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
index 8527ea05124b..74d02a704515 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
@@ -501,7 +501,7 @@ init_pipe_control(struct intel_ring_buffer *ring)
501 501
502 i915_gem_object_set_cache_level(obj, I915_CACHE_LLC); 502 i915_gem_object_set_cache_level(obj, I915_CACHE_LLC);
503 503
504 ret = i915_gem_object_pin(obj, 4096, true, false); 504 ret = i915_gem_obj_ggtt_pin(obj, 4096, true, false);
505 if (ret) 505 if (ret)
506 goto err_unref; 506 goto err_unref;
507 507
@@ -1224,7 +1224,7 @@ static int init_status_page(struct intel_ring_buffer *ring)
1224 1224
1225 i915_gem_object_set_cache_level(obj, I915_CACHE_LLC); 1225 i915_gem_object_set_cache_level(obj, I915_CACHE_LLC);
1226 1226
1227 ret = i915_gem_object_pin(obj, 4096, true, false); 1227 ret = i915_gem_obj_ggtt_pin(obj, 4096, true, false);
1228 if (ret != 0) { 1228 if (ret != 0) {
1229 goto err_unref; 1229 goto err_unref;
1230 } 1230 }
@@ -1307,7 +1307,7 @@ static int intel_init_ring_buffer(struct drm_device *dev,
1307 1307
1308 ring->obj = obj; 1308 ring->obj = obj;
1309 1309
1310 ret = i915_gem_object_pin(obj, PAGE_SIZE, true, false); 1310 ret = i915_gem_obj_ggtt_pin(obj, PAGE_SIZE, true, false);
1311 if (ret) 1311 if (ret)
1312 goto err_unref; 1312 goto err_unref;
1313 1313
@@ -1828,7 +1828,7 @@ int intel_init_render_ring_buffer(struct drm_device *dev)
1828 return -ENOMEM; 1828 return -ENOMEM;
1829 } 1829 }
1830 1830
1831 ret = i915_gem_object_pin(obj, 0, true, false); 1831 ret = i915_gem_obj_ggtt_pin(obj, 0, true, false);
1832 if (ret != 0) { 1832 if (ret != 0) {
1833 drm_gem_object_unreference(&obj->base); 1833 drm_gem_object_unreference(&obj->base);
1834 DRM_ERROR("Failed to ping batch bo\n"); 1834 DRM_ERROR("Failed to ping batch bo\n");