kms_cursor_legacy: Allow for an extra vblank wait in atomic-transitions tests
This is required for ILK style watermark programming, which currently
inserts an extra vblank wait. This allows the tests to pass on those
platforms.
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
diff --git a/tests/kms_cursor_legacy.c b/tests/kms_cursor_legacy.c
index 5e9f5f3..707546c 100644
--- a/tests/kms_cursor_legacy.c
+++ b/tests/kms_cursor_legacy.c
@@ -283,6 +283,21 @@
return true;
}
+/*
+ * On platforms with two-stage watermark programming
+ * changing sprite visibility may require a extra vblank wait.
+ *
+ * Handle this here.
+ */
+static bool mode_requires_extra_vblank(enum flip_test mode)
+{
+ if (mode == flip_test_atomic_transitions ||
+ mode == flip_test_atomic_transitions_varying_size)
+ return true;
+
+ return false;
+}
+
static void transition_nonblocking(igt_display_t *display, enum pipe pipe,
struct igt_fb *prim_fb, struct igt_fb *argb_fb,
bool hide_sprite)
@@ -647,7 +662,12 @@
igt_set_timeout(1, "Stuck page flip");
igt_ignore_warn(read(display->drm_fd, &vbl, sizeof(vbl)));
- igt_assert_eq(get_vblank(display->drm_fd, pipe, 0), vblank_start + 1);
+
+ if (!mode_requires_extra_vblank(mode))
+ igt_assert_eq(get_vblank(display->drm_fd, pipe, 0), vblank_start + 1);
+ else
+ igt_assert_lte(get_vblank(display->drm_fd, pipe, 0), vblank_start + 2);
+
igt_reset_timeout();
do_cleanup_display(display);
@@ -784,7 +804,12 @@
igt_set_timeout(1, "Stuck page flip");
igt_ignore_warn(read(display->drm_fd, &vbl, sizeof(vbl)));
- igt_assert_eq(get_vblank(display->drm_fd, pipe, 0), vblank_start + 1);
+
+ if (!mode_requires_extra_vblank(mode))
+ igt_assert_eq(get_vblank(display->drm_fd, pipe, 0), vblank_start + 1);
+ else
+ igt_assert_lte(get_vblank(display->drm_fd, pipe, 0), vblank_start + 2);
+
igt_reset_timeout();
} while (nloops--);