From ff3c12209893ee8ee0e757d6cf10276596ef0338 Mon Sep 17 00:00:00 2001 From: Daniel Vetter Date: Thu, 22 May 2014 17:29:48 +0200 Subject: tests/kms_pipe_crc_basic: Add gpu hang tests Currently pipe CRC support is broken after gpu hangs. This tests for this bug. Signed-off-by: Daniel Vetter --- tests/kms_pipe_crc_basic.c | 60 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 58 insertions(+), 2 deletions(-) (limited to 'tests/kms_pipe_crc_basic.c') diff --git a/tests/kms_pipe_crc_basic.c b/tests/kms_pipe_crc_basic.c index eedb3f39..9eec4e6f 100644 --- a/tests/kms_pipe_crc_basic.c +++ b/tests/kms_pipe_crc_basic.c @@ -31,6 +31,7 @@ #include "igt_debugfs.h" #include "igt_kms.h" #include "igt_aux.h" +#include "ioctl_wrappers.h" typedef struct { int drm_fd; @@ -38,6 +39,55 @@ typedef struct { struct igt_fb fb; } data_t; +static uint64_t submit_batch(int fd, unsigned ring_id) +{ + const uint32_t batch[] = { MI_NOOP, + MI_BATCH_BUFFER_END }; + struct drm_i915_gem_execbuffer2 execbuf; + struct drm_i915_gem_exec_object2 exec; + uint64_t presumed_offset; + + gem_require_ring(fd, ring_id); + + exec.handle = gem_create(fd, 4096); + gem_write(fd, exec.handle, 0, batch, sizeof(batch)); + exec.relocation_count = 0; + exec.relocs_ptr = 0; + exec.alignment = 0; + exec.offset = 0; + exec.flags = 0; + exec.rsvd1 = 0; + exec.rsvd2 = 0; + + execbuf.buffers_ptr = (uintptr_t)&exec; + execbuf.buffer_count = 1; + execbuf.batch_start_offset = 0; + execbuf.batch_len = sizeof(batch); + execbuf.cliprects_ptr = 0; + execbuf.num_cliprects = 0; + execbuf.DR1 = 0; + execbuf.DR4 = 0; + execbuf.flags = ring_id; + i915_execbuffer2_set_context_id(execbuf, 0); + execbuf.rsvd2 = 0; + + gem_execbuf(fd, &execbuf); + gem_sync(fd, exec.handle); + presumed_offset = exec.offset; + + igt_set_stop_rings(igt_to_stop_ring_flag(ring_id)); + + gem_execbuf(fd, &execbuf); + gem_sync(fd, exec.handle); + + igt_assert(igt_get_stop_rings() == STOP_RING_NONE); + igt_assert(presumed_offset == exec.offset); + + gem_close(fd, exec.handle); + + return exec.offset; +} + static void test_bad_command(data_t *data, const char *cmd) { FILE *ctl; @@ -127,10 +177,10 @@ static void test_read_crc(data_t *data, int pipe, unsigned flags) } +data_t data = {0, }; + igt_main { - data_t data = {0, }; - igt_skip_on_simulation(); igt_fixture { @@ -167,6 +217,12 @@ igt_main test_read_crc(&data, i, 0); } + + igt_subtest_f("hang-read-crc-pipe-%c", 'A'+i) { + submit_batch(data.drm_fd, I915_EXEC_RENDER); + + test_read_crc(&data, i, 0); + } } igt_fixture { -- cgit v1.2.3