Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ff685975 authored by Chris Wilson's avatar Chris Wilson
Browse files

drm/i915: Move allocate_va_range to GTT



In the future, we need to call allocate_va_range on the aliasing-ppgtt
which means moving the call down from the vma into the vm (which is
more appropriate for calling the vm function).

Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: default avatarMatthew Auld <matthew.auld@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20170215084357.19977-8-chris@chris-wilson.co.uk
parent 9231da70
Loading
Loading
Loading
Loading
+27 −12
Original line number Diff line number Diff line
@@ -190,11 +190,18 @@ static int ppgtt_bind_vma(struct i915_vma *vma,
			  enum i915_cache_level cache_level,
			  u32 unused)
{
	u32 pte_flags = 0;
	u32 pte_flags;
	int ret;

	trace_i915_va_alloc(vma);
	ret = vma->vm->allocate_va_range(vma->vm, vma->node.start, vma->size);
	if (ret)
		return ret;

	vma->pages = vma->obj->mm.pages;

	/* Currently applicable only to VLV */
	pte_flags = 0;
	if (vma->obj->gt_ro)
		pte_flags |= PTE_READ_ONLY;

@@ -206,9 +213,7 @@ static int ppgtt_bind_vma(struct i915_vma *vma,

static void ppgtt_unbind_vma(struct i915_vma *vma)
{
	vma->vm->clear_range(vma->vm,
			     vma->node.start,
			     vma->size);
	vma->vm->clear_range(vma->vm, vma->node.start, vma->size);
}

static gen8_pte_t gen8_pte_encode(dma_addr_t addr,
@@ -2650,9 +2655,10 @@ static int aliasing_gtt_bind_vma(struct i915_vma *vma,
{
	struct drm_i915_private *i915 = vma->vm->i915;
	u32 pte_flags;
	int ret;

	if (unlikely(!vma->pages)) {
		int ret = i915_get_ggtt_vma_pages(vma);
		ret = i915_get_ggtt_vma_pages(vma);
		if (ret)
			return ret;
	}
@@ -2662,19 +2668,28 @@ static int aliasing_gtt_bind_vma(struct i915_vma *vma,
	if (vma->obj->gt_ro)
		pte_flags |= PTE_READ_ONLY;

	if (flags & I915_VMA_GLOBAL_BIND) {
		intel_runtime_pm_get(i915);
		vma->vm->insert_entries(vma->vm,
	if (flags & I915_VMA_LOCAL_BIND) {
		struct i915_hw_ppgtt *appgtt = i915->mm.aliasing_ppgtt;

		if (appgtt->base.allocate_va_range) {
			ret = appgtt->base.allocate_va_range(&appgtt->base,
							     vma->node.start,
							     vma->node.size);
			if (ret)
				return ret;
		}

		appgtt->base.insert_entries(&appgtt->base,
					    vma->pages, vma->node.start,
					    cache_level, pte_flags);
		intel_runtime_pm_put(i915);
	}

	if (flags & I915_VMA_LOCAL_BIND) {
		struct i915_hw_ppgtt *appgtt = i915->mm.aliasing_ppgtt;
		appgtt->base.insert_entries(&appgtt->base,
	if (flags & I915_VMA_GLOBAL_BIND) {
		intel_runtime_pm_get(i915);
		vma->vm->insert_entries(vma->vm,
					vma->pages, vma->node.start,
					cache_level, pte_flags);
		intel_runtime_pm_put(i915);
	}

	return 0;
+0 −9
Original line number Diff line number Diff line
@@ -263,15 +263,6 @@ int i915_vma_bind(struct i915_vma *vma, enum i915_cache_level cache_level,
					vma->vm->total)))
		return -ENODEV;

	if (vma_flags == 0 && vma->vm->allocate_va_range) {
		trace_i915_va_alloc(vma);
		ret = vma->vm->allocate_va_range(vma->vm,
						 vma->node.start,
						 vma->node.size);
		if (ret)
			return ret;
	}

	trace_i915_vma_bind(vma, bind_flags);
	ret = vma->vm->bind_vma(vma, cache_level, bind_flags);
	if (ret)