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

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
...@@ -250,7 +250,12 @@ static bool always_valid(struct context *ctx) ...@@ -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)
......
...@@ -301,6 +301,9 @@ static int igt_partial_tiling(void *arg) ...@@ -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) ...@@ -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
......
...@@ -1149,8 +1149,12 @@ static int __igt_reset_evict_vma(struct intel_gt *gt, ...@@ -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, ...@@ -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;
......
...@@ -45,6 +45,10 @@ static void trash_stolen(struct drm_i915_private *i915) ...@@ -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;
......
...@@ -1149,6 +1149,9 @@ static int igt_ggtt_page(void *arg) ...@@ -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);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment