[igt-dev] [v5 i-g-t 05/14] tests/kms_content_protection: Fix mode selection for 2x tests

Nautiyal, Ankit K ankit.k.nautiyal at intel.com
Tue May 11 05:54:59 UTC 2021


Nice to see #TODO for the test getting implemented :)

The test was earlier trying with hard coded 2K mode on MST panels. This 
takes care of that.

Please find comments inline:

On 5/8/2021 9:52 PM, Bhanuprakash Modem wrote:
> 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.
>
> This patch will find a combination of modes that fit into the BW.
>
> Cc: Imre Deak <imre.deak at intel.com>
> Cc: Ankit Nautiyal <ankit.k.nautiyal at intel.com>
> Cc: Daniel Vetter <daniel.vetter at ffwll.ch>
> Signed-off-by: Bhanuprakash Modem <bhanuprakash.modem at intel.com>
> ---
>   tests/kms_content_protection.c | 41 +++++++++++++---------------------
>   1 file changed, 16 insertions(+), 25 deletions(-)
>
> diff --git a/tests/kms_content_protection.c b/tests/kms_content_protection.c
> index 5a75b871c..1d1a439a9 100644
> --- a/tests/kms_content_protection.c
> +++ b/tests/kms_content_protection.c
> @@ -452,39 +452,18 @@ static bool sink_hdcp2_capable(igt_output_t *output)
>   	return strstr(buf, "HDCP2.2");
>   }
>   
> -static void prepare_modeset_on_mst_output(igt_output_t *output, enum pipe pipe)
> +static void prepare_modeset_on_mst_output(igt_output_t *output)
>   {
> -	drmModeConnectorPtr c = output->config.connector;
>   	drmModeModeInfo *mode;
>   	igt_plane_t *primary;
> -	int i, width, height;
> +	int width, height;
> +	enum pipe pipe = output->pending_pipe;
>   
>   	mode = igt_output_get_mode(output);
>   
> -	/*
> -	 * TODO: Add logic to use the highest possible modes on each output.
> -	 * Currently using 2k modes by default on all the outputs.
> -	 */
> -	igt_debug("Before mode override: Output %s Mode hdisplay %d Mode vdisplay %d\n",
> -		   output->name, mode->hdisplay, mode->vdisplay);
> -
> -	if (mode->hdisplay > 1920 && mode->vdisplay > 1080) {
> -		for (i = 0; i < c->count_modes; i++) {
> -			if (c->modes[i].hdisplay <= 1920 && c->modes[i].vdisplay <= 1080) {
> -				mode = &c->modes[i];
> -				igt_output_override_mode(output, mode);
> -				break;
> -			}
> -		}
> -	}
> -
> -	igt_debug("After mode overide: Output %s Mode hdisplay %d Mode vdisplay %d\n",
> -		   output->name, mode->hdisplay, mode->vdisplay);
> -
>   	width = mode->hdisplay;
>   	height = mode->vdisplay;
>   
> -	igt_output_set_pipe(output, pipe);
>   	primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
>   	igt_plane_set_fb(primary, NULL);
>   	igt_plane_set_fb(primary, pipe % 2 ? &data.red : &data.green);
> @@ -624,7 +603,8 @@ test_content_protection_mst(int content_type)
>   
>   		igt_assert_f(igt_pipe_connector_valid(pipe, output), "Output-pipe combination invalid\n");
>   
> -		prepare_modeset_on_mst_output(output, pipe);
> +		igt_output_set_pipe(output, pipe);
> +		prepare_modeset_on_mst_output(output);
>   		mst_output[dp_mst_outputs++] = output;
>   
>   		pipe++;
> @@ -635,6 +615,17 @@ test_content_protection_mst(int content_type)
>   
>   	igt_require_f(dp_mst_outputs > 1, "No DP MST set up with >= 2 outputs found in a single topology\n");
>   
> +	if (igt_display_try_commit_atomic(display,
> +				DRM_MODE_ATOMIC_TEST_ONLY |
> +				DRM_MODE_ATOMIC_ALLOW_MODESET,
> +				NULL) != 0) {
> +		bool found = igt_override_all_active_output_modes_to_fit_bw(display);
> +		igt_require_f(found, "No valid mode combo found for MST modeset\n");
> +
> +		for (count = 0; count < dp_mst_outputs; count++)
> +			prepare_modeset_on_mst_output(mst_output[count]);
> +	}
> +
>   	ret = igt_display_try_commit2(display, COMMIT_ATOMIC);

The above statement should be in the else block for the if-block. If the 
try commit in the if block passes we don't need another commit.

With that fixed:

Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal at intel.com>


>   	igt_require_f(ret == 0, "Commit failure during MST modeset\n");
>   


More information about the igt-dev mailing list