[PATCH i-g-t v2 4/4] tests/kms_async_flips: Add DPMS subtest
Karthik B S
karthik.b.s at intel.com
Tue Jun 24 09:24:20 UTC 2025
Test functionality of async flips with DPMS.
v2: Update runtime to accomodate for first flip after DPMS (Arun)
Signed-off-by: Karthik B S <karthik.b.s at intel.com>
---
tests/kms_async_flips.c | 36 ++++++++++++++++++++++++++++++++++--
1 file changed, 34 insertions(+), 2 deletions(-)
diff --git a/tests/kms_async_flips.c b/tests/kms_async_flips.c
index 5e39ca520..6560fb20d 100644
--- a/tests/kms_async_flips.c
+++ b/tests/kms_async_flips.c
@@ -89,6 +89,9 @@
* SUBTEST: async-flip-hang
* Description: Verify the async flip functionality with hang cycle
*
+ * SUBTEST: async-flip-dpms
+ * Description: Verify the async flip functionality with dpms cycle
+ *
* SUBTEST: overlay-atomic
* Description: Verify overlay planes with async flips in atomic API
*
@@ -136,6 +139,7 @@ typedef struct {
bool alternate_sync_async;
bool suspend_resume;
bool hang;
+ bool dpms;
bool allow_fail;
struct buf_ops *bops;
bool atomic_path;
@@ -375,6 +379,21 @@ static int perform_flip(data_t *data, int frame, int flags)
return ret;
}
+static void check_dpms(igt_output_t *output)
+{
+ igt_require(igt_setup_runtime_pm(output->display->drm_fd));
+
+ kmstest_set_connector_dpms(output->display->drm_fd,
+ output->config.connector,
+ DRM_MODE_DPMS_OFF);
+ igt_require(igt_wait_for_pm_status(IGT_RUNTIME_PM_STATUS_SUSPENDED));
+
+ kmstest_set_connector_dpms(output->display->drm_fd,
+ output->config.connector,
+ DRM_MODE_DPMS_ON);
+ igt_assert(igt_wait_for_pm_status(IGT_RUNTIME_PM_STATUS_ACTIVE));
+}
+
static void test_async_flip(data_t *data)
{
int ret, frame;
@@ -384,7 +403,7 @@ static void test_async_flip(data_t *data)
uint64_t ahnd = 0;
int mid_time = RUN_TIME / 2;
float run_time;
- bool temp = data->suspend_resume || data->hang;
+ bool temp = data->suspend_resume || data->hang || data->dpms;
igt_display_commit2(&data->display, data->display.is_atomic ? COMMIT_ATOMIC : COMMIT_LEGACY);
@@ -455,10 +474,15 @@ static void test_async_flip(data_t *data)
hang = igt_hang_ring_with_ahnd(data->drm_fd, I915_EXEC_DEFAULT, ahnd);
}
+ if (data->dpms && diff.tv_sec == mid_time && temp) {
+ temp = false;
+ check_dpms(data->output);
+ }
+
frame++;
} while (diff.tv_sec < RUN_TIME);
- if (data->suspend_resume)
+ if (data->suspend_resume || data->dpms)
run_time = RUN_TIME - (1.0 / data->refresh_rate);
else
run_time = RUN_TIME;
@@ -1069,6 +1093,14 @@ igt_main
data.hang = false;
}
+ igt_describe("Verify the async flip functionality after dpms cycle");
+ igt_subtest_with_dynamic("async-flip-dpms") {
+ test_init_ops(&data);
+ data.dpms = true;
+ run_test(&data, test_async_flip);
+ data.dpms = false;
+ }
+
igt_fixture {
for (i = 0; i < NUM_FBS; i++) {
igt_remove_fb(data.drm_fd, &data.bufs[i]);
--
2.43.0
More information about the igt-dev
mailing list