summaryrefslogtreecommitdiff
path: root/tests/kms_rotation_crc.c
diff options
context:
space:
mode:
authorMaarten Lankhorst <maarten.lankhorst@linux.intel.com>2017-01-05 14:13:34 +0100
committerMaarten Lankhorst <maarten.lankhorst@linux.intel.com>2017-01-05 14:21:48 +0100
commiteeffa25c0c464dddf49891c3bf8049c9e4ba5555 (patch)
treeab91619f3a179bb60aca3fe0784e4f7ead06aae8 /tests/kms_rotation_crc.c
parentbf511f3f7ebfec1cd19e94c6f463d96f420432b4 (diff)
kms_rotation_crc: Stop looking at output->valid
Use the proper iterator macros to prevent ever having an invalid config. For the record, this test seemed to have bitrotten and doesn't currently pass. This might have happened when fixing atomic commit support, but it definitely needs some love. Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Diffstat (limited to 'tests/kms_rotation_crc.c')
-rw-r--r--tests/kms_rotation_crc.c180
1 files changed, 108 insertions, 72 deletions
diff --git a/tests/kms_rotation_crc.c b/tests/kms_rotation_crc.c
index 796b4486..cb0ac1eb 100644
--- a/tests/kms_rotation_crc.c
+++ b/tests/kms_rotation_crc.c
@@ -99,6 +99,7 @@ static void commit_crtc(data_t *data, igt_output_t *output, igt_plane_t *plane)
primary = igt_output_get_plane(output, IGT_PLANE_PRIMARY);
igt_plane_set_fb(primary, &data->fb_modeset);
+ primary->rotation_changed = false;
igt_display_commit(display);
igt_plane_set_fb(plane, &data->fb);
@@ -255,72 +256,72 @@ static void test_plane_rotation(data_t *data, enum igt_plane plane_type)
if (data->display.is_atomic)
commit = COMMIT_ATOMIC;
- for_each_connected_output(display, output) {
- for_each_pipe(display, pipe) {
- igt_plane_t *plane;
+ for_each_pipe_with_valid_output(display, pipe, output) {
+ igt_plane_t *plane;
- igt_output_set_pipe(output, pipe);
+ igt_output_set_pipe(output, pipe);
- plane = igt_output_get_plane(output, plane_type);
- igt_require(igt_plane_supports_rotation(plane));
-
- prepare_crtc(data, output, pipe, plane);
-
- igt_display_commit2(display, commit);
-
- /* collect unrotated CRC */
- igt_pipe_crc_collect_crc(data->pipe_crc, &crc_unrotated);
-
- igt_plane_set_rotation(plane, data->rotation);
- ret = igt_display_try_commit2(display, commit);
- if (data->override_fmt || data->override_tiling) {
- igt_assert_eq(ret, -EINVAL);
- } else {
- igt_assert_eq(ret, 0);
- igt_pipe_crc_collect_crc(data->pipe_crc,
- &crc_output);
- igt_assert_crc_equal(&data->ref_crc,
- &crc_output);
- }
-
- flip_count = data->flip_stress;
- while (flip_count--) {
- ret = drmModePageFlip(data->gfx_fd,
- output->config.crtc->crtc_id,
- data->fb_flip.fb_id,
- DRM_MODE_PAGE_FLIP_EVENT,
- NULL);
- igt_assert(ret == 0);
- wait_for_pageflip(data->gfx_fd);
- ret = drmModePageFlip(data->gfx_fd,
- output->config.crtc->crtc_id,
- data->fb.fb_id,
- DRM_MODE_PAGE_FLIP_EVENT,
- NULL);
- igt_assert(ret == 0);
- wait_for_pageflip(data->gfx_fd);
- }
-
- /*
- * check the rotation state has been reset when the VT
- * mode is restored
- */
- kmstest_restore_vt_mode();
- kmstest_set_vt_graphics_mode();
-
- commit_crtc(data, output, plane);
-
- igt_pipe_crc_collect_crc(data->pipe_crc, &crc_output);
- igt_assert_crc_equal(&crc_unrotated, &crc_output);
+ plane = igt_output_get_plane(output, plane_type);
+ igt_require(igt_plane_supports_rotation(plane));
- valid_tests++;
- cleanup_crtc(data, output, plane);
+ prepare_crtc(data, output, pipe, plane);
+
+ igt_display_commit2(display, commit);
+
+ /* collect unrotated CRC */
+ igt_pipe_crc_collect_crc(data->pipe_crc, &crc_unrotated);
+
+ igt_plane_set_rotation(plane, data->rotation);
+ ret = igt_display_try_commit2(display, commit);
+ if (data->override_fmt || data->override_tiling) {
+ igt_assert_eq(ret, -EINVAL);
+ } else {
+ igt_assert_eq(ret, 0);
+ igt_pipe_crc_collect_crc(data->pipe_crc,
+ &crc_output);
+ igt_assert_crc_equal(&data->ref_crc,
+ &crc_output);
+ }
+
+ flip_count = data->flip_stress;
+ while (flip_count--) {
+ ret = drmModePageFlip(data->gfx_fd,
+ output->config.crtc->crtc_id,
+ data->fb_flip.fb_id,
+ DRM_MODE_PAGE_FLIP_EVENT,
+ NULL);
+ igt_assert_eq(ret, 0);
+ wait_for_pageflip(data->gfx_fd);
+ ret = drmModePageFlip(data->gfx_fd,
+ output->config.crtc->crtc_id,
+ data->fb.fb_id,
+ DRM_MODE_PAGE_FLIP_EVENT,
+ NULL);
+ igt_assert_eq(ret, 0);
+ wait_for_pageflip(data->gfx_fd);
}
+
+ /*
+ * check the rotation state has been reset when the VT
+ * mode is restored
+ */
+ kmstest_restore_vt_mode();
+ kmstest_set_vt_graphics_mode();
+
+ commit_crtc(data, output, plane);
+
+ igt_pipe_crc_collect_crc(data->pipe_crc, &crc_output);
+ igt_assert_crc_equal(&crc_unrotated, &crc_output);
+
+ valid_tests++;
+ cleanup_crtc(data, output, plane);
}
igt_require_f(valid_tests, "no valid crtc/connector combinations found\n");
}
-static void test_plane_rotation_ytiled_obj(data_t *data, enum igt_plane plane_type)
+static void test_plane_rotation_ytiled_obj(data_t *data,
+ igt_output_t *output,
+ enum igt_plane plane_type)
{
igt_display_t *display = &data->display;
uint64_t tiling = LOCAL_I915_FORMAT_MOD_Y_TILED;
@@ -328,15 +329,12 @@ static void test_plane_rotation_ytiled_obj(data_t *data, enum igt_plane plane_ty
int bpp = igt_drm_format_to_bpp(format);
enum igt_commit_style commit = COMMIT_LEGACY;
int fd = data->gfx_fd;
- igt_output_t *output = &display->outputs[0];
igt_plane_t *plane;
drmModeModeInfo *mode;
unsigned int stride, size, w, h;
uint32_t gem_handle;
int ret;
- igt_require(output != NULL && output->valid == true);
-
plane = igt_output_get_plane(output, plane_type);
igt_require(igt_plane_supports_rotation(plane));
@@ -360,7 +358,7 @@ static void test_plane_rotation_ytiled_obj(data_t *data, enum igt_plane plane_ty
gem_handle = gem_create(fd, size);
ret = __gem_set_tiling(fd, gem_handle, I915_TILING_Y, stride);
- igt_assert(ret == 0);
+ igt_assert_eq(ret, 0);
do_or_die(__kms_addfb(fd, gem_handle, w, h, stride,
format, tiling, LOCAL_DRM_MODE_FB_MODIFIERS,
@@ -381,12 +379,16 @@ static void test_plane_rotation_ytiled_obj(data_t *data, enum igt_plane plane_ty
plane->rotation);
ret = igt_display_try_commit2(display, commit);
+ igt_output_set_pipe(output, PIPE_NONE);
+
kmstest_restore_vt_mode();
igt_remove_fb(fd, &data->fb);
- igt_assert(ret == 0);
+ igt_assert_eq(ret, 0);
}
-static void test_plane_rotation_exhaust_fences(data_t *data, enum igt_plane plane_type)
+static void test_plane_rotation_exhaust_fences(data_t *data,
+ igt_output_t *output,
+ enum igt_plane plane_type)
{
igt_display_t *display = &data->display;
uint64_t tiling = LOCAL_I915_FORMAT_MOD_Y_TILED;
@@ -394,7 +396,6 @@ static void test_plane_rotation_exhaust_fences(data_t *data, enum igt_plane plan
int bpp = igt_drm_format_to_bpp(format);
enum igt_commit_style commit = COMMIT_LEGACY;
int fd = data->gfx_fd;
- igt_output_t *output = &display->outputs[0];
igt_plane_t *plane;
drmModeModeInfo *mode;
data_t data2[MAX_FENCES+1] = {};
@@ -403,8 +404,6 @@ static void test_plane_rotation_exhaust_fences(data_t *data, enum igt_plane plan
uint64_t total_aperture_size, total_fbs_size;
int i, ret;
- igt_require(output != NULL && output->valid == true);
-
plane = igt_output_get_plane(output, plane_type);
igt_require(igt_plane_supports_rotation(plane));
@@ -472,9 +471,9 @@ static void test_plane_rotation_exhaust_fences(data_t *data, enum igt_plane plan
DRM_MODE_OBJECT_PLANE,
plane->rotation_property,
plane->rotation);
- ret = igt_display_try_commit2(display, commit);
+ igt_display_commit2(display, commit);
if (ret) {
- igt_warn("failed to commit hardware rotated fb\n");
+ igt_warn("failed to commit hardware rotated fb: %i\n", ret);
goto err_commit;
}
}
@@ -485,11 +484,20 @@ err_alloc:
i--;
err_commit:
+ igt_plane_set_fb(plane, NULL);
+ igt_plane_set_rotation(plane, IGT_ROTATION_0);
+
+ if (commit < COMMIT_ATOMIC)
+ igt_display_commit2(display, commit);
+
+ igt_output_set_pipe(output, PIPE_NONE);
+ igt_display_commit2(display, display->is_atomic ? COMMIT_ATOMIC : COMMIT_LEGACY);
+
for (; i >= 0; i--)
igt_remove_fb(fd, &data2[i].fb);
kmstest_restore_vt_mode();
- igt_assert(ret == 0);
+ igt_assert_eq(ret, 0);
}
igt_main
@@ -582,14 +590,42 @@ igt_main
}
igt_subtest_f("primary-rotation-90-Y-tiled") {
+ enum pipe pipe;
+ igt_output_t *output;
+ int valid_tests = 0;
+
igt_require(gen >= 9);
data.rotation = IGT_ROTATION_90;
- test_plane_rotation_ytiled_obj(&data, IGT_PLANE_PRIMARY);
+
+ for_each_pipe_with_valid_output(&data.display, pipe, output) {
+ igt_output_set_pipe(output, pipe);
+
+ test_plane_rotation_ytiled_obj(&data, output, IGT_PLANE_PRIMARY);
+
+ valid_tests++;
+ break;
+ }
+
+ igt_require_f(valid_tests, "no valid crtc/connector combinations found\n");
}
igt_subtest_f("exhaust-fences") {
+ enum pipe pipe;
+ igt_output_t *output;
+ int valid_tests = 0;
+
igt_require(gen >= 9);
- test_plane_rotation_exhaust_fences(&data, IGT_PLANE_PRIMARY);
+
+ for_each_pipe_with_valid_output(&data.display, pipe, output) {
+ igt_output_set_pipe(output, pipe);
+
+ test_plane_rotation_exhaust_fences(&data, output, IGT_PLANE_PRIMARY);
+
+ valid_tests++;
+ break;
+ }
+
+ igt_require_f(valid_tests, "no valid crtc/connector combinations found\n");
}
igt_fixture {