[PATCH i-g-t 3/3] tests/kms_psr2_sf: Run PSR2 and PR tests for setups where it's possible

Jouni Högander jouni.hogander at intel.com
Thu Jan 30 08:42:48 UTC 2025


Currently we are running only Panel Replay tests on setup where it is
supported. Setup supporting Panel Replay usually supports also
PSR2. Running also PSR2 tests on such setups would provide us valuable
information.

Signed-off-by: Jouni Högander <jouni.hogander at intel.com>
---
 tests/intel/kms_psr2_sf.c | 371 ++++++++++++++------------------------
 1 file changed, 140 insertions(+), 231 deletions(-)

diff --git a/tests/intel/kms_psr2_sf.c b/tests/intel/kms_psr2_sf.c
index 939ec7a4f..1d15c3f43 100644
--- a/tests/intel/kms_psr2_sf.c
+++ b/tests/intel/kms_psr2_sf.c
@@ -261,42 +261,6 @@ typedef struct {
 	} coexist_feature;
 } data_t;
 
-static bool set_sel_fetch_mode_for_output(data_t *data)
-{
-	bool supported = false;
-
-	data->et_flag = false;
-
-	if (psr_sink_support(data->drm_fd, data->debugfs_fd,
-						 PR_MODE_SEL_FETCH_ET, data->output)) {
-		supported = true;
-		data->psr_mode = PR_MODE_SEL_FETCH;
-		data->et_flag = true;
-	} else if (psr_sink_support(data->drm_fd, data->debugfs_fd,
-							PR_MODE_SEL_FETCH, data->output)) {
-		supported = true;
-		data->psr_mode = PR_MODE_SEL_FETCH;
-		data->et_flag = true;
-	} else if (psr_sink_support(data->drm_fd, data->debugfs_fd,
-				    PSR_MODE_2_SEL_FETCH_ET,
-				    data->output)) {
-		supported = true;
-		data->psr_mode = PSR_MODE_2;
-		data->et_flag = true;
-	} else	if (psr_sink_support(data->drm_fd, data->debugfs_fd,
-							  PSR_MODE_2, data->output)) {
-		supported = true;
-		data->psr_mode = PSR_MODE_2;
-	} else
-		igt_info("selective fetch not supported on output %s\n", data->output->name);
-
-	if (supported)
-		supported = psr_enable(data->drm_fd, data->debugfs_fd, data->psr_mode,
-				       data->output);
-
-	return supported;
-}
-
 static const char *op_str(enum operations op)
 {
 	static const char * const name[] = {
@@ -1078,18 +1042,24 @@ static void cleanup(data_t *data)
 	igt_remove_fb(data->drm_fd, &data->fb_test);
 }
 
-static bool check_pr_psr2_sel_fetch_support(data_t *data)
+static bool check_pr_psr2_sel_fetch_support(data_t *data, enum psr_mode psr_mode)
 {
 	bool status = false;
 
 	/* Check sink supports PR/PSR2 selective fetch */
-	if (!set_sel_fetch_mode_for_output(data))
+	if (!psr_sink_support(data->drm_fd, data->debugfs_fd,
+			      psr_mode, data->output))
+		return false;
+
+	if (!psr_enable(data->drm_fd, data->debugfs_fd, psr_mode,
+			data->output))
 		return false;
 
 	/* Check if selective fetch can be enabled */
 	if (!selective_fetch_check(data->debugfs_fd, data->output))
 		igt_assert("Selective fetch is not enabled even though panel should support it\n");
 
+	data->psr_mode = psr_mode;
 	prepare(data);
 	/* We enter into DEEP_SLEEP for both PSR2 and PR sel fetch */
 	status = psr_wait_entry(data->debugfs_fd, data->psr_mode, data->output);
@@ -1097,34 +1067,10 @@ static bool check_pr_psr2_sel_fetch_support(data_t *data)
 	return status;
 }
 
-static bool
-pipe_output_combo_valid(igt_display_t *display,
-			enum pipe pipe, igt_output_t *output)
-{
-	bool ret = true;
-
-	igt_display_reset(display);
-
-	igt_output_set_pipe(output, pipe);
-	if (!intel_pipe_output_combo_valid(display))
-		ret = false;
-	igt_output_set_pipe(output, PIPE_NONE);
-
-	return ret;
-}
-
-static bool check_psr_mode_supported(data_t *data, int psr_stat)
-{
-	if (data->psr_mode == psr_stat)
-		return true;
-	else
-		return false;
-}
-
-static void run_dynamic_test_damage_areas(data_t data, int i, int coexist_features[])
+static void run_dynamic_test_damage_areas(data_t data, int coexist_features)
 {
 	for (int j = FEATURE_NONE; j < FEATURE_COUNT; j++) {
-		if (j != FEATURE_NONE && !(coexist_features[i] & j))
+		if (j != FEATURE_NONE && !(coexist_features & j))
 			continue;
 		igt_dynamic_f("pipe-%s-%s%s", kmstest_pipe_name(data.pipe),
 			      igt_output_name(data.output), coexist_feature_str(j)) {
@@ -1139,10 +1085,10 @@ static void run_dynamic_test_damage_areas(data_t data, int i, int coexist_featur
 	}
 }
 
-static void run_dynamic_test(data_t data, int i, int coexist_features[])
+static void run_dynamic_test(data_t data, int coexist_features)
 {
 	for (int j = FEATURE_NONE; j < FEATURE_COUNT; j++) {
-		if (j != FEATURE_NONE && !(coexist_features[i] & j))
+		if (j != FEATURE_NONE && !(coexist_features & j))
 			continue;
 		igt_dynamic_f("pipe-%s-%s%s", kmstest_pipe_name(data.pipe),
 			      igt_output_name(data.output), coexist_feature_str(j)) {
@@ -1154,10 +1100,10 @@ static void run_dynamic_test(data_t data, int i, int coexist_features[])
 	}
 }
 
-static void run_plane_move(data_t data, int i, int coexist_features[])
+static void run_plane_move(data_t data, int coexist_features)
 {
 	for (int j = FEATURE_NONE; j < FEATURE_COUNT; j++) {
-		if (j != FEATURE_NONE && !(coexist_features[i] & j))
+		if (j != FEATURE_NONE && !(coexist_features & j))
 			continue;
 		igt_dynamic_f("pipe-%s-%s%s", kmstest_pipe_name(data.pipe),
 			      igt_output_name(data.output), coexist_feature_str(j)) {
@@ -1173,10 +1119,10 @@ static void run_plane_move(data_t data, int i, int coexist_features[])
 	}
 }
 
-static void run_plane_update_continuous(data_t data, int i, int coexist_features[])
+static void run_plane_update_continuous(data_t data, int coexist_features)
 {
 	for (int j = FEATURE_NONE; j < FEATURE_COUNT; j++) {
-		if (j != FEATURE_NONE && !(coexist_features[i] & j))
+		if (j != FEATURE_NONE && !(coexist_features & j))
 			continue;
 		igt_dynamic_f("pipe-%s-%s%s", kmstest_pipe_name(data.pipe),
 			      igt_output_name(data.output), coexist_feature_str(j)) {
@@ -1195,16 +1141,19 @@ static void run_plane_update_continuous(data_t data, int i, int coexist_features
 	}
 }
 
+struct psr_setup {
+	igt_output_t *output;
+	int pipe;
+	int psr_mode;
+	int coexist_features;
+};
+
 igt_main
 {
-	bool output_supports_pr_psr2_sel_fetch = false;
-	bool pr_psr2_sel_fetch_supported = false;
 	data_t data = {};
-	igt_output_t *outputs[IGT_MAX_PIPES * IGT_MAX_PIPES];
+	struct psr_setup setups[IGT_MAX_PIPES * IGT_MAX_PIPES];
 	int i, y, z;
-	int pipes[IGT_MAX_PIPES * IGT_MAX_PIPES];
-	int n_pipes = 0;
-	int coexist_features[IGT_MAX_PIPES * IGT_MAX_PIPES];
+	int n_setups = 0;
 	const char *append_fbc_subtest[2] = {
 		"",
 		"fbc-"
@@ -1215,7 +1164,7 @@ igt_main
 		"psr2-",
 		"pr-"
 	};
-	int psr_status[] = {PSR_MODE_2, PR_MODE_SEL_FETCH};
+	int psr_status[] = {PSR_MODE_2_SEL_FETCH, PR_MODE_SEL_FETCH_ET};
 
 	igt_fixture {
 		drmModeResPtr res;
@@ -1241,21 +1190,20 @@ igt_main
 			 data.big_fb_width, data.big_fb_height);
 
 		for_each_pipe_with_valid_output(&data.display, data.pipe, data.output) {
-			coexist_features[n_pipes] = 0;
-			output_supports_pr_psr2_sel_fetch = check_pr_psr2_sel_fetch_support(&data);
-			if (output_supports_pr_psr2_sel_fetch) {
-				pipes[n_pipes] = data.pipe;
-				outputs[n_pipes] = data.output;
+			for (i = 0; i < ARRAY_SIZE(psr_status); i++) {
+				if (check_pr_psr2_sel_fetch_support(&data, psr_status[i])) {
+					setups[n_setups].psr_mode = psr_status[i];
+					setups[n_setups].pipe = data.pipe;
+					setups[n_setups].output = data.output;
 
-				if (is_dsc_supported_by_sink(data.drm_fd, data.output))
-					coexist_features[n_pipes] |= FEATURE_DSC;
+					if (is_dsc_supported_by_sink(data.drm_fd, data.output))
+						setups[n_setups].coexist_features |= FEATURE_DSC;
 
-				n_pipes++;
+					n_setups++;
+				}
 			}
-			pr_psr2_sel_fetch_supported |= output_supports_pr_psr2_sel_fetch;
 		}
-		igt_require_f(pr_psr2_sel_fetch_supported,
-					  "No output supports selective fetch\n");
+		igt_require_f(n_setups, "No output supports selective fetch\n");
 	}
 
 	for (y = 0; y < ARRAY_SIZE(fbc_status); y++) {
@@ -1264,9 +1212,8 @@ igt_main
 			data.test_plane_id = DRM_PLANE_TYPE_PRIMARY;
 			data.primary_format = DRM_FORMAT_XRGB8888;
 			data.big_fb_test = 0;
-
-			data.op_fbc_mode = fbc_status[y];
 			data.psr_mode = psr_status[z];
+			data.op_fbc_mode = fbc_status[y];
 
 			/* Verify primary plane selective fetch */
 			igt_describe("Test that selective fetch works on primary plane");
@@ -1274,20 +1221,17 @@ igt_main
 						   append_fbc_subtest[y],
 						   append_psr_subtest[z],
 						   op_str(data.op)) {
-				for (i = 0; i < n_pipes; i++) {
-					if (!pipe_output_combo_valid(&data.display,
-								     pipes[i], outputs[i]))
+				for (i = 0; i < n_setups; i++) {
+					if (setups[i].psr_mode != psr_status[z])
 						continue;
-					data.pipe = pipes[i];
-					data.output = outputs[i];
-					igt_assert_f(set_sel_fetch_mode_for_output(&data),
-						     "Selective fetch is not supported\n");
 
-					if (!check_psr_mode_supported(&data, psr_status[z]))
-						continue;
+					data.pipe = setups[i].pipe;
+					data.output = setups[i].output;
+					igt_assert_f(psr_enable(data.drm_fd, data.debugfs_fd, data.psr_mode, data.output),
+						     "Enabling PR/PSR selective fetch failed\n");
 
 					data.test_plane_id = DRM_PLANE_TYPE_PRIMARY;
-					run_dynamic_test_damage_areas(data, i, coexist_features);
+					run_dynamic_test_damage_areas(data, setups[i].coexist_features);
 				}
 			}
 
@@ -1300,20 +1244,17 @@ igt_main
 							   append_fbc_subtest[y],
 							   append_psr_subtest[z],
 							   op_str(data.op)) {
-					for (i = 0; i < n_pipes; i++) {
-						if (!pipe_output_combo_valid(&data.display,
-									     pipes[i], outputs[i]))
-							continue;
-						data.pipe = pipes[i];
-						data.output = outputs[i];
-						igt_assert_f(set_sel_fetch_mode_for_output(&data),
-							     "Selective fetch is not supported\n");
-						if (!check_psr_mode_supported(&data, psr_status[z]))
+					for (i = 0; i < n_setups; i++) {
+						if (setups[i].psr_mode != psr_status[z])
 							continue;
 
+						data.pipe = setups[i].pipe;
+						data.output = setups[i].output;
+						igt_assert_f(psr_enable(data.drm_fd, data.debugfs_fd, data.psr_mode, data.output),
+							     "Enabling PR/PSR selective fetch failed\n");
+
 						data.test_plane_id = DRM_PLANE_TYPE_PRIMARY;
-						run_dynamic_test_damage_areas(data, i,
-									      coexist_features);
+						run_dynamic_test_damage_areas(data, setups[i].coexist_features);
 					}
 				}
 			}
@@ -1325,20 +1266,17 @@ igt_main
 						   append_fbc_subtest[y],
 						   append_psr_subtest[z],
 						   op_str(data.op)) {
-				for (i = 0; i < n_pipes; i++) {
-					if (!pipe_output_combo_valid(&data.display,
-								     pipes[i],
-								     outputs[i]))
-						continue;
-					data.pipe = pipes[i];
-					data.output = outputs[i];
-					igt_assert_f(set_sel_fetch_mode_for_output(&data),
-						     "Selective fetch is not supported\n");
-					if (!check_psr_mode_supported(&data, psr_status[z]))
+				for (i = 0; i < n_setups; i++) {
+					if (setups[i].psr_mode != psr_status[z])
 						continue;
 
+					data.pipe = setups[i].pipe;
+					data.output = setups[i].output;
+					igt_assert_f(psr_enable(data.drm_fd, data.debugfs_fd, data.psr_mode, data.output),
+						     "Enabling PR/PSR selective fetch failed\n");
+
 					data.test_plane_id = DRM_PLANE_TYPE_OVERLAY;
-					run_dynamic_test_damage_areas(data, i, coexist_features);
+					run_dynamic_test_damage_areas(data, setups[i].coexist_features);
 				}
 			}
 
@@ -1347,20 +1285,17 @@ igt_main
 			igt_describe("Test that selective fetch works on cursor plane");
 			igt_subtest_with_dynamic_f("%s%scursor-%s-sf", append_fbc_subtest[y],
 						   append_psr_subtest[z], op_str(data.op)) {
-				for (i = 0; i < n_pipes; i++) {
-					if (!pipe_output_combo_valid(&data.display,
-								     pipes[i],
-								     outputs[i]))
-						continue;
-					data.pipe = pipes[i];
-					data.output = outputs[i];
-					igt_assert_f(set_sel_fetch_mode_for_output(&data),
-						     "Selective fetch is not supported\n");
-					if (!check_psr_mode_supported(&data, psr_status[z]))
+				for (i = 0; i < n_setups; i++) {
+					if (setups[i].psr_mode != psr_status[z])
 						continue;
 
+					data.pipe = setups[i].pipe;
+					data.output = setups[i].output;
+					igt_assert_f(psr_enable(data.drm_fd, data.debugfs_fd, data.psr_mode, data.output),
+						     "Enabling PR/PSR selective fetch failed\n");
+
 					data.test_plane_id = DRM_PLANE_TYPE_CURSOR;
-					run_dynamic_test(data, i, coexist_features);
+					run_dynamic_test_damage_areas(data, setups[i].coexist_features);
 				}
 			}
 
@@ -1369,20 +1304,17 @@ igt_main
 				     "moving cursor plane (no update)");
 			igt_subtest_with_dynamic_f("%s%scursor-%s-sf", append_fbc_subtest[y],
 						   append_psr_subtest[z], op_str(data.op)) {
-				for (i = 0; i < n_pipes; i++) {
-					if (!pipe_output_combo_valid(&data.display,
-								     pipes[i],
-								     outputs[i]))
-						continue;
-					data.pipe = pipes[i];
-					data.output = outputs[i];
-					igt_assert_f(set_sel_fetch_mode_for_output(&data),
-						     "Selective fetch is not supported\n");
-					if (!check_psr_mode_supported(&data, psr_status[z]))
+				for (i = 0; i < n_setups; i++) {
+					if (setups[i].psr_mode != psr_status[z])
 						continue;
 
+					data.pipe = setups[i].pipe;
+					data.output = setups[i].output;
+					igt_assert_f(psr_enable(data.drm_fd, data.debugfs_fd, data.psr_mode, data.output),
+						     "Enabling PR/PSR selective fetch failed\n");
+
 					data.test_plane_id = DRM_PLANE_TYPE_CURSOR;
-					run_dynamic_test(data, i, coexist_features);
+					run_dynamic_test(data, setups[i].coexist_features);
 				}
 			}
 
@@ -1391,20 +1323,17 @@ igt_main
 				     "plane exceeding partially visible area (no update)");
 			igt_subtest_with_dynamic_f("%s%scursor-%s-sf", append_fbc_subtest[y],
 						   append_psr_subtest[z], op_str(data.op)) {
-				for (i = 0; i < n_pipes; i++) {
-					if (!pipe_output_combo_valid(&data.display,
-								     pipes[i],
-								     outputs[i]))
-						continue;
-					data.pipe = pipes[i];
-					data.output = outputs[i];
-					igt_assert_f(set_sel_fetch_mode_for_output(&data),
-						     "Selective fetch is not supported\n");
-					if (!check_psr_mode_supported(&data, psr_status[z]))
+				for (i = 0; i < n_setups; i++) {
+					if (setups[i].psr_mode != psr_status[z])
 						continue;
 
+					data.pipe = setups[i].pipe;
+					data.output = setups[i].output;
+					igt_assert_f(psr_enable(data.drm_fd, data.debugfs_fd, data.psr_mode, data.output),
+						     "Enabling PR/PSR selective fetch failed\n");
+
 					data.test_plane_id = DRM_PLANE_TYPE_CURSOR;
-					run_dynamic_test(data, i, coexist_features);
+					run_dynamic_test(data, setups[i].coexist_features);
 				}
 			}
 
@@ -1413,20 +1342,17 @@ igt_main
 				     "exceeding fully visible area (no update)");
 			igt_subtest_with_dynamic_f("%s%scursor-%s-sf", append_fbc_subtest[y],
 						   append_psr_subtest[z], op_str(data.op)) {
-				for (i = 0; i < n_pipes; i++) {
-					if (!pipe_output_combo_valid(&data.display,
-								     pipes[i],
-								     outputs[i]))
-						continue;
-					data.pipe = pipes[i];
-					data.output = outputs[i];
-					igt_assert_f(set_sel_fetch_mode_for_output(&data),
-						     "Selective fetch is not supported\n");
-					if (!check_psr_mode_supported(&data, psr_status[z]))
+				for (i = 0; i < n_setups; i++) {
+					if (setups[i].psr_mode != psr_status[z])
 						continue;
 
+					data.pipe = setups[i].pipe;
+					data.output = setups[i].output;
+					igt_assert_f(psr_enable(data.drm_fd, data.debugfs_fd, data.psr_mode, data.output),
+						     "Enabling PR/PSR selective fetch failed\n");
+
 					data.test_plane_id = DRM_PLANE_TYPE_CURSOR;
-					run_dynamic_test(data, i, coexist_features);
+					run_dynamic_test(data, setups[i].coexist_features);
 				}
 			}
 
@@ -1436,19 +1362,16 @@ igt_main
 			igt_describe("Test that selective fetch works on moving overlay plane");
 			igt_subtest_with_dynamic_f("%s%s%s-sf-dmg-area", append_fbc_subtest[y],
 						   append_psr_subtest[z], op_str(data.op)) {
-				for (i = 0; i < n_pipes; i++) {
-					if (!pipe_output_combo_valid(&data.display,
-								     pipes[i],
-								     outputs[i]))
-						continue;
-					data.pipe = pipes[i];
-					data.output = outputs[i];
-					igt_assert_f(set_sel_fetch_mode_for_output(&data),
-						     "Selective fetch is not supported\n");
-					if (!check_psr_mode_supported(&data, psr_status[z]))
+				for (i = 0; i < n_setups; i++) {
+					if (setups[i].psr_mode != psr_status[z])
 						continue;
 
-					run_plane_move(data, i, coexist_features);
+					data.pipe = setups[i].pipe;
+					data.output = setups[i].output;
+					igt_assert_f(psr_enable(data.drm_fd, data.debugfs_fd, data.psr_mode, data.output),
+						     "Enabling PR/PSR selective fetch failed\n");
+
+					run_plane_move(data, setups[i].coexist_features);
 				}
 			}
 
@@ -1457,20 +1380,17 @@ igt_main
 				     "plane (no update)");
 			igt_subtest_with_dynamic_f("%s%soverlay-%s-sf", append_fbc_subtest[y],
 						   append_psr_subtest[z], op_str(data.op)) {
-				for (i = 0; i < n_pipes; i++) {
-					if (!pipe_output_combo_valid(&data.display,
-								     pipes[i],
-								     outputs[i]))
-						continue;
-					data.pipe = pipes[i];
-					data.output = outputs[i];
-					igt_assert_f(set_sel_fetch_mode_for_output(&data),
-						     "Selective fetch is not supported\n");
-					if (!check_psr_mode_supported(&data, psr_status[z]))
+				for (i = 0; i < n_setups; i++) {
+					if (setups[i].psr_mode != psr_status[z])
 						continue;
 
+					data.pipe = setups[i].pipe;
+					data.output = setups[i].output;
+					igt_assert_f(psr_enable(data.drm_fd, data.debugfs_fd, data.psr_mode, data.output),
+						     "Enabling PR/PSR selective fetch failed\n");
+
 					data.test_plane_id = DRM_PLANE_TYPE_OVERLAY;
-					run_dynamic_test(data, i, coexist_features);
+					run_dynamic_test(data, setups[i].coexist_features);
 				}
 			}
 
@@ -1479,20 +1399,17 @@ igt_main
 				     "plane partially exceeding visible area (no update)");
 			igt_subtest_with_dynamic_f("%s%soverlay-%s-sf", append_fbc_subtest[y],
 						   append_psr_subtest[z], op_str(data.op)) {
-				for (i = 0; i < n_pipes; i++) {
-					if (!pipe_output_combo_valid(&data.display,
-								     pipes[i],
-								     outputs[i]))
-						continue;
-					data.pipe = pipes[i];
-					data.output = outputs[i];
-					igt_assert_f(set_sel_fetch_mode_for_output(&data),
-						     "Selective fetch is not supported\n");
-					if (!check_psr_mode_supported(&data, psr_status[z]))
+				for (i = 0; i < n_setups; i++) {
+					if (setups[i].psr_mode != psr_status[z])
 						continue;
 
+					data.pipe = setups[i].pipe;
+					data.output = setups[i].output;
+					igt_assert_f(psr_enable(data.drm_fd, data.debugfs_fd, data.psr_mode, data.output),
+						     "Enabling PR/PSR selective fetch failed\n");
+
 					data.test_plane_id = DRM_PLANE_TYPE_OVERLAY;
-					run_dynamic_test(data, i, coexist_features);
+					run_dynamic_test(data, setups[i].coexist_features);
 				}
 			}
 
@@ -1501,19 +1418,17 @@ igt_main
 				     "fully exceeding visible area (no update)");
 			igt_subtest_with_dynamic_f("%s%soverlay-%s-sf", append_fbc_subtest[y],
 						   append_psr_subtest[z], op_str(data.op)) {
-				for (i = 0; i < n_pipes; i++) {
-					if (!pipe_output_combo_valid(&data.display, pipes[i],
-								     outputs[i]))
-						continue;
-					data.pipe = pipes[i];
-					data.output = outputs[i];
-					igt_assert_f(set_sel_fetch_mode_for_output(&data),
-						     "Selective fetch is not supported\n");
-					if (!check_psr_mode_supported(&data, psr_status[z]))
+				for (i = 0; i < n_setups; i++) {
+					if (setups[i].psr_mode != psr_status[z])
 						continue;
 
+					data.pipe = setups[i].pipe;
+					data.output = setups[i].output;
+					igt_assert_f(psr_enable(data.drm_fd, data.debugfs_fd, data.psr_mode, data.output),
+						     "Enabling PR/PSR selective fetch failed\n");
+
 					data.test_plane_id = DRM_PLANE_TYPE_OVERLAY;
-					run_dynamic_test(data, i, coexist_features);
+					run_dynamic_test(data, setups[i].coexist_features);
 				}
 			}
 
@@ -1523,20 +1438,17 @@ igt_main
 				     "with blended overlay plane");
 			igt_subtest_with_dynamic_f("%s%s%s-sf-dmg-area", append_fbc_subtest[y],
 						   append_psr_subtest[z], op_str(data.op)) {
-				for (i = 0; i < n_pipes; i++) {
-					if (!pipe_output_combo_valid(&data.display,
-								     pipes[i],
-								     outputs[i]))
-						continue;
-					data.pipe = pipes[i];
-					data.output = outputs[i];
-					igt_assert_f(set_sel_fetch_mode_for_output(&data),
-						     "Selective fetch is not supported\n");
-					if (!check_psr_mode_supported(&data, psr_status[z]))
+				for (i = 0; i < n_setups; i++) {
+					if (setups[i].psr_mode != psr_status[z])
 						continue;
 
+					data.pipe = setups[i].pipe;
+					data.output = setups[i].output;
+					igt_assert_f(psr_enable(data.drm_fd, data.debugfs_fd, data.psr_mode, data.output),
+						     "Enabling PR/PSR selective fetch failed\n");
+
 					data.test_plane_id = DRM_PLANE_TYPE_PRIMARY;
-					run_dynamic_test_damage_areas(data, i, coexist_features);
+					run_dynamic_test_damage_areas(data, setups[i].coexist_features);
 				}
 			}
 
@@ -1548,19 +1460,16 @@ igt_main
 			igt_describe("Test that selective fetch works on overlay plane");
 			igt_subtest_with_dynamic_f("%s%soverlay-%s-sf", append_fbc_subtest[y],
 						   append_psr_subtest[z], op_str(data.op)) {
-				for (i = 0; i < n_pipes; i++) {
-					if (!pipe_output_combo_valid(&data.display,
-								     pipes[i],
-								     outputs[i]))
-						continue;
-					data.pipe = pipes[i];
-					data.output = outputs[i];
-					igt_assert_f(set_sel_fetch_mode_for_output(&data),
-						     "Selective fetch is not supported\n");
-					if (!check_psr_mode_supported(&data, psr_status[z]))
+				for (i = 0; i < n_setups; i++) {
+					if (setups[i].psr_mode != psr_status[z])
 						continue;
 
-					run_plane_update_continuous(data, i, coexist_features);
+					data.pipe = setups[i].pipe;
+					data.output = setups[i].output;
+					igt_assert_f(psr_enable(data.drm_fd, data.debugfs_fd, data.psr_mode, data.output),
+						     "Enabling PR/PSR selective fetch failed\n");
+
+					run_plane_update_continuous(data, setups[i].coexist_features);
 				}
 			}
 		}
-- 
2.43.0



More information about the Intel-gfx-trybot mailing list