All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
To: igt-dev@lists.freedesktop.org
Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
Subject: [igt-dev] [CI 2/2] tests/kms_psr_sink_crc: Test PSR source HW status.
Date: Tue,  3 Jul 2018 16:29:42 -0700	[thread overview]
Message-ID: <20180703232942.12864-2-dhinakaran.pandiyan@intel.com> (raw)
In-Reply-To: <20180703232942.12864-1-dhinakaran.pandiyan@intel.com>

We make use of the status MMIO to tell whether the HW entered and
exited.

Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
---
 tests/kms_psr_sink_crc.c | 58 +++++++++++++++++++++++++++---------------------
 1 file changed, 33 insertions(+), 25 deletions(-)

diff --git a/tests/kms_psr_sink_crc.c b/tests/kms_psr_sink_crc.c
index d36be7dd..00486f03 100644
--- a/tests/kms_psr_sink_crc.c
+++ b/tests/kms_psr_sink_crc.c
@@ -189,31 +189,37 @@ static bool sink_support(data_t *data)
 {
 	char buf[512];
 
-	igt_debugfs_read(data->drm_fd, "i915_edp_psr_status", buf);
+	igt_debugfs_read(data->drm_fd, "i915_edp_psr_source_status", buf);
 
 	return data->with_psr_disabled ||
 		strstr(buf, "Sink_Support: yes\n");
 }
 
-static bool psr_enabled(data_t *data)
+static bool psr_hw_enabled(int fd, char *buf, size_t size)
 {
-	char buf[512];
+	__igt_debugfs_read(fd, "i915_edp_psr_source_status", buf, size);
+	return strstr(buf, "HW Enabled & Active bit: yes\n");
+}
 
-	igt_debugfs_read(data->drm_fd, "i915_edp_psr_status", buf);
+static bool psr_hw_status(int fd, bool active, char *buf, size_t size)
+{
+	__igt_debugfs_read(fd, "i915_edp_psr_source_status", buf, size);
 
-	return data->with_psr_disabled ||
-		strstr(buf, "HW Enabled & Active bit: yes\n");
+	/* TODO: Update the checks for PSR2 */
+	return strstr(buf, "Source PSR status:") &&
+	       (active ? !!strstr(buf, "SRDENT") : !strstr(buf, "SRDENT"));
 }
 
-static bool wait_psr_entry(data_t *data)
+static void assert_psr_entry(data_t *data)
 {
-	int timeout = 5;
-	while (timeout--) {
-		if (psr_enabled(data))
-			return true;
-		sleep(1);
-	}
-	return false;
+	char buf[512];
+
+	if (data->with_psr_disabled)
+		return;
+
+	igt_assert_f(psr_hw_enabled(data->drm_fd, buf, sizeof(buf)), "%s\n", buf);
+	igt_assert_f(igt_wait(psr_hw_status(data->drm_fd, true, buf, sizeof(buf)), 500, 1),
+		     "%s\n", buf);
 }
 
 static inline void manual(const char *expected)
@@ -236,25 +242,26 @@ static void run_test(data_t *data)
 	igt_plane_t *test_plane = data->test_plane;
 	void *ptr;
 	const char *expected = "";
+	char buf[512];
 
 	/* Confirm that screen became Green */
 	manual("screen GREEN");
 
 	/* Confirm screen stays Green after PSR got active */
-	igt_assert(wait_psr_entry(data));
+	assert_psr_entry(data);
 	manual("screen GREEN");
 
 	/* Setting a secondary fb/plane */
 	igt_plane_set_fb(test_plane, &data->fb_white);
 	igt_display_commit(&data->display);
+	igt_assert_f(psr_hw_status(data->drm_fd, false, buf, sizeof(buf)), "%s", buf);
 
-	/* Confirm it is not Green anymore */
-	igt_assert(wait_psr_entry(data));
 	if (test_plane->type == DRM_PLANE_TYPE_PRIMARY)
 		manual("screen WHITE");
 	else
 		manual("GREEN background with WHITE box");
 
+	assert_psr_entry(data);
 	switch (data->op) {
 	case PAGE_FLIP:
 		/* Only in use when testing primary plane */
@@ -303,6 +310,7 @@ static void run_test(data_t *data)
 		expected = "screen GREEN";
 		break;
 	}
+	igt_assert_f(psr_hw_status(data->drm_fd, false, buf, sizeof(buf)), "%s", buf);
 	manual(expected);
 }
 
