From da0b6abeb74acb0309d9906774cd928c59a992e9 Mon Sep 17 00:00:00 2001 From: Maarten Lankhorst Date: Mon, 23 Jan 2017 16:37:01 +0100 Subject: 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 --- tests/kms_cursor_legacy.c | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) (limited to 'tests/kms_cursor_legacy.c') diff --git a/tests/kms_cursor_legacy.c b/tests/kms_cursor_legacy.c index 5e9f5f39..707546cd 100644 --- a/tests/kms_cursor_legacy.c +++ b/tests/kms_cursor_legacy.c @@ -283,6 +283,21 @@ static bool cursor_slowpath(enum flip_test mode) 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 @@ static void basic_flip_cursor(igt_display_t *display, 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 @@ static void flip_vs_cursor(igt_display_t *display, enum flip_test mode, int nloo 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--); -- cgit v1.2.3