[igt-dev] [PATCH i-g-t v2 2/2] tests/kms_pipe_crc_basic: Add disable-crc-after-crtc-pipe-* tests

Jeremy Cline jcline at redhat.com
Tue Aug 25 19:45:06 UTC 2020


On Tue, Aug 18, 2020 at 03:35:28PM -0400, Lyude wrote:
> From: Lyude Paul <lyude at redhat.com>
> 
> I ended up hitting some bugs when writing nouveau's CRC implementation
> due to incorrectly handling the situation where we disable CRCs on a
> pipe that already been disabled, which ended up causing some other vague
> igt issues when running certain tests in multi-mode.
> 
> So, let's add a trivial test for this scenario while we're at it.
> 
> v2:
> * Rebased
> * Write test description for new tests
> 
> Signed-off-by: Lyude Paul <lyude at redhat.com>
> ---
>  tests/kms_pipe_crc_basic.c | 40 ++++++++++++++++++++++++++++++++++++++
>  1 file changed, 40 insertions(+)
> 
> diff --git a/tests/kms_pipe_crc_basic.c b/tests/kms_pipe_crc_basic.c
> index 53d76df1..e584dca9 100644
> --- a/tests/kms_pipe_crc_basic.c
> +++ b/tests/kms_pipe_crc_basic.c
> @@ -221,6 +221,41 @@ static void test_compare_crc(data_t *data, enum pipe pipe)
>  	igt_remove_fb(data->drm_fd, &fb1);
>  }
>  
> +static void test_disable_crc_after_crtc(data_t *data, enum pipe pipe)
> +{
> +	igt_display_t *display = &data->display;
> +	igt_output_t *output = igt_get_single_output_for_pipe(&data->display, pipe);
> +	igt_pipe_crc_t *pipe_crc = igt_pipe_crc_new(data->drm_fd, pipe, "auto");
> +	drmModeModeInfo *mode = igt_output_get_mode(output);
> +	igt_crc_t crc[2];
> +
> +	igt_display_reset(display);
> +	igt_output_set_pipe(output, pipe);
> +
> +	igt_create_color_fb(data->drm_fd,
> +			    mode->hdisplay, mode->vdisplay,
> +			    DRM_FORMAT_XRGB8888,
> +			    LOCAL_DRM_FORMAT_MOD_NONE,
> +			    0.0, 1.0, 0.0, &data->fb);

The API docs indicate this could return a negative error code. I'm not
sure what errors there could be so I don't know if it's worth adding a
check here, but just something to consider. It looks like much (all?)
the existing code doesn't check so I guess it's not that problematic.

> +	igt_plane_set_fb(igt_output_get_plane(output, 0), &data->fb);
> +	igt_display_commit(display);
> +
> +	igt_pipe_crc_start(pipe_crc);
> +	igt_pipe_crc_get_current(data->drm_fd, pipe_crc, &crc[0]);
> +
> +	kmstest_set_connector_dpms(data->drm_fd, output->config.connector,
> +				   DRM_MODE_DPMS_OFF);
> +	igt_pipe_crc_stop(pipe_crc);
> +
> +	kmstest_set_connector_dpms(data->drm_fd, output->config.connector,
> +				   DRM_MODE_DPMS_ON);
> +	igt_pipe_crc_collect_crc(pipe_crc, &crc[1]);
> +	igt_assert_crc_equal(&crc[0], &crc[1]);
> +
> +	igt_pipe_crc_free(pipe_crc);
> +	igt_remove_fb(data->drm_fd, &data->fb);
> +}
> +
>  data_t data = {0, };
>  
>  igt_main
> @@ -265,6 +300,11 @@ igt_main
>  			test_read_crc(&data, pipe, 0);
>  		}
>  
> +		igt_describe("Check that disabling CRCs on a CRTC after having disabled the CRTC "
> +			     "does not cause issues.");
> +		igt_subtest_f("disable-crc-after-crtc-pipe-%s", kmstest_pipe_name(pipe))
> +			test_disable_crc_after_crtc(&data, pipe);
> +
>  		igt_subtest_f("hang-read-crc-pipe-%s", kmstest_pipe_name(pipe)) {
>  			igt_hang_t hang = igt_allow_hang(data.drm_fd, 0, 0);
>  
> -- 
> 2.26.2
> 

Reviewed-by: Jeremy Cline <jcline at redhat.com>



More information about the igt-dev mailing list