This wakeup time is now set from VBT and sometimes it can be bigger than
10 seconds we used here.
So let's use at least 2 seconds plus VBT. We grab this info from debugfs.

Also since this timeout can be bigger, in manual mode we warn tester we
are waiting.

Signed-off-by: Rodrigo Vivi <rodrigo.v...@intel.com>
---
 tests/kms_psr_sink_crc.c | 26 ++++++++++++++++++++++----
 1 file changed, 22 insertions(+), 4 deletions(-)

diff --git a/tests/kms_psr_sink_crc.c b/tests/kms_psr_sink_crc.c
index 553a1f8..285600f 100644
--- a/tests/kms_psr_sink_crc.c
+++ b/tests/kms_psr_sink_crc.c
@@ -84,6 +84,7 @@ typedef struct {
        struct igt_fb fb_green, fb_white;
        igt_plane_t *primary, *sprite, *cursor;
        int mod_size;
+       int psr_wakeup_time;
 } data_t;
 
 static void create_cursor_fb(data_t *data)
@@ -195,8 +196,19 @@ static bool psr_enabled(data_t *data)
        ret = fscanf(file, "Enabled: %s\n", str);
        igt_assert(ret != 0);
 
+       /* This function will return if psr is enabled, however we can reuse
+        * it to read and set wakeup_time */
+       ret = strcmp(str, "yes") == 0;
+
+       fscanf(file, "Active: %s\n", str);
+       fscanf(file, "Busy frontbuffer bits: %s\n", str);
+       fscanf(file, "Re-enable work scheduled: %s\n", str);
+       fscanf(file, "HW Enabled & Active bit: %s\n", str);
+       fscanf(file, "Link standby: %s\n", str);
+       fscanf(file, "Wakeup time: %d\n", &data->psr_wakeup_time);
+
        fclose(file);
-       return strcmp(str, "yes") == 0;
+       return ret;
 }
 
 static bool psr_active(data_t *data)
@@ -230,8 +242,14 @@ static bool psr_active(data_t *data)
        return strcmp(str, "yes") == 0;
 }
 
-static bool wait_psr_entry(data_t *data, int timeout)
+static bool wait_psr_entry(data_t *data)
 {
+       int timeout = 2 + data->psr_wakeup_time;
+
+       if (igt_interactive_debug)
+               igt_info("Waiting up to %d seconds for PSR to get active...\n",
+                        timeout);
+
        while (timeout--) {
                if (psr_active(data))
                        return true;
@@ -336,7 +354,7 @@ static void test_crc(data_t *data)
        assert_or_manual(is_green(ref_crc), "screen GREEN");
 
        /* Confirm screen stays Green after PSR got active */
-       igt_assert(wait_psr_entry(data, 10));
+       igt_assert(wait_psr_entry(data));
        get_sink_crc(data, ref_crc);
        assert_or_manual(is_green(ref_crc), "screen GREEN");
 
@@ -350,7 +368,7 @@ static void test_crc(data_t *data)
        igt_display_commit(&data->display);
 
        /* Confirm it is not Green anymore */
-       igt_assert(wait_psr_entry(data, 10));
+       igt_assert(wait_psr_entry(data));
        get_sink_crc(data, ref_crc);
        if (data->test_plane == PRIMARY)
                assert_or_manual(!is_green(ref_crc), "screen WHITE");
-- 
2.1.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to