[igt-dev] [PATCH i-g-t 4/4] tests/kms_ccs: Test random CCS data

Juha-Pekka Heikkila juhapekka.heikkila at gmail.com
Wed Feb 24 19:53:29 UTC 2021


Set look ok to me, all 4 patches

Reviewed-by: Juha-Pekka Heikkila <juhapekka.heikkila at gmail.com>


On 23.2.2021 23.09, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala at linux.intel.com>
> 
> Fill the fb with random data to make sure the hw doesn't
> fall over when fed with garbage.
> 
> Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
> ---
>   tests/kms_ccs.c | 53 ++++++++++++++++++++++++++++++++++++++++++++-----
>   1 file changed, 48 insertions(+), 5 deletions(-)
> 
> diff --git a/tests/kms_ccs.c b/tests/kms_ccs.c
> index c0b024744ad1..30e0fdb54f9e 100644
> --- a/tests/kms_ccs.c
> +++ b/tests/kms_ccs.c
> @@ -40,6 +40,7 @@ enum test_flags {
>   	TEST_NO_AUX_BUFFER		= 1 << 5,
>   	TEST_BAD_CCS_HANDLE		= 1 << 6,
>   	TEST_BAD_AUX_STRIDE		= 1 << 7,
> +	TEST_RANDOM			= 1 << 8,
>   };
>   
>   #define TEST_FAIL_ON_ADDFB2 \
> @@ -52,6 +53,7 @@ enum test_fb_flags {
>   	FB_MISALIGN_AUX_STRIDE		= 1 << 2,
>   	FB_SMALL_AUX_STRIDE		= 1 << 3,
>   	FB_ZERO_AUX_STRIDE		= 1 << 4,
> +	FB_RANDOM			= 1 << 5,
>   };
>   
>   typedef struct {
> @@ -64,6 +66,8 @@ typedef struct {
>   	igt_pipe_crc_t *pipe_crc;
>   	uint32_t format;
>   	uint64_t ccs_modifier;
> +	unsigned int seed;
> +	bool user_seed;
>   } data_t;
>   
>   static const struct {
> @@ -204,6 +208,22 @@ static void check_all_ccs_planes(int drm_fd, igt_fb_t *fb, const float *cc_color
>   	}
>   }
>   
> +static void fill_fb_random(int drm_fd, igt_fb_t *fb)
> +{
> +	void *map;
> +	uint8_t *p;
> +	int i;
> +
> +	gem_set_domain(drm_fd, fb->gem_handle, I915_GEM_DOMAIN_CPU, I915_GEM_DOMAIN_CPU);
> +
> +	p = map = gem_mmap__cpu(drm_fd, fb->gem_handle, 0, fb->size, PROT_WRITE);
> +
> +	for (i = 0; i < fb->size; i++)
> +		p[i] = rand();
> +
> +	munmap(map, fb->size);
> +}
> +
>   static int get_ccs_plane_index(uint32_t format)
>   {
>   	int index = 1;
> @@ -303,7 +323,10 @@ static void generate_fb(data_t *data, struct igt_fb *fb,
>   		}
>   	}
>   
> -	if (!(data->flags & TEST_BAD_PIXEL_FORMAT)) {
> +	if (data->flags & TEST_RANDOM) {
> +		srand(data->seed);
> +		fill_fb_random(data->drm_fd, fb);
> +	} else if (!(data->flags & TEST_BAD_PIXEL_FORMAT)) {
>   		int c = !!data->plane;
>   
>   		if (is_ccs_cc_modifier(modifier)) {
> @@ -464,6 +487,9 @@ static int test_ccs(data_t *data)
>   		data->pipe_crc = NULL;
>   	}
>   
> +	if (data->flags & TEST_RANDOM)
> +		valid_tests += try_config(data, fb_flags | FB_COMPRESSED | FB_RANDOM, NULL);
> +
>   	if (data->flags & TEST_BAD_PIXEL_FORMAT ||
>   	    data->flags & TEST_BAD_ROTATION_90 ||
>   	    data->flags & TEST_NO_AUX_BUFFER ||
> @@ -513,14 +539,18 @@ static void test_output(data_t *data)
>   	igt_require_f(valid_tests > 0, "CCS not supported, skipping\n");
>   }
>   
> -static data_t data;
> -
>   static int opt_handler(int opt, int opt_index, void *opt_data)
>   {
> +	data_t *data = opt_data;
> +
>   	switch (opt) {
>   	case 'c':
>   		check_ccs_planes = true;
>   		break;
> +	case 's':
> +		data->user_seed = true;
> +		data->seed = strtoul(optarg, NULL, 0);
> +		break;
>   	default:
>   		return IGT_OPT_HANDLER_ERROR;
>   	}
> @@ -528,11 +558,14 @@ static int opt_handler(int opt, int opt_index, void *opt_data)
>   	return IGT_OPT_HANDLER_SUCCESS;
>   }
>   
> +static data_t data;
> +
>   static const char *help_str =
> -"  -c\tCheck the presence of compression meta-data\n"
> +"  -c\t\tCheck the presence of compression meta-data\n"
> +"  -s <seed>\tSeed for random number generator\n"
>   ;
>   
> -igt_main_args("c", NULL, help_str, opt_handler, NULL)
> +igt_main_args("cs:", NULL, help_str, opt_handler, &data)
>   {
>   	enum pipe pipe;
>   
> @@ -544,6 +577,9 @@ igt_main_args("c", NULL, help_str, opt_handler, NULL)
>   		igt_require_pipe_crc(data.drm_fd);
>   
>   		igt_display_require(&data.display, data.drm_fd);
> +
> +		if (!data.user_seed)
> +			data.seed = time(NULL);
>   	}
>   
>   	for_each_pipe_static(pipe) {
> @@ -588,6 +624,13 @@ igt_main_args("c", NULL, help_str, opt_handler, NULL)
>   
>   		data.plane = NULL;
>   
> +		data.flags = TEST_RANDOM;
> +		igt_describe("Test random CCS data");
> +		igt_subtest_f("pipe-%s-random-ccs-data", pipe_name) {
> +			igt_info("Testing with seed %d\n", data.seed);
> +			test_output(&data);
> +		}
> +
>   		data.flags = TEST_NO_AUX_BUFFER;
>   		igt_describe("Test missing CCS buffer with given CCS modifier");
>   		igt_subtest_f("pipe-%s-missing-ccs-buffer", pipe_name)
> 



More information about the igt-dev mailing list