In some cases we observed that forcewake isn't kept after
resume and then RC6 residency is not constant.

References: HSD#1804921797
Cc: Arkadiusz Hiler <arkadiusz.hi...@intel.com>
Cc: Michal Winiarski <michal.winiar...@intel.com>
Cc: Lukasz Fiedorowicz <lukasz.fiedorow...@intel.com>
Signed-off-by: Ewelina Musial <ewelina.mus...@intel.com>
---
 tests/pm_rc6_residency.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 53 insertions(+)

diff --git a/tests/pm_rc6_residency.c b/tests/pm_rc6_residency.c
index bdb9747..4e61326 100644
--- a/tests/pm_rc6_residency.c
+++ b/tests/pm_rc6_residency.c
@@ -165,6 +165,44 @@ static void measure_residencies(int devid, unsigned int 
rc6_mask,
        res->rc6 += res->rc6p;
 }
 
+enum sleep_state { NOSLEEP, SUSPEND, HIBERNATE };
+static void test_rc6_forcewake(enum sleep_state sleep_state)
+{
+       int fd, fw_fd;
+       unsigned long residency_pre, residency_post;
+
+       fd = drm_open_driver(DRIVER_INTEL);
+       igt_assert_lte(0, fd);
+
+       fw_fd = igt_open_forcewake_handle(fd);
+       igt_assert_lte(0, fw_fd);
+
+       switch (sleep_state) {
+               case NOSLEEP:
+                       break;
+               case SUSPEND:
+                       igt_system_suspend_autoresume(SUSPEND_STATE_MEM,
+                                                     SUSPEND_TEST_NONE);
+                       break;
+               case HIBERNATE:
+                       igt_system_suspend_autoresume(SUSPEND_STATE_DISK,
+                                                     SUSPEND_TEST_NONE);
+                       break;
+       }
+
+       sleep(1); // time to fully resume
+
+       // forcewake should keep residency constant after resume
+       residency_pre = read_rc6_residency("rc6");
+       sleep(SLEEP_DURATION);
+       residency_post = read_rc6_residency("rc6");
+
+       igt_assert_eq(residency_pre, residency_post);
+
+       close(fw_fd);
+       close(fd);
+}
+
 igt_main
 {
        unsigned int rc6_mask;
@@ -209,4 +247,19 @@ igt_main
 
                residency_accuracy(res.rc6pp, res.duration, "rc6pp");
        }
+       igt_subtest("rc6-forcewake") {
+               igt_skip_on(!(rc6_mask & RC6_ENABLED));
+
+               test_rc6_forcewake(NOSLEEP);
+       }
+       igt_subtest("rc6-forcewake-suspend") {
+               igt_skip_on(!(rc6_mask & RC6_ENABLED));
+
+               test_rc6_forcewake(SUSPEND);
+       }
+       igt_subtest("rc6-forcewake-hibernate") {
+               igt_skip_on(!(rc6_mask & RC6_ENABLED));
+
+               test_rc6_forcewake(HIBERNATE);
+       }
 }
-- 
2.9.3

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

Reply via email to