[igt-dev] [PATCH i-g-t] tests/kms_display_modes: Add check on ENOSPC for DP MST config

Mohammed Thasleem mohammed.thasleem at intel.com
Tue Feb 14 10:56:42 UTC 2023


Added check on ENOSPC when two moniters connected through MST.
This will find the connector mode combo that fits into the
bandwidth when more than one monitor is connected.

Signed-off-by: Mohammed Thasleem <mohammed.thasleem at intel.com>
---
 tests/kms_display_modes.c | 21 +++++++++++++++++++--
 1 file changed, 19 insertions(+), 2 deletions(-)

diff --git a/tests/kms_display_modes.c b/tests/kms_display_modes.c
index e4191811..cbcdc0cc 100644
--- a/tests/kms_display_modes.c
+++ b/tests/kms_display_modes.c
@@ -44,6 +44,7 @@ static void run_extendedmode_basic(data_t *data, int pipe1, int pipe2)
 	igt_pipe_crc_t *pipe_crc[2] = { 0 };
 	igt_crc_t ref_crc[2], crc[2];
 	int count = 0, width, height;
+	int ret;
 	cairo_t *cr;
 
 	for_each_connected_output(display, output) {
@@ -54,6 +55,7 @@ static void run_extendedmode_basic(data_t *data, int pipe1, int pipe2)
 			break;
 	}
 
+restart:
 	igt_output_set_pipe(extended_output[0], pipe1);
 	igt_output_set_pipe(extended_output[1], pipe2);
 
@@ -79,7 +81,23 @@ static void run_extendedmode_basic(data_t *data, int pipe1, int pipe2)
 	igt_fb_set_size(&fbs[1], plane[1], mode[1]->hdisplay, mode[1]->vdisplay);
 	igt_plane_set_size(plane[1], mode[1]->hdisplay, mode[1]->vdisplay);
 
-	igt_display_commit2(display, COMMIT_ATOMIC);
+	ret = igt_display_try_commit2(display, COMMIT_ATOMIC);
+	if (ret != 0 && errno == ENOSPC) {
+
+		bool found = igt_override_all_active_output_modes_to_fit_bw(display);
+
+		igt_require_f(found, "No valid mode combo found.\n");
+
+		for_each_connected_output(display, output)
+			igt_output_set_pipe(output, PIPE_NONE);
+
+		igt_remove_fb(data->drm_fd, &fbs[0]);
+		igt_remove_fb(data->drm_fd, &fbs[1]);
+
+		goto restart;
+	}
+
+	igt_assert(!ret);
 
 	igt_pipe_crc_collect_crc(pipe_crc[0], &ref_crc[0]);
 	igt_pipe_crc_collect_crc(pipe_crc[1], &ref_crc[1]);
@@ -101,7 +119,6 @@ static void run_extendedmode_basic(data_t *data, int pipe1, int pipe2)
 	igt_plane_set_fb(plane[1], &fb);
 	igt_fb_set_position(&fb, plane[1], mode[0]->hdisplay, 0);
 	igt_fb_set_size(&fb, plane[1], mode[1]->hdisplay, mode[1]->vdisplay);
-
 	igt_display_commit2(display, COMMIT_ATOMIC);
 
 	igt_pipe_crc_collect_crc(pipe_crc[0], &crc[0]);
-- 
2.25.1



More information about the igt-dev mailing list