From: Jyoti Yadav <jyoti.r.ya...@intel.com>

Added new subtest for DC5 entry during DPMS on/off cycle.
During DPMS on/off cycle DC5 counter is incremented.

v2: Rename the subtest with meaningful name.
v3: Rebased.
v4: Addressed review comments by removing leftover code
    cleanup().
v5: Addressed the review comment by removing redundant
    read_dc_counter() suggested by Imre.
    Listing actual change in patch set changelog to make review easier.
v6: Three way patch applied, no functional change.
v7: Disabling runtime suspend for the platfrom which support, DC9.
    rebased due to test name pm_dc changed to i915_pm_dc, aligning to
    other PM tests.
v8: Introduced setup_dc_dpms() in order to disable runtime pm, restoring
    POWER_DIR values to its original and enabling runtime pm  for other
    followed sub-tests.

Signed-off-by: Jyoti Yadav <jyoti.r.ya...@intel.com>
Signed-off-by: Anshuman Gupta <anshuman.gu...@intel.com>
---
 tests/i915/i915_pm_dc.c | 52 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 52 insertions(+)

diff --git a/tests/i915/i915_pm_dc.c b/tests/i915/i915_pm_dc.c
index 66e3e8f..1b14262 100644
--- a/tests/i915/i915_pm_dc.c
+++ b/tests/i915/i915_pm_dc.c
@@ -46,6 +46,7 @@ typedef struct {
        enum psr_mode op_psr_mode;
        drmModeModeInfo *mode;
        igt_output_t *output;
+       bool runtime_suspend_disabled;
 } data_t;
 
 bool dc_state_wait_entry(int drm_fd, int dc_flag, int prev_dc_count);
@@ -172,6 +173,52 @@ static void test_dc_state_psr(data_t *data, int dc_flag)
        cleanup(data);
 }
 
+static void setup_dc_dpms(data_t *data)
+{
+       if (IS_BROXTON(data->devid) || IS_GEMINILAKE(data->devid) || 
IS_ICELAKE(data->devid)) {
+               data->runtime_suspend_disabled = igt_disable_runtime_pm();
+               igt_require_f(data->runtime_suspend_disabled,
+                             "unable to disable runtime pm for i915\n");
+       } else {
+               data->runtime_suspend_disabled = false;
+       }
+}
+
+static void dpms_off_on(data_t *data)
+{
+       for (int i = 0; i < data->display.n_outputs; i++) {
+               kmstest_set_connector_dpms(data->drm_fd, 
data->display.outputs[i].config.connector,
+                                          DRM_MODE_DPMS_OFF);
+       }
+
+       if (!data->runtime_suspend_disabled)
+               
igt_assert(igt_wait_for_pm_status(IGT_RUNTIME_PM_STATUS_SUSPENDED));
+
+       for (int i = 0; i < data->display.n_outputs; i++) {
+               kmstest_set_connector_dpms(data->drm_fd, 
data->display.outputs[i].config.connector,
+                                  DRM_MODE_DPMS_ON);
+       }
+
+       if (!data->runtime_suspend_disabled)
+               
igt_assert(igt_wait_for_pm_status(IGT_RUNTIME_PM_STATUS_ACTIVE));
+}
+
+static void test_dc_state_dpms(data_t *data, int dc_flag)
+{
+       uint32_t dc_counter;
+
+       dc_counter = read_dc_counter(data->drm_fd, dc_flag);
+       dpms_off_on(data);
+       check_dc_counter(data->drm_fd, dc_flag, dc_counter);
+
+       /* if runtime PM is disabled for i915 restore it,
+        * so any other sub-test can use runtime-PM. */
+       if (data->runtime_suspend_disabled) {
+               igt_restore_runtime_pm();
+               igt_setup_runtime_pm();
+       }
+}
+
 int main(int argc, char *argv[])
 {
        bool has_runtime_pm;
@@ -208,6 +255,11 @@ int main(int argc, char *argv[])
                test_dc_state_psr(&data, CHECK_DC6);
        }
 
+       igt_subtest("dc5-dpms") {
+               setup_dc_dpms(&data);
+               test_dc_state_dpms(&data, CHECK_DC5);
+       }
+
        igt_fixture {
                close(data.debugfs_fd);
                display_fini(&data);
-- 
2.7.4

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

Reply via email to