@@ -436,13 +444,13 @@ int main(int argc, char *argv[])
 
 	igt_subtest("basic") {
 		setup_test_plane(&data, DRM_PLANE_TYPE_PRIMARY);
-		igt_assert(wait_psr_entry(&data));
+		assert_psr_entry(&data);
 		test_cleanup(&data);
 	}
 
 	igt_subtest("no_drrs") {
 		setup_test_plane(&data, DRM_PLANE_TYPE_PRIMARY);
-		igt_assert(wait_psr_entry(&data));
+		assert_psr_entry(&data);
 		igt_assert(drrs_disabled(&data));
 		test_cleanup(&data);
 	}
@@ -451,7 +459,7 @@ int main(int argc, char *argv[])
 		igt_subtest_f("primary_%s", op_str(op)) {
 			data.op = op;
 			setup_test_plane(&data, DRM_PLANE_TYPE_PRIMARY);
-			igt_assert(wait_psr_entry(&data));
+			assert_psr_entry(&data);
 			run_test(&data);
 			test_cleanup(&data);
 		}
@@ -461,7 +469,7 @@ int main(int argc, char *argv[])
 		igt_subtest_f("sprite_%s", op_str(op)) {
 			data.op = op;
 			setup_test_plane(&data, DRM_PLANE_TYPE_OVERLAY);
-			igt_assert(wait_psr_entry(&data));
+			assert_psr_entry(&data);
 			run_test(&data);
 			test_cleanup(&data);
 		}
@@ -471,7 +479,7 @@ int main(int argc, char *argv[])
 		igt_subtest_f("cursor_%s", op_str(op)) {
 			data.op = op;
 			setup_test_plane(&data, DRM_PLANE_TYPE_CURSOR);
-			igt_assert(wait_psr_entry(&data));
+			assert_psr_entry(&data);
 			run_test(&data);
 			test_cleanup(&data);
 		}
@@ -480,7 +488,7 @@ int main(int argc, char *argv[])
 	igt_subtest_f("dpms") {
 		data.op = RENDER;
 		setup_test_plane(&data, DRM_PLANE_TYPE_PRIMARY);
-		igt_assert(wait_psr_entry(&data));
+		assert_psr_entry(&data);
 		dpms_off_on(&data);
 		run_test(&data);
 		test_cleanup(&data);
@@ -489,10 +497,10 @@ int main(int argc, char *argv[])
 	igt_subtest_f("suspend") {
 		data.op = PLANE_ONOFF;
 		setup_test_plane(&data, DRM_PLANE_TYPE_CURSOR);
-		igt_assert(wait_psr_entry(&data));
+		assert_psr_entry(&data);
 		igt_system_suspend_autoresume(SUSPEND_STATE_MEM,
 					      SUSPEND_TEST_NONE);
-		igt_assert(wait_psr_entry(&data));
+		assert_psr_entry(&data);
 		run_test(&data);
 		test_cleanup(&data);
 	}
-- 
2.14.1

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

  reply	other threads:[~2018-07-03 23:29 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-07-03 23:29 [igt-dev] [CI 1/2] tests/kms_psr_sink_crc: Do not test sink crc Dhinakaran Pandiyan
2018-07-03 23:29 ` Dhinakaran Pandiyan [this message]
2018-07-04  0:29   ` [igt-dev] [CI v2 2/2] tests/kms_psr_sink_crc: Test PSR source HW status Dhinakaran Pandiyan
2018-07-04  0:05 ` [igt-dev] ✓ Fi.CI.BAT: success for series starting with [CI,1/2] tests/kms_psr_sink_crc: Do not test sink crc Patchwork
2018-07-04  0:54 ` [igt-dev] ✓ Fi.CI.BAT: success for series starting with [CI,1/2] tests/kms_psr_sink_crc: Do not test sink crc (rev2) Patchwork
2018-07-04  5:23 ` [igt-dev] ✓ Fi.CI.IGT: success for series starting with [CI,1/2] tests/kms_psr_sink_crc: Do not test sink crc Patchwork
2018-07-04  5:52 ` [igt-dev] ✓ Fi.CI.IGT: success for series starting with [CI,1/2] tests/kms_psr_sink_crc: Do not test sink crc (rev2) Patchwork

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180703232942.12864-2-dhinakaran.pandiyan@intel.com \
    --to=dhinakaran.pandiyan@intel.com \
    --cc=igt-dev@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.