summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2017-05-18 12:11:59 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2017-05-18 13:06:17 +0100
commitbc7877660c7d7a733ec484e91e2096b8daf2cf0d (patch)
tree4ade2c9751497fac6a87081920863cce63d14704
parent49e083a29a0942309c877ea8e9275fa985a5bf25 (diff)
lib: Refactor testing for ability to use MI_STORE_DATA_IMM
Rather than have the code in multiple locations, put a copy in lib/ Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r--lib/igt_gt.c18
-rw-r--r--lib/igt_gt.h1
-rw-r--r--tests/amdgpu/amd_prime.c3
-rw-r--r--tests/drv_module_reload.c17
-rw-r--r--tests/gem_busy.c31
-rw-r--r--tests/gem_cs_prefetch.c10
-rw-r--r--tests/gem_ctx_thrash.c3
-rw-r--r--tests/gem_exec_async.c9
-rw-r--r--tests/gem_exec_fence.c8
-rw-r--r--tests/gem_exec_flush.c12
-rw-r--r--tests/gem_exec_gttfill.c19
-rw-r--r--tests/gem_exec_parallel.c13
-rw-r--r--tests/gem_exec_reloc.c11
-rw-r--r--tests/gem_exec_schedule.c8
-rw-r--r--tests/gem_exec_store.c14
-rw-r--r--tests/gem_exec_suspend.c25
-rw-r--r--tests/gem_exec_whisper.c20
-rw-r--r--tests/gem_ringfill.c11
-rw-r--r--tests/gem_softpin.c1
-rw-r--r--tests/gem_storedw_loop.c3
-rw-r--r--tests/gem_sync.c16
-rw-r--r--tests/pm_rps.c2
-rw-r--r--tests/prime_busy.c10
-rw-r--r--tests/prime_vgem.c22
24 files changed, 98 insertions, 189 deletions
diff --git a/lib/igt_gt.c b/lib/igt_gt.c
index 25db02e9..11643edd 100644
--- a/lib/igt_gt.c
+++ b/lib/igt_gt.c
@@ -557,3 +557,21 @@ const struct intel_execution_engine intel_execution_engines[] = {
{ "vebox", "vecs0", I915_EXEC_VEBOX, 0 },
{ NULL, 0, 0 }
};
+
+bool gem_can_store_dword(int fd, unsigned int engine)
+{
+ uint16_t devid = intel_get_drm_devid(fd);
+ const struct intel_device_info *info = intel_get_device_info(devid);
+ const int gen = ffs(info->gen);
+
+ if (gen <= 2) /* requires physical addresses */
+ return false;
+
+ if (gen == 6 && (engine & ~(3<<13)) == I915_EXEC_BSD)
+ return false; /* kills the machine! */
+
+ if (info->is_broadwater)
+ return false; /* Not sure yet... */
+
+ return true;
+}
diff --git a/lib/igt_gt.h b/lib/igt_gt.h
index 1ed833d2..2579cbd3 100644
--- a/lib/igt_gt.h
+++ b/lib/igt_gt.h
@@ -78,5 +78,6 @@ extern const struct intel_execution_engine {
e__++) \
for_if (gem_has_ring(fd__, flags__ = e__->exec_id | e__->flags))
+bool gem_can_store_dword(int fd, unsigned int engine);
#endif /* IGT_GT_H */
diff --git a/tests/amdgpu/amd_prime.c b/tests/amdgpu/amd_prime.c
index 49345755..54a11105 100644
--- a/tests/amdgpu/amd_prime.c
+++ b/tests/amdgpu/amd_prime.c
@@ -183,9 +183,6 @@ static void i915_to_amd(int i915, int amd, amdgpu_device_handle device)
if (engine == 0)
continue;
- if (engine == I915_EXEC_BSD)
- continue;
-
engines[nengine++] = engine;
}
igt_require(nengine);
diff --git a/tests/drv_module_reload.c b/tests/drv_module_reload.c
index 32e1324b..db2ad2cf 100644
--- a/tests/drv_module_reload.c
+++ b/tests/drv_module_reload.c
@@ -42,11 +42,6 @@
#define ENGINE_MASK (I915_EXEC_RING_MASK | LOCAL_I915_EXEC_BSD_MASK)
-static bool can_store_dword_imm(int fd)
-{
- return intel_gen(intel_get_drm_devid(fd)) > 2;
-}
-
static void store_dword(int fd, unsigned ring)
{
const int gen = intel_gen(intel_get_drm_devid(fd));
@@ -56,15 +51,12 @@ static void store_dword(int fd, unsigned ring)
uint32_t batch[16];
int i;
- if (!can_store_dword_imm(fd))
+ if (!gem_can_store_dword(fd, ring))
return;
if (!gem_has_ring(fd, ring))
return;
- if (gen == 6 && (ring & ~(3<<13)) == I915_EXEC_BSD)
- return;
-
intel_detect_and_clear_missed_interrupts(fd);
memset(&execbuf, 0, sizeof(execbuf));
execbuf.buffers_ptr = (uintptr_t)obj;
@@ -125,7 +117,7 @@ static void store_all(int fd)
int value;
int i, j;
- if (!can_store_dword_imm(fd))
+ if (!gem_can_store_dword(fd, 0))
return;
memset(&execbuf, 0, sizeof(execbuf));
@@ -160,7 +152,7 @@ static void store_all(int fd)
nengine = 0;
intel_detect_and_clear_missed_interrupts(fd);
for_each_engine(fd, engine) {
- if (gen == 6 && (engine & ~(3<<13)) == I915_EXEC_BSD)
+ if (!gem_can_store_dword(fd, engine))
continue;
igt_assert(2*(nengine+1)*sizeof(batch) <= 4096);
@@ -272,7 +264,8 @@ gem_exec_store(void)
igt_fork_hang_detector(fd);
for (e = intel_execution_engines; e->name; e++) {
- store_dword(fd, e->exec_id | e->flags);
+ if (gem_can_store_dword(fd, e->exec_id | e->flags))
+ store_dword(fd, e->exec_id | e->flags);
}
store_all(fd);
diff --git a/tests/gem_busy.c b/tests/gem_busy.c
index 06cc3a0b..8702dd7e 100644
--- a/tests/gem_busy.c
+++ b/tests/gem_busy.c
@@ -316,10 +316,10 @@ static void one(int fd, unsigned ring, uint32_t flags, unsigned test_flags)
if (e->exec_id == 0 || e->exec_id == ring)
continue;
- if (e->exec_id == I915_EXEC_BSD && gen == 6)
+ if (!gem_has_ring(fd, e->exec_id | e->flags))
continue;
- if (!gem_has_ring(fd, e->exec_id | e->flags))
+ if (!gem_can_store_dword(fd, e->exec_id | e->flags))
continue;
igt_debug("Testing %s in parallel\n", e->name);
@@ -500,11 +500,6 @@ static void basic(int fd, unsigned ring, unsigned flags)
igt_spin_batch_free(fd, spin);
}
-static bool can_store_dword_imm(int fd)
-{
- return intel_gen(intel_get_drm_devid(fd)) > 2;
-}
-
igt_main
{
const struct intel_execution_engine *e;
@@ -515,7 +510,7 @@ igt_main
igt_fixture {
fd = drm_open_driver_master(DRIVER_INTEL);
igt_require_gem(fd);
- igt_require(can_store_dword_imm(fd));
+ igt_require(gem_can_store_dword(fd, 0));
}
igt_subtest_group {
@@ -536,12 +531,9 @@ igt_main
}
igt_subtest_group {
- int gen = 0;
-
igt_fixture {
igt_require(has_extended_busy_ioctl(fd));
gem_require_mmap_wc(fd);
- gen = intel_gen(intel_get_drm_devid(fd));
}
for (e = intel_execution_engines; e->name; e++) {
@@ -551,9 +543,7 @@ igt_main
igt_subtest_f("extended-%s", e->name) {
gem_require_ring(fd, e->exec_id | e->flags);
- igt_skip_on_f(gen == 6 &&
- e->exec_id == I915_EXEC_BSD,
- "MI_STORE_DATA broken on gen6 bsd\n");
+ igt_require(gem_can_store_dword(fd, e->exec_id | e->flags));
gem_quiescent_gpu(fd);
one(fd, e->exec_id, e->flags, 0);
gem_quiescent_gpu(fd);
@@ -567,9 +557,8 @@ igt_main
igt_subtest_f("extended-parallel-%s", e->name) {
gem_require_ring(fd, e->exec_id | e->flags);
- igt_skip_on_f(gen == 6 &&
- e->exec_id == I915_EXEC_BSD,
- "MI_STORE_DATA broken on gen6 bsd\n");
+ igt_require(gem_can_store_dword(fd, e->exec_id | e->flags));
+
gem_quiescent_gpu(fd);
one(fd, e->exec_id, e->flags, PARALLEL);
gem_quiescent_gpu(fd);
@@ -619,12 +608,9 @@ igt_main
}
igt_subtest_group {
- int gen = 0;
-
igt_fixture {
igt_require(has_extended_busy_ioctl(fd));
gem_require_mmap_wc(fd);
- gen = intel_gen(intel_get_drm_devid(fd));
}
for (e = intel_execution_engines; e->name; e++) {
@@ -634,9 +620,8 @@ igt_main
igt_subtest_f("extended-hang-%s", e->name) {
gem_require_ring(fd, e->exec_id | e->flags);
- igt_skip_on_f(gen == 6 &&
- e->exec_id == I915_EXEC_BSD,
- "MI_STORE_DATA broken on gen6 bsd\n");
+ igt_require(gem_can_store_dword(fd, e->exec_id | e->flags));
+
gem_quiescent_gpu(fd);
one(fd, e->exec_id, e->flags, HANG);
gem_quiescent_gpu(fd);
diff --git a/tests/gem_cs_prefetch.c b/tests/gem_cs_prefetch.c
index 9f445d52..2b865368 100644
--- a/tests/gem_cs_prefetch.c
+++ b/tests/gem_cs_prefetch.c
@@ -46,14 +46,6 @@ struct shadow {
struct drm_i915_gem_relocation_entry reloc;
};
-static void gem_require_store_dword(int fd, unsigned ring)
-{
- int gen = intel_gen(intel_get_drm_devid(fd));
- ring &= ~(3 << 13);
- igt_skip_on_f(gen == 6 && ring == I915_EXEC_BSD,
- "MI_STORE_DATA broken on gen6 bsd\n");
-}
-
static void setup(int fd, int gen, struct shadow *shadow)
{
uint32_t buf[16];
@@ -96,7 +88,7 @@ static void can_test_ring(unsigned ring)
close(master);
igt_require_gem(fd);
gem_require_ring(fd, ring);
- gem_require_store_dword(fd, ring);
+ igt_require(gem_can_store_dword(fd, ring));
close(fd);
}
diff --git a/tests/gem_ctx_thrash.c b/tests/gem_ctx_thrash.c
index cc7ea1a7..f79a1f4f 100644
--- a/tests/gem_ctx_thrash.c
+++ b/tests/gem_ctx_thrash.c
@@ -136,6 +136,9 @@ static void single(const char *name, bool all_engines)
#define MAX_LOOP 16
fd = drm_open_driver_master(DRIVER_INTEL);
+ igt_require_gem(fd);
+ igt_require(gem_can_store_dword(fd, 0));
+
gen = intel_gen(intel_get_drm_devid(fd));
num_engines = 0;
diff --git a/tests/gem_exec_async.c b/tests/gem_exec_async.c
index d054fd43..30e9452f 100644
--- a/tests/gem_exec_async.c
+++ b/tests/gem_exec_async.c
@@ -147,10 +147,10 @@ static void one(int fd, unsigned ring, uint32_t flags)
if (e->exec_id == 0 || e->exec_id == ring)
continue;
- if (e->exec_id == I915_EXEC_BSD && gen == 6)
+ if (!gem_has_ring(fd, e->exec_id | e->flags))
continue;
- if (!gem_has_ring(fd, e->exec_id | e->flags))
+ if (!gem_can_store_dword(fd, e->exec_id | e->flags))
continue;
store_dword(fd, e->exec_id | e->flags,
@@ -199,6 +199,7 @@ igt_main
igt_require_gem(fd);
gem_require_mmap_wc(fd);
igt_require(has_async_execbuf(fd));
+ igt_require(gem_can_store_dword(fd, 0));
igt_fork_hang_detector(fd);
}
@@ -207,8 +208,10 @@ igt_main
if (e->exec_id == 0)
continue;
- igt_subtest_f("concurrent-writes-%s", e->name)
+ igt_subtest_f("concurrent-writes-%s", e->name) {
+ igt_require(gem_can_store_dword(fd, e->exec_id | e->flags));
one(fd, e->exec_id, e->flags);
+ }
}
igt_fixture {
diff --git a/tests/gem_exec_fence.c b/tests/gem_exec_fence.c
index 8ef5f8fe..59aa8e67 100644
--- a/tests/gem_exec_fence.c
+++ b/tests/gem_exec_fence.c
@@ -48,11 +48,6 @@ struct sync_merge_data {
#define SYNC_IOC_MERGE _IOWR(SYNC_IOC_MAGIC, 3, struct sync_merge_data)
#endif
-static bool can_mi_store_dword(int gen, unsigned engine)
-{
- return !(gen == 6 && (engine & ~(3<<13)) == I915_EXEC_BSD);
-}
-
static void store(int fd, unsigned ring, int fence, uint32_t target, unsigned offset_value)
{
const int SCRATCH = 0;
@@ -283,7 +278,7 @@ static void test_fence_await(int fd, unsigned ring, unsigned flags)
i = 0;
for_each_engine(fd, engine) {
- if (!can_mi_store_dword(gen, engine))
+ if (!gem_can_store_dword(fd, engine))
continue;
if (flags & NONBLOCK) {
@@ -523,6 +518,7 @@ igt_main
igt_subtest_group {
igt_fixture {
igt_require(gem_has_ring(i915, e->exec_id | e->flags));
+ igt_require(gem_can_store_dword(i915, e->exec_id | e->flags));
}
igt_subtest_group {
diff --git a/tests/gem_exec_flush.c b/tests/gem_exec_flush.c
index 7534532d..803d45b6 100644
--- a/tests/gem_exec_flush.c
+++ b/tests/gem_exec_flush.c
@@ -545,11 +545,6 @@ static const char *yesno(bool x)
return x ? "yes" : "no";
}
-static bool can_store_dword_imm(int gen)
-{
- return gen > 2;
-}
-
igt_main
{
const struct intel_execution_engine *e;
@@ -579,7 +574,6 @@ igt_main
{ NULL }
};
unsigned cpu = x86_64_features();
- int gen = -1;
int fd = -1;
igt_skip_on_simulation();
@@ -589,8 +583,7 @@ igt_main
fd = drm_open_driver(DRIVER_INTEL);
igt_require_gem(fd);
gem_require_mmap_wc(fd);
- gen = intel_gen(intel_get_drm_devid(fd));
- igt_require(can_store_dword_imm(gen));
+ igt_require(gem_can_store_dword(fd, 0));
igt_info("Has LLC? %s\n", yesno(gem_has_llc(fd)));
if (cpu) {
@@ -609,8 +602,7 @@ igt_main
igt_fixture {
gem_require_ring(fd, ring);
- igt_skip_on_f(gen == 6 && e->exec_id == I915_EXEC_BSD,
- "MI_STORE_DATA broken on gen6 bsd\n");
+ igt_require(gem_can_store_dword(fd, ring));
}
for (const struct batch *b = batches; b->name; b++) {
diff --git a/tests/gem_exec_gttfill.c b/tests/gem_exec_gttfill.c
index f9a061eb..96ed832f 100644
--- a/tests/gem_exec_gttfill.c
+++ b/tests/gem_exec_gttfill.c
@@ -28,14 +28,6 @@ IGT_TEST_DESCRIPTION("Fill the GTT with batches.");
#define BATCH_SIZE (4096<<10)
-static void gem_require_store_dword(int fd, unsigned ring)
-{
- int gen = intel_gen(intel_get_drm_devid(fd));
- ring &= ~(3 << 13);
- igt_skip_on_f(gen == 6 && ring == I915_EXEC_BSD,
- "MI_STORE_DATA broken on gen6 bsd\n");
-}
-
static bool ignore_engine(int fd, unsigned engine)
{
if (engine == 0)
@@ -138,14 +130,14 @@ static void fillgtt(int fd, unsigned ring, int timeout)
if (ignore_engine(fd, engine))
continue;
- if (gen == 6 && e__->exec_id == I915_EXEC_BSD)
+ if (!gem_can_store_dword(fd, engine))
continue;
engines[nengine++] = engine;
}
} else {
gem_require_ring(fd, ring);
- gem_require_store_dword(fd, ring);
+ igt_require(gem_can_store_dword(fd, ring));
engines[nengine++] = ring;
}
@@ -209,11 +201,6 @@ static void fillgtt(int fd, unsigned ring, int timeout)
igt_assert_eq(intel_detect_and_clear_missed_interrupts(fd), 0);
}
-static bool can_store_dword_imm(int fd)
-{
- return intel_gen(intel_get_drm_devid(fd)) > 2;
-}
-
igt_main
{
const struct intel_execution_engine *e;
@@ -224,7 +211,7 @@ igt_main
igt_fixture {
device = drm_open_driver(DRIVER_INTEL);
igt_require_gem(device);
- igt_require(can_store_dword_imm(device));
+ igt_require(gem_can_store_dword(device, 0));
igt_fork_hang_detector(device);
}
diff --git a/tests/gem_exec_parallel.c b/tests/gem_exec_parallel.c
index 8955868f..1c53bd64 100644
--- a/tests/gem_exec_parallel.c
+++ b/tests/gem_exec_parallel.c
@@ -71,17 +71,12 @@ static void gem_require_context(int fd)
igt_require(__gem_context_create(fd));
}
-static bool can_mi_store_dword(int gen, unsigned engine)
-{
- return gen > 2 && !(gen == 6 && (engine & ~(3<<13)) == I915_EXEC_BSD);
-}
-
-static bool ignore_engine(int gen, unsigned engine)
+static bool ignore_engine(int fd, unsigned engine)
{
if (engine == 0)
return true;
- if (!can_mi_store_dword(gen, engine))
+ if (!gem_can_store_dword(fd, engine))
return true;
return false;
@@ -202,12 +197,12 @@ static void all(int fd, unsigned engine, unsigned flags)
nengine = 0;
if (engine == -1) {
for_each_engine(fd, engine) {
- if (!ignore_engine(gen, engine))
+ if (!ignore_engine(fd, engine))
engines[nengine++] = engine;
}
} else {
igt_require(gem_has_ring(fd, engine));
- igt_require(can_mi_store_dword(gen, engine));
+ igt_require(gem_can_store_dword(fd, engine));
engines[nengine++] = engine;
}
igt_require(nengine);
diff --git a/tests/gem_exec_reloc.c b/tests/gem_exec_reloc.c
index f6142714..edbc0f13 100644
--- a/tests/gem_exec_reloc.c
+++ b/tests/gem_exec_reloc.c
@@ -190,6 +190,8 @@ static void from_gpu(int fd)
uint32_t reloc_handle;
uint64_t value;
+ igt_require(gem_can_store_dword(fd, 0));
+
memset(&obj, 0, sizeof(obj));
obj.handle = gem_create(fd, 4096);
gem_write(fd, obj.handle, 0, &bbe, sizeof(bbe));
@@ -231,11 +233,6 @@ static void from_gpu(int fd)
munmap(relocs, 4096);
}
-static bool ignore_engine(int gen, unsigned engine)
-{
- return gen == 6 && (engine & ~(3<<13)) == I915_EXEC_BSD;
-}
-
static void check_bo(int fd, uint32_t handle)
{
uint32_t *map;
@@ -262,12 +259,12 @@ static void active(int fd, unsigned engine)
nengine = 0;
if (engine == -1) {
for_each_engine(fd, engine) {
- if (!ignore_engine(gen, engine))
+ if (gem_can_store_dword(fd, engine))
engines[nengine++] = engine;
}
} else {
igt_require(gem_has_ring(fd, engine));
- igt_require(!ignore_engine(gen, engine));
+ igt_require(gem_can_store_dword(fd, engine));
engines[nengine++] = engine;
}
igt_require(nengine);
diff --git a/tests/gem_exec_schedule.c b/tests/gem_exec_schedule.c
index 06f3186d..545dcc2e 100644
--- a/tests/gem_exec_schedule.c
+++ b/tests/gem_exec_schedule.c
@@ -534,9 +534,7 @@ igt_main
igt_subtest_f("fifo-%s", e->name) {
gem_require_ring(fd, e->exec_id | e->flags);
- igt_skip_on_f(intel_gen(intel_get_drm_devid(fd)) == 6 &&
- e->exec_id == I915_EXEC_BSD,
- "MI_STORE_DATA broken on gen6 bsd\n");
+ igt_require(gem_can_store_dword(fd, e->exec_id) | e->flags);
fifo(fd, e->exec_id | e->flags);
}
}
@@ -556,9 +554,7 @@ igt_main
igt_subtest_group {
igt_fixture {
gem_require_ring(fd, e->exec_id | e->flags);
- igt_skip_on_f(intel_gen(intel_get_drm_devid(fd)) == 6 &&
- e->exec_id == I915_EXEC_BSD,
- "MI_STORE_DATA broken on gen6 bsd\n");
+ igt_require(gem_can_store_dword(fd, e->exec_id) | e->flags);
}
igt_subtest_f("in-order-%s", e->name)
diff --git a/tests/gem_exec_store.c b/tests/gem_exec_store.c
index 3d663ca8..904431c6 100644
--- a/tests/gem_exec_store.c
+++ b/tests/gem_exec_store.c
@@ -45,8 +45,7 @@ static void store_dword(int fd, unsigned ring)
int i;
gem_require_ring(fd, ring);
- igt_skip_on_f(gen == 6 && (ring & ~(3<<13)) == I915_EXEC_BSD,
- "MI_STORE_DATA broken on gen6 bsd\n");
+ igt_require(gem_can_store_dword(fd, ring));
intel_detect_and_clear_missed_interrupts(fd);
memset(&execbuf, 0, sizeof(execbuf));
@@ -140,7 +139,7 @@ static void store_all(int fd)
nengine = 0;
intel_detect_and_clear_missed_interrupts(fd);
for_each_engine(fd, engine) {
- if (gen == 6 && (engine & ~(3<<13)) == I915_EXEC_BSD)
+ if (!gem_can_store_dword(fd, engine))
continue;
igt_assert(2*(nengine+1)*sizeof(batch) <= 4096);
@@ -208,11 +207,6 @@ static void store_all(int fd)
igt_assert_eq(intel_detect_and_clear_missed_interrupts(fd), 0);
}
-static bool can_store_dword_imm(int fd)
-{
- return intel_gen(intel_get_drm_devid(fd)) > 2;
-}
-
static int print_welcome(int fd)
{
uint16_t devid = intel_get_drm_devid(fd);
@@ -222,7 +216,7 @@ static int print_welcome(int fd)
igt_info("Running on %s (pci-id %04x, gen %d)\n",
info->codename, devid, ffs(info->gen));
igt_info("Can use MI_STORE_DWORD(virtual)? %s\n",
- can_store_dword_imm(fd) ? "yes" : "no");
+ gem_can_store_dword(fd, 0) ? "yes" : "no");
err = 0;
if (drmIoctl(fd, DRM_IOCTL_I915_GEM_THROTTLE, 0))
@@ -248,7 +242,7 @@ igt_main
igt_require(drmSetMaster(fd) == 0);
igt_require_gem(fd);
- igt_require(can_store_dword_imm(fd));
+ igt_require(gem_can_store_dword(fd, 0));
igt_fork_hang_detector(fd);
}
diff --git a/tests/gem_exec_suspend.c b/tests/gem_exec_suspend.c
index db5f6f1d..763cb108 100644
--- a/tests/gem_exec_suspend.c
+++ b/tests/gem_exec_suspend.c
@@ -60,17 +60,12 @@ static void check_bo(int fd, uint32_t handle)
munmap(map, 4096);
}
-static bool can_mi_store_dword(int gen, unsigned engine)
-{
- return gen > 2 && !(gen == 6 && (engine & ~(3<<13)) == I915_EXEC_BSD);
-}
-
-static bool ignore_engine(int gen, unsigned engine)
+static bool ignore_engine(int fd, unsigned engine)
{
if (engine == 0)
return true;
- if (!can_mi_store_dword(gen, engine))
+ if (!gem_can_store_dword(fd, engine))
return true;
return false;
@@ -78,11 +73,10 @@ static bool ignore_engine(int gen, unsigned engine)
static void test_all(int fd, unsigned flags)
{
- const int gen = intel_gen(intel_get_drm_devid(fd));
unsigned engine;
for_each_engine(fd, engine) {
- if (!ignore_engine(gen, engine))
+ if (!ignore_engine(fd, engine))
run_test(fd, engine, flags & ~0xff);
}
}
@@ -122,17 +116,17 @@ static void run_test(int fd, unsigned engine, unsigned flags)
*/
if (has_semaphores(fd)) {
for_each_engine(fd, engine) {
- if (!ignore_engine(gen, engine))
+ if (!ignore_engine(fd, engine))
engines[nengine++] = engine;
}
} else {
igt_require(gem_has_ring(fd, 0));
- igt_require(can_mi_store_dword(gen, 0));
+ igt_require(gem_can_store_dword(fd, 0));
engines[nengine++] = 0;
}
} else {
igt_require(gem_has_ring(fd, engine));
- igt_require(can_mi_store_dword(gen, engine));
+ igt_require(gem_can_store_dword(fd, engine));
engines[nengine++] = engine;
}
igt_require(nengine);
@@ -238,11 +232,6 @@ static void run_test(int fd, unsigned engine, unsigned flags)
test_all(fd, flags);
}
-static bool can_store_dword_imm(int fd)
-{
- return intel_gen(intel_get_drm_devid(fd)) > 2;
-}
-
igt_main
{
const struct {
@@ -260,7 +249,7 @@ igt_main
igt_fixture {
fd = drm_open_driver_master(DRIVER_INTEL);
igt_require_gem(fd);
- igt_require(can_store_dword_imm(fd));
+ igt_require(gem_can_store_dword(fd, 0));
igt_fork_hang_detector(fd);
}
diff --git a/tests/gem_exec_whisper.c b/tests/gem_exec_whisper.c
index d8a2c693..e797a9c5 100644
--- a/tests/gem_exec_whisper.c
+++ b/tests/gem_exec_whisper.c
@@ -91,17 +91,12 @@ static int __gem_context_create(int fd, uint32_t *ctx_id)
return ret;
}
-static bool can_mi_store_dword(int gen, unsigned engine)
-{
- return gen > 2 && !(gen == 6 && (engine & ~(3<<13)) == I915_EXEC_BSD);
-}
-
-static bool ignore_engine(int gen, unsigned engine)
+static bool ignore_engine(int fd, unsigned engine)
{
if (engine == 0)
return true;
- if (!can_mi_store_dword(gen, engine))
+ if (!gem_can_store_dword(fd, engine))
return true;
return false;
@@ -223,12 +218,12 @@ static void whisper(int fd, unsigned engine, unsigned flags)
nengine = 0;
if (engine == -1) {
for_each_engine(fd, engine) {
- if (!ignore_engine(gen, engine))
+ if (!ignore_engine(fd, engine))
engines[nengine++] = engine;
}
} else {
igt_require(gem_has_ring(fd, engine));
- igt_require(can_mi_store_dword(gen, engine));
+ igt_require(gem_can_store_dword(fd, engine));
engines[nengine++] = engine;
}
igt_require(nengine);
@@ -534,11 +529,6 @@ out:
close(dir);
}
-static bool can_store_dword_imm(int fd)
-{
- return intel_gen(intel_get_drm_devid(fd)) > 2;
-}
-
igt_main
{
const struct mode {
@@ -570,7 +560,7 @@ igt_main
igt_fixture {
fd = drm_open_driver_master(DRIVER_INTEL);
igt_require_gem(fd);
- igt_require(can_store_dword_imm(fd));
+ igt_require(gem_can_store_dword(fd, 0));
print_welcome(fd);
igt_fork_hang_detector(fd);
diff --git a/tests/gem_ringfill.c b/tests/gem_ringfill.c
index b2419820..b52996a4 100644
--- a/tests/gem_ringfill.c
+++ b/tests/gem_ringfill.c
@@ -170,15 +170,13 @@ static int setup_execbuf(int fd,
static void run_test(int fd, unsigned ring, unsigned flags, unsigned timeout)
{
- const int gen = intel_gen(intel_get_drm_devid(fd));
struct drm_i915_gem_exec_object2 obj[2];
struct drm_i915_gem_relocation_entry reloc[1024];
struct drm_i915_gem_execbuffer2 execbuf;
igt_hang_t hang;
gem_require_ring(fd, ring);
- igt_skip_on_f(gen == 6 && (ring & ~(3<<13)) == I915_EXEC_BSD,
- "MI_STORE_DATA broken on gen6 bsd\n");
+ igt_require(gem_can_store_dword(fd, ring));
if (flags & (SUSPEND | HIBERNATE))
run_test(fd, ring, 0, 0);
@@ -238,11 +236,6 @@ static void run_test(int fd, unsigned ring, unsigned flags, unsigned timeout)
run_test(fd, ring, 0, 0);
}
-static bool can_store_dword_imm(int fd)
-{
- return intel_gen(intel_get_drm_devid(fd)) > 2;
-}
-
struct cork {
int device;
uint32_t handle;
@@ -358,7 +351,7 @@ igt_main
fd = drm_open_driver(DRIVER_INTEL);
igt_require_gem(fd);
- igt_require(can_store_dword_imm(fd));
+ igt_require(gem_can_store_dword(fd, 0));
gen = intel_gen(intel_get_drm_devid(fd));
if (gen > 3 && gen < 6) { /* ctg and ilk need secure batches */
igt_require(drmSetMaster(fd) == 0);
diff --git a/tests/gem_softpin.c b/tests/gem_softpin.c
index 1facd5b7..99388599 100644
--- a/tests/gem_softpin.c
+++ b/tests/gem_softpin.c
@@ -483,6 +483,7 @@ igt_main
fd = drm_open_driver_master(DRIVER_INTEL);
igt_require_gem(fd);
igt_require(gem_has_softpin(fd));
+ igt_require(gem_can_store_dword(fd, 0));
}
igt_subtest("invalid")
diff --git a/tests/gem_storedw_loop.c b/tests/gem_storedw_loop.c
index 09636520..8e57abe2 100644
--- a/tests/gem_storedw_loop.c
+++ b/tests/gem_storedw_loop.c
@@ -163,8 +163,7 @@ static void
check_test_requirements(int fd, int ringid)
{
gem_require_ring(fd, ringid);
- igt_skip_on_f(intel_gen(devid) == 6 && ringid == I915_EXEC_BSD,
- "MI_STORE_DATA broken on gen6 bsd\n");
+ igt_require(gem_can_store_dword(fd, ringid));
}
igt_main
diff --git a/tests/gem_sync.c b/tests/gem_sync.c
index a1abc67c..706462bc 100644
--- a/tests/gem_sync.c
+++ b/tests/gem_sync.c
@@ -75,11 +75,6 @@ out:
return ts.tv_sec + 1e-9*ts.tv_nsec;
}
-static bool can_mi_store_dword(int gen, unsigned engine)
-{
- return gen > 2 && !(gen == 6 && (engine & ~(3<<13)) == I915_EXEC_BSD);
-}
-
static void
sync_ring(int fd, unsigned ring, int num_children, int timeout)
{
@@ -171,7 +166,7 @@ store_ring(int fd, unsigned ring, int num_children, int timeout)
if (!gem_has_ring(fd, e->exec_id | e->flags))
continue;
- if (!can_mi_store_dword(gen, e->exec_id))
+ if (!gem_can_store_dword(fd, e->exec_id | e->flags))
continue;
if (e->exec_id == I915_EXEC_BSD) {
@@ -189,7 +184,7 @@ store_ring(int fd, unsigned ring, int num_children, int timeout)
num_children *= num_engines;
} else {
gem_require_ring(fd, ring);
- igt_require(can_mi_store_dword(gen, ring));
+ igt_require(gem_can_store_dword(fd, ring));
names[num_engines] = NULL;
engines[num_engines++] = ring;
}
@@ -454,7 +449,6 @@ __store_many(int fd, unsigned ring, int timeout, unsigned long *cycles)
static void
store_many(int fd, unsigned ring, int timeout)
{
- const int gen = intel_gen(intel_get_drm_devid(fd));
unsigned long *shared;
const char *names[16];
int n = 0;
@@ -474,7 +468,7 @@ store_many(int fd, unsigned ring, int timeout)
if (!gem_has_ring(fd, e->exec_id | e->flags))
continue;
- if (!can_mi_store_dword(gen, e->exec_id))
+ if (!gem_can_store_dword(fd, e->exec_id | e->flags))
continue;
if (e->exec_id == I915_EXEC_BSD) {
@@ -494,7 +488,7 @@ store_many(int fd, unsigned ring, int timeout)
igt_waitchildren();
} else {
gem_require_ring(fd, ring);
- igt_require(can_mi_store_dword(gen, ring));
+ igt_require(gem_can_store_dword(fd, ring));
__store_many(fd, ring, timeout, &shared[n]);
names[n++] = NULL;
}
@@ -585,7 +579,7 @@ store_all(int fd, int num_children, int timeout)
if (!gem_has_ring(fd, e->exec_id | e->flags))
continue;
- if (!can_mi_store_dword(gen, e->exec_id))
+ if (!gem_can_store_dword(fd, e->exec_id))
continue;
if (e->exec_id == I915_EXEC_BSD) {
diff --git a/tests/pm_rps.c b/tests/pm_rps.c
index 5a54d9d4..74d53710 100644
--- a/tests/pm_rps.c
+++ b/tests/pm_rps.c
@@ -690,6 +690,8 @@ igt_main
/* Use drm_open_driver to verify device existence */
drm_fd = drm_open_driver(DRIVER_INTEL);
+ igt_require_gem(drm_fd);
+ igt_require(gem_can_store_dword(drm_fd, 0));
do {
int val = -1;
diff --git a/tests/prime_busy.c b/tests/prime_busy.c
index f0c8740a..cbc91545 100644
--- a/tests/prime_busy.c
+++ b/tests/prime_busy.c
@@ -178,10 +178,9 @@ static void run_busy(int fd,
{
igt_fixture {
gem_require_ring(fd, e->exec_id | e->flags);
- igt_skip_on_f(intel_gen(intel_get_drm_devid(fd)) == 6 &&
- e->exec_id == I915_EXEC_BSD,
- "MI_STORE_DATA broken on gen6 bsd\n");
+ igt_require(gem_can_store_dword(fd, e->exec_id | e->flags));
gem_quiescent_gpu(fd);
+
if ((flags & HANG) == 0)
igt_fork_hang_detector(fd);
}
@@ -204,9 +203,8 @@ static void run_poll(int fd,
{
igt_fixture {
gem_require_ring(fd, e->exec_id | e->flags);
- igt_skip_on_f(intel_gen(intel_get_drm_devid(fd)) == 6 &&
- e->exec_id == I915_EXEC_BSD,
- "MI_STORE_DATA broken on gen6 bsd\n");
+ igt_require(gem_can_store_dword(fd, e->exec_id | e->flags));
+
gem_quiescent_gpu(fd);
if ((flags & HANG) == 0)
igt_fork_hang_detector(fd);
diff --git a/tests/prime_vgem.c b/tests/prime_vgem.c
index 44e5c65a..95557ef9 100644
--- a/tests/prime_vgem.c
+++ b/tests/prime_vgem.c
@@ -731,7 +731,6 @@ igt_main
const struct intel_execution_engine *e;
int i915 = -1;
int vgem = -1;
- int gen = 0;
igt_skip_on_simulation();
@@ -743,7 +742,6 @@ igt_main
igt_require_gem(i915);
igt_require(has_prime_import(i915));
gem_require_mmap_wc(i915);
- gen = intel_gen(intel_get_drm_devid(i915));
}
igt_subtest("basic-read")
@@ -760,9 +758,8 @@ igt_main
e->exec_id == 0 ? "basic-" : "",
e->name) {
gem_require_ring(i915, e->exec_id | e->flags);
- igt_skip_on_f(gen == 6 &&
- e->exec_id == I915_EXEC_BSD,
- "MI_STORE_DATA broken on gen6 bsd\n");
+ igt_require(gem_can_store_dword(i915, e->exec_id) | e->flags);
+
gem_quiescent_gpu(i915);
test_sync(i915, vgem, e->exec_id, e->flags);
}
@@ -773,9 +770,8 @@ igt_main
e->exec_id == 0 ? "basic-" : "",
e->name) {
gem_require_ring(i915, e->exec_id | e->flags);
- igt_skip_on_f(gen == 6 &&
- e->exec_id == I915_EXEC_BSD,
- "MI_STORE_DATA broken on gen6 bsd\n");
+ igt_require(gem_can_store_dword(i915, e->exec_id) | e->flags);
+
gem_quiescent_gpu(i915);
test_busy(i915, vgem, e->exec_id, e->flags);
}
@@ -786,9 +782,8 @@ igt_main
e->exec_id == 0 ? "basic-" : "",
e->name) {
gem_require_ring(i915, e->exec_id | e->flags);
- igt_skip_on_f(gen == 6 &&
- e->exec_id == I915_EXEC_BSD,
- "MI_STORE_DATA broken on gen6 bsd\n");
+ igt_require(gem_can_store_dword(i915, e->exec_id) | e->flags);
+
gem_quiescent_gpu(i915);
test_wait(i915, vgem, e->exec_id, e->flags);
}
@@ -810,9 +805,8 @@ igt_main
e->exec_id == 0 ? "basic-" : "",
e->name) {
gem_require_ring(i915, e->exec_id | e->flags);
- igt_skip_on_f(gen == 6 &&
- e->exec_id == I915_EXEC_BSD,
- "MI_STORE_DATA broken on gen6 bsd\n");
+ igt_require(gem_can_store_dword(i915, e->exec_id) | e->flags);
+
gem_quiescent_gpu(i915);
test_fence_wait(i915, vgem, e->exec_id, e->flags);
}