Skip to contentSkip to conversation

Fixed mode selection for MST modeset

PATCH Superseded Mohammed Thasleem 1 participant 3 messages Jun 7, 2023

v2 of 5 Superseded Latest is v5 →

lore
Share & tools
lore
#0 lore raw

v2 cover Fixed mode selection for MST modeset

From: Swati Sharma <[email protected]>

This will find the connector mode combo that fits into the bandwidth when more than one monitor is connected.

Mohammed Thasleem (2):
tests/kms_display_modes: Fixed mode selection for extended mode tests tests/i915/kms_cdclk: Fixed mode selection for MST modeset

 tests/i915/kms_cdclk.c    | 5 +++++
 tests/kms_display_modes.c | 5 +++++
 2 files changed, 10 insertions(+)
Signature · 1 line
2.25.1
#1 lore raw

PATCH v2 1/2 tests/kms_display_modes: Fixed mode selection for extended mode tests

Added check on DP-MST and 4k panels 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.

Example:
When two monitors connected through MST, the second monitor also tries to use the same mode. So two such modes may not fit into the link bandwidth. So, iterate through connected outputs & modes and find a combination of modes those fit into the link BW.

v2: -Updated commit msg and description. (Bhanu)
-Renamed restart with retry. (Bhanu) -Moved igt_pipe_crc_new before retry. (Bhanu) -Removed unrelated changes and new line. (Bhanu) -Minor changes.
v3: Updated discription and added EINVAL check.
v4: Removed EINVAL and ENOSPC checks.
Added check for DP-MST and 4k panels. Updated discription.
v5: Defined 4k display modes globally.
v6: -Removed if loop checks.
-Added igt override to avoid dp mst bw failure.
v7: Rebased on tip.

---
 tests/kms_display_modes.c | 5 +++++
 1 file changed, 5 insertions(+)
tests/kms_display_modes.c +5 -0
index 93d91ef5..5108b4d4 100644
@@ -142,6 +142,7 @@ static void run_extendedmode_basic(data_t *data,
 	igt_pipe_crc_t *pipe_crc[2] = { 0 };
 	igt_crc_t ref_crc[2], crc[2];
 	int width, height;
+	bool found;
 	cairo_t *cr;
 
 	igt_display_reset(display);
@@ -171,6 +172,10 @@ static void run_extendedmode_basic(data_t *data,
 	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);
 
+	/* In case of DP-MST find suitable mode(s) to fit into the link BW. */
+	found = igt_override_all_active_output_modes_to_fit_bw(display);
+	igt_require_f(found, "No valid mode combo found for MST modeset.\n");
+
 	igt_display_commit2(display, COMMIT_ATOMIC);
 
 	igt_pipe_crc_collect_crc(pipe_crc[0], &ref_crc[0]);
Signature · 1 line
2.25.1
#2 lore raw

PATCH v2 2/2 tests/i915/kms_cdclk: Fixed mode selection for MST modeset

In reply to Mohammed Thasleem

When two monitors connected through MST. This will find the connector mode combo that fits into the bandwidth when more than one monitor is connected.

Example:
When two monitors connected through MST, the second monitor also tries to use the same mode. So two such modes may not fit into the link bandwidth. So, iterate through connected outputs & modes and find a combination of modes those fit into the link BW.

v2: -Removed if loop checks.
-Added igt override to avoid dp mst bw failure.
v3: Rebased on tip.

---
 tests/i915/kms_cdclk.c | 5 +++++
 1 file changed, 5 insertions(+)
tests/i915/kms_cdclk.c +5 -0
index 0f9b8dc5..bf93d940 100644
@@ -257,6 +257,7 @@ static void test_mode_transition_on_all_outputs(data_t *data)
 	int valid_outputs = 0;
 	int cdclk_ref, cdclk_new;
 	uint16_t width = 0, height = 0;
+	bool found;
 	struct igt_fb fb;
 	igt_pipe_t *pipe;
 	igt_plane_t *plane;
@@ -332,6 +333,10 @@ static void test_mode_transition_on_all_outputs(data_t *data)
 		j++;
 	}
 
+	/* In case of DP-MST find suitable mode(s) to fit into the link BW. */
+	found = igt_override_all_active_output_modes_to_fit_bw(display);
+	igt_require_f(found, "No valid mode combo found for MST modeset.\n");
+
 	igt_display_commit2(display, COMMIT_ATOMIC);
 	cdclk_new = get_current_cdclk_freq(debugfs_fd);
 	igt_info("CD clock frequency %d -> %d\n", cdclk_ref, cdclk_new);
Signature · 1 line
2.25.1