[PATCH i-g-t v2] tests/intel/kms_joiner: Fix mode handling invalid joiner subtest

Santhosh Reddy Guddati santhosh.reddy.guddati at intel.com
Wed Apr 16 07:44:34 UTC 2025


Use a valid big joiner mode before trying modeset on the last pipe.

V2:
- Fix: force invalid sub tests skipping on valid outputs.

Signed-off-by: Santhosh Reddy Guddati <santhosh.reddy.guddati at intel.com>
---
 tests/intel/kms_joiner.c | 40 +++++++++++++++++++++++++++++-----------
 1 file changed, 29 insertions(+), 11 deletions(-)

diff --git a/tests/intel/kms_joiner.c b/tests/intel/kms_joiner.c
index b150894af..22c7c6d85 100644
--- a/tests/intel/kms_joiner.c
+++ b/tests/intel/kms_joiner.c
@@ -324,7 +324,7 @@ static void test_invalid_modeset_two_joiner(data_t *data,
 	igt_output_t *output;
 	igt_plane_t *primary[INVALID_TEST_OUTPUT];
 	igt_fb_t fb[INVALID_TEST_OUTPUT];
-	drmModeModeInfo *mode;
+	drmModeModeInfo mode;
 
 	available_pipe_mask = BIT(data->n_pipes) - 1;
 	outputs = force_joiner ? data->non_big_joiner_output :
@@ -341,15 +341,24 @@ static void test_invalid_modeset_two_joiner(data_t *data,
 
 		for (j = 0; j < INVALID_TEST_OUTPUT; j++) {
 			output = outputs[j];
+
+			if (!force_joiner) {
+				igt_require_f(bigjoiner_mode_found(data->drm_fd, output->config.connector, max_dotclock, &mode),
+							  "No big joiner mode found on output %s\n", output->name);
+				igt_output_override_mode(output, &mode);
+			} else {
+				mode = *igt_output_get_mode(output);
+			}
+
 			igt_output_set_pipe(output, data->pipe_seq[i + j]);
-			mode = igt_output_get_mode(output);
 			igt_info("Assigning pipe %s to %s with mode %dx%d@%d%s",
 				 kmstest_pipe_name(data->pipe_seq[i + j]),
-				 igt_output_name(output), mode->hdisplay,
-				 mode->vdisplay, mode->vrefresh,
+				 igt_output_name(output), mode.hdisplay,
+				 mode.vdisplay, mode.vrefresh,
 				 j == INVALID_TEST_OUTPUT - 1 ? "\n" : ", ");
 			primary[j] = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
-			igt_create_pattern_fb(data->drm_fd, mode->hdisplay, mode->vdisplay, DRM_FORMAT_XRGB8888,
+			igt_create_pattern_fb(data->drm_fd, mode.hdisplay, mode.vdisplay,
+					      DRM_FORMAT_XRGB8888,
 					      DRM_FORMAT_MOD_LINEAR, &fb[j]);
 			igt_plane_set_fb(primary[j], &fb[j]);
 		}
@@ -370,7 +379,7 @@ static void test_joiner_on_last_pipe(data_t *data, bool force_joiner)
 	igt_output_t *output;
 	igt_plane_t *primary;
 	igt_fb_t fb;
-	drmModeModeInfo *mode;
+	drmModeModeInfo mode;
 
 	len = force_joiner ? data->non_big_joiner_output_count : data->big_joiner_output_count;
 	outputs = force_joiner ? data->non_big_joiner_output : data->big_joiner_output;
@@ -379,15 +388,24 @@ static void test_joiner_on_last_pipe(data_t *data, bool force_joiner)
 		igt_display_reset(&data->display);
 		igt_display_commit2(&data->display, COMMIT_ATOMIC);
 		output = outputs[i];
+
+		if (!force_joiner) {
+			igt_require_f(bigjoiner_mode_found(data->drm_fd, output->config.connector, max_dotclock, &mode),
+						  "No big joiner mode found on output %s\n", output->name);
+			igt_output_override_mode(output, &mode);
+		} else {
+			mode = *igt_output_get_mode(output);
+		}
+
 		igt_output_set_pipe(output, data->pipe_seq[data->n_pipes - 1]);
-		mode = igt_output_get_mode(output);
 		igt_info(" Assigning pipe %s to %s with mode %dx%d@%d\n",
 				 kmstest_pipe_name(data->pipe_seq[data->n_pipes - 1]),
-				 igt_output_name(output), mode->hdisplay,
-				 mode->vdisplay, mode->vrefresh);
+				 igt_output_name(output), mode.hdisplay,
+				 mode.vdisplay, mode.vrefresh);
 		primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
-		igt_create_pattern_fb(data->drm_fd, mode->hdisplay, mode->vdisplay, DRM_FORMAT_XRGB8888,
-							  DRM_FORMAT_MOD_LINEAR, &fb);
+		igt_create_pattern_fb(data->drm_fd, mode.hdisplay, mode.vdisplay,
+				      DRM_FORMAT_XRGB8888,
+				      DRM_FORMAT_MOD_LINEAR, &fb);
 		igt_plane_set_fb(primary, &fb);
 		ret = igt_display_try_commit2(&data->display, COMMIT_ATOMIC);
 		igt_plane_set_fb(primary, NULL);
-- 
2.34.1



More information about the igt-dev mailing list