[igt-dev] [PATCH i-g-t] tests/kms_display_modes: Fixed mode selection for extended mode tests
Modem, Bhanuprakash
bhanuprakash.modem at intel.com
Thu Mar 9 05:19:05 UTC 2023
On Tue-30-08-2022 05:11 pm, Mohammed Thasleem wrote:
> Added check on ENOSPC and EINVAL 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.
>
> Signed-off-by: Mohammed Thasleem <mohammed.thasleem at intel.com>
> Reviewed-by: Bhanuprakash Modem <bhanuprakash.modem at intel.com>
> ---
> tests/kms_display_modes.c | 27 +++++++++++++++++++++++----
> 1 file changed, 23 insertions(+), 4 deletions(-)
>
> diff --git a/tests/kms_display_modes.c b/tests/kms_display_modes.c
> index e4191811e..7d4f64e0d 100644
> --- a/tests/kms_display_modes.c
> +++ b/tests/kms_display_modes.c
> @@ -43,7 +43,7 @@ static void run_extendedmode_basic(data_t *data, int pipe1, int pipe2)
> igt_plane_t *plane[2];
> igt_pipe_crc_t *pipe_crc[2] = { 0 };
> igt_crc_t ref_crc[2], crc[2];
> - int count = 0, width, height;
> + int count = 0, width, height, ret;
> cairo_t *cr;
>
> for_each_connected_output(display, output) {
> @@ -54,14 +54,16 @@ static void run_extendedmode_basic(data_t *data, int pipe1, int pipe2)
> break;
> }
>
> + pipe_crc[0] = igt_pipe_crc_new(data->drm_fd, pipe1, IGT_PIPE_CRC_SOURCE_AUTO);
> + pipe_crc[1] = igt_pipe_crc_new(data->drm_fd, pipe2, IGT_PIPE_CRC_SOURCE_AUTO);
> +
> +retry:
> igt_output_set_pipe(extended_output[0], pipe1);
> igt_output_set_pipe(extended_output[1], pipe2);
>
> mode[0] = igt_output_get_mode(extended_output[0]);
> mode[1] = igt_output_get_mode(extended_output[1]);
>
> - pipe_crc[0] = igt_pipe_crc_new(data->drm_fd, pipe1, IGT_PIPE_CRC_SOURCE_AUTO);
> - pipe_crc[1] = igt_pipe_crc_new(data->drm_fd, pipe2, IGT_PIPE_CRC_SOURCE_AUTO);
>
> igt_create_color_fb(data->drm_fd, mode[0]->hdisplay, mode[0]->vdisplay,
> DRM_FORMAT_XRGB8888, 0, 1, 0, 0, &fbs[0]);
> @@ -79,7 +81,24 @@ 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);
> +
> + /* In case of DP-MST find suitable mode(s) to fit into the link BW. */
> + if (ret != 0 && (errno == ENOSPC || errno == EINVAL)) {
Why EINVAL?
> + 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 retry;
> + }
> +
> + 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]);
More information about the igt-dev
mailing list