[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