Commit e60f7bb7 authored by Matthew Auld's avatar Matthew Auld Committed by Chris Wilson
Browse files

drm/i915/selftests: check for missing aperture



We may be missing support for the mappable aperture on some platforms.

Signed-off-by: default avatarMatthew Auld <matthew.auld@intel.com>
Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20191029095856.25431-7-matthew.auld@intel.com
parent 34a6baa2
Loading
Loading
Loading
Loading
+6 −1
Original line number Original line Diff line number Diff line
@@ -250,7 +250,12 @@ static bool always_valid(struct context *ctx)


static bool needs_fence_registers(struct context *ctx)
static bool needs_fence_registers(struct context *ctx)
{
{
	return !intel_gt_is_wedged(ctx->engine->gt);
	struct intel_gt *gt = ctx->engine->gt;

	if (intel_gt_is_wedged(gt))
		return false;

	return gt->ggtt->num_fences;
}
}


static bool needs_mi_store_dword(struct context *ctx)
static bool needs_mi_store_dword(struct context *ctx)
+6 −0
Original line number Original line Diff line number Diff line
@@ -301,6 +301,9 @@ static int igt_partial_tiling(void *arg)
	int tiling;
	int tiling;
	int err;
	int err;


	if (!i915_ggtt_has_aperture(&i915->ggtt))
		return 0;

	/* We want to check the page mapping and fencing of a large object
	/* We want to check the page mapping and fencing of a large object
	 * mmapped through the GTT. The object we create is larger than can
	 * mmapped through the GTT. The object we create is larger than can
	 * possibly be mmaped as a whole, and so we must use partial GGTT vma.
	 * possibly be mmaped as a whole, and so we must use partial GGTT vma.
@@ -431,6 +434,9 @@ static int igt_smoke_tiling(void *arg)
	IGT_TIMEOUT(end);
	IGT_TIMEOUT(end);
	int err;
	int err;


	if (!i915_ggtt_has_aperture(&i915->ggtt))
		return 0;

	/*
	/*
	 * igt_partial_tiling() does an exhastive check of partial tiling
	 * igt_partial_tiling() does an exhastive check of partial tiling
	 * chunking, but will undoubtably run out of time. Here, we do a
	 * chunking, but will undoubtably run out of time. Here, we do a
+10 −4
Original line number Original line Diff line number Diff line
@@ -1149,8 +1149,12 @@ static int __igt_reset_evict_vma(struct intel_gt *gt,
	struct i915_request *rq;
	struct i915_request *rq;
	struct evict_vma arg;
	struct evict_vma arg;
	struct hang h;
	struct hang h;
	unsigned int pin_flags;
	int err;
	int err;


	if (!gt->ggtt->num_fences && flags & EXEC_OBJECT_NEEDS_FENCE)
		return 0;

	if (!engine || !intel_engine_can_store_dword(engine))
	if (!engine || !intel_engine_can_store_dword(engine))
		return 0;
		return 0;


@@ -1186,10 +1190,12 @@ static int __igt_reset_evict_vma(struct intel_gt *gt,
		goto out_obj;
		goto out_obj;
	}
	}


	err = i915_vma_pin(arg.vma, 0, 0,
	pin_flags = i915_vma_is_ggtt(arg.vma) ? PIN_GLOBAL : PIN_USER;
			   i915_vma_is_ggtt(arg.vma) ?

			   PIN_GLOBAL | PIN_MAPPABLE :
	if (flags & EXEC_OBJECT_NEEDS_FENCE)
			   PIN_USER);
		pin_flags |= PIN_MAPPABLE;

	err = i915_vma_pin(arg.vma, 0, 0, pin_flags);
	if (err) {
	if (err) {
		i915_request_add(rq);
		i915_request_add(rq);
		goto out_obj;
		goto out_obj;
+4 −0
Original line number Original line Diff line number Diff line
@@ -45,6 +45,10 @@ static void trash_stolen(struct drm_i915_private *i915)
	unsigned long page;
	unsigned long page;
	u32 prng = 0x12345678;
	u32 prng = 0x12345678;


	/* XXX: fsck. needs some more thought... */
	if (!i915_ggtt_has_aperture(ggtt))
		return;

	for (page = 0; page < size; page += PAGE_SIZE) {
	for (page = 0; page < size; page += PAGE_SIZE) {
		const dma_addr_t dma = i915->dsm.start + page;
		const dma_addr_t dma = i915->dsm.start + page;
		u32 __iomem *s;
		u32 __iomem *s;
+3 −0
Original line number Original line Diff line number Diff line
@@ -1149,6 +1149,9 @@ static int igt_ggtt_page(void *arg)
	unsigned int *order, n;
	unsigned int *order, n;
	int err;
	int err;


	if (!i915_ggtt_has_aperture(ggtt))
		return 0;

	obj = i915_gem_object_create_internal(i915, PAGE_SIZE);
	obj = i915_gem_object_create_internal(i915, PAGE_SIZE);
	if (IS_ERR(obj))
	if (IS_ERR(obj))
		return PTR_ERR(obj);
		return PTR_ERR(obj);