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

Commit d6660add authored by Ben Widawsky's avatar Ben Widawsky Committed by Daniel Vetter
Browse files

drm/i915: Generalize PPGTT init



Rearrange the initialization code to try to special case the aliasing
PPGTT less, and provide usable interfaces for the general case later.

Signed-off-by: default avatarBen Widawsky <ben@bwidawsk.net>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent 90252e5c
Loading
Loading
Loading
Loading
+19 −15
Original line number Diff line number Diff line
@@ -888,15 +888,11 @@ err_pt_alloc:
	return ret;
}

static int i915_gem_init_aliasing_ppgtt(struct drm_device *dev)
static int i915_gem_init_ppgtt(struct drm_device *dev,
			       struct i915_hw_ppgtt *ppgtt)
{
	struct drm_i915_private *dev_priv = dev->dev_private;
	struct i915_hw_ppgtt *ppgtt;
	int ret;

	ppgtt = kzalloc(sizeof(*ppgtt), GFP_KERNEL);
	if (!ppgtt)
		return -ENOMEM;
	int ret = 0;

	ppgtt->base.dev = dev;

@@ -907,13 +903,9 @@ static int i915_gem_init_aliasing_ppgtt(struct drm_device *dev)
	else
		BUG();

	if (ret)
		kfree(ppgtt);
	else {
		dev_priv->mm.aliasing_ppgtt = ppgtt;
	if (!ret)
		drm_mm_init(&ppgtt->base.mm, ppgtt->base.start,
			    ppgtt->base.total);
	}

	return ret;
}
@@ -1430,10 +1422,22 @@ void i915_gem_init_global_gtt(struct drm_device *dev)

	i915_gem_setup_global_gtt(dev, 0, mappable_size, gtt_size);
	if (intel_enable_ppgtt(dev) && HAS_ALIASING_PPGTT(dev)) {
		struct i915_hw_ppgtt *ppgtt;
		int ret;

		ret = i915_gem_init_aliasing_ppgtt(dev);
		if (ret)
		ppgtt = kzalloc(sizeof(*ppgtt), GFP_KERNEL);
		if (!ppgtt) {
			DRM_ERROR("Aliased PPGTT setup failed -ENOMEM\n");
			return;
		}

		ret = i915_gem_init_ppgtt(dev, ppgtt);
		if (!ret) {
			dev_priv->mm.aliasing_ppgtt = ppgtt;
			return;
		}

		kfree(ppgtt);
		DRM_ERROR("Aliased PPGTT setup failed %d\n", ret);
	}
}