From: Jyoti Yadav <[email protected]>

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.

Signed-off-by: Jyoti Yadav <[email protected]>
Signed-off-by: Anshuman Gupta <[email protected]>
---
 tests/i915/i915_pm_dc.c | 39 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

diff --git a/tests/i915/i915_pm_dc.c b/tests/i915/i915_pm_dc.c
index 02a59bf..865c1f6 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);
@@ -173,6 +174,39 @@ static void test_dc_state_psr(data_t *data, int dc_flag)
        cleanup(data);
 }
 
+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;
+
+       if (IS_BROXTON(data->devid) || IS_GEMINILAKE(data->devid) ||
+               IS_ICELAKE(data->devid))
+               data->runtime_suspend_disabled = igt_disable_runtime_pm();
+
+       dc_counter = read_dc_counter(data->drm_fd, dc_flag);
+       dpms_off_on(data);
+       check_dc_counter(data->drm_fd, dc_flag, dc_counter);
+       igt_restore_runtime_pm();
+}
+
 int main(int argc, char *argv[])
 {
        bool has_runtime_pm;
@@ -189,6 +223,7 @@ int main(int argc, char *argv[])
                has_runtime_pm = igt_setup_runtime_pm();
                igt_info("Runtime PM support: %d\n", has_runtime_pm);
                igt_require(has_runtime_pm);
+               data.runtime_suspend_disabled = false;
                igt_require(igt_pm_dmc_loaded(data.debugfs_fd));
                igt_display_require(&data.display, data.drm_fd);
        }
@@ -209,6 +244,10 @@ int main(int argc, char *argv[])
                test_dc_state_psr(&data, CHECK_DC6);
        }
 
+       igt_subtest("dc5-dpms") {
+               test_dc_state_dpms(&data, CHECK_DC5);
+       }
+
        igt_fixture {
                close(data.debugfs_fd);
                display_fini(&data);
-- 
2.7.4

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to