[igt-dev] [PATCH i-g-t] tests/i915/kms_psr2_su: Convert tests to dynamic

Hogander, Jouni jouni.hogander at intel.com
Fri Aug 19 09:14:31 UTC 2022


On Wed, 2022-08-17 at 11:35 +0530, Jeevan B wrote:
> Converting the existing subtests to dynamic subtests.

Can you please add a bit more on why you are doing this. Also you are
now adding own subtest for each pipe? Maybe couple of words about that
also.
 
> 
> Signed-off-by: Jeevan B <jeevan.b at intel.com>
> ---
>  tests/i915/kms_psr2_su.c | 64 +++++++++++++++++++++++++-------------
> --
>  1 file changed, 41 insertions(+), 23 deletions(-)
> 
> diff --git a/tests/i915/kms_psr2_su.c b/tests/i915/kms_psr2_su.c
> index caccf713..fcc3105b 100644
> --- a/tests/i915/kms_psr2_su.c
> +++ b/tests/i915/kms_psr2_su.c
> @@ -123,9 +123,15 @@ static void display_fini(data_t *data)
>  	igt_display_fini(&data->display);
>  }
>  
> -static void prepare(data_t *data)
> +static void prepare(data_t *data, enum pipe pipe)
>  {
>  	igt_plane_t *primary;
> +	igt_output_t *output;
> +	igt_display_t *display = &data->display;
> +
> +	igt_display_reset(display);
> +	output = data->output;
> +	igt_output_set_pipe(output, pipe);
>  
>  	/* all green frame */
>  	igt_create_color_fb(data->drm_fd,
> @@ -263,6 +269,7 @@ static void cleanup(data_t *data)
>  igt_main
>  {
>  	data_t data = {};
> +	enum pipe pipe;
>  
>  	igt_fixture {
>  		struct itimerspec interval;
> @@ -287,12 +294,17 @@ igt_main
>  			      "Error enabling PSR2\n");
>  		data.op = FRONTBUFFER;
>  		data.format = DRM_FORMAT_XRGB8888;
> -		prepare(&data);
> -		r = psr_wait_entry(data.debugfs_fd, PSR_MODE_2);
> -		cleanup(&data);
> -		if (!r)
> -			psr_print_debugfs(data.debugfs_fd);
> -		igt_require_f(r, "PSR2 can not be enabled\n");
> +
> +		for_each_pipe_with_valid_output(&data.display, pipe,
> data.output) {
> +			if (pipe != PIPE_A)
> +				break;

Isn't "continue" more correct here? Why can't you just do
prepare(&data, PIPE_A) as anyways your loop is doing that? Maybe adding
more descriptive commit message would help me to understand what you
are doing here and why.

> +			prepare(&data, pipe);
> +			r = psr_wait_entry(data.debugfs_fd,
> PSR_MODE_2);
> +			cleanup(&data);
> +			if (!r)
> +				psr_print_debugfs(data.debugfs_fd);
> +			igt_require_f(r, "PSR2 can not be enabled\n");
> +		}
>  
>  		/* blocking timerfd */
>  		data.change_screen_timerfd =
> timerfd_create(CLOCK_MONOTONIC, 0);
> @@ -312,23 +324,29 @@ igt_main
>  		while (*format != DRM_FORMAT_INVALID) {
>  			data.format = *format++;
>  			igt_describe("Test that selective update works
> when screen changes");
> -			igt_subtest_f("%s-%s", op_str(data.op),
> igt_format_str(data.format)) {
> -				if (data.op == FRONTBUFFER &&
> -				    intel_display_ver(intel_get_drm_dev
> id(data.drm_fd)) >= 12) {
> -					/*
> -					 * FIXME: Display 12+ platforms
> now have PSR2
> -					 * selective fetch enabled by
> default but we
> -					 * still can't properly handle
> frontbuffer
> -					 * rendering, so right it does
> full frame
> -					 * fetches at every frontbuffer
> rendering.
> -					 * So it is expected that this
> test will fail
> -					 * in display 12+ platform for
> now.
> -					 */
> -					igt_skip("PSR2 selective fetch
> is doing full frame fetches for frontbuffer rendering\n");
> +			igt_subtest_with_dynamic_f("%s-%s",
> op_str(data.op), igt_format_str(data.format)) {
> +				for_each_pipe_with_valid_output(&data.d
> isplay, pipe, data.output) {
> +					if (pipe != PIPE_A)
> +		                                break;

Same comment here as above.

> +					igt_dynamic_f("pipe-%s",
> kmstest_pipe_name(pipe)) {
> +						if (data.op ==
> FRONTBUFFER &&
> +						    intel_display_ver(i
> ntel_get_drm_devid(data.drm_fd)) >= 12) {
> +						/*
> +						 * FIXME: Display 12+
> platforms now have PSR2
> +						 * selective fetch
> enabled by default but we
> +						 * still can't properly
> handle frontbuffer
> +						 * rendering, so right
> it does full frame
> +						 * fetches at every
> frontbuffer rendering.
> +						 * So it is expected
> that this test will fail
> +						 * in display 12+
> platform for now.
> +						 */
> +						igt_skip("PSR2
> selective fetch is doing full frame fetches for frontbuffer
> rendering\n");
> +						}
> +					prepare(&data, pipe);
> +					run(&data);
> +					cleanup(&data);
> +					}
>  				}
> -				prepare(&data);
> -				run(&data);
> -				cleanup(&data);
>  			}
>  		}
>  	}

BR,

Jouni Högander


More information about the igt-dev mailing list