Re: [PATCH i-g-t v3 06/10] tests/imagination: Add DEV_QUERY static data area tests

Kamil Konieczny <[email protected]>
Newsgroups org.freedesktop.lists.igt-dev
Message-ID <[email protected]>
Hi Robert,
On 2026-07-17 at 16:21:38 +0200, Robert Mazur wrote:
> From: Donald Robson <[email protected]>
> 
> Add subtest validating static data areas returned by DEV_QUERY.
> 
> Signed-off-by: Donald Robson <[email protected]>
> Signed-off-by: Robert Mazur <[email protected]>

LGTM
Acked-by: Kamil Konieczny <[email protected]>

Regards,
Kamil

> ---
>  lib/igt_pvr.c                     | 29 +++++++++++++++++++++++++++++
>  lib/igt_pvr.h                     |  2 ++
>  tests/imagination/pvr_heap_info.c | 39 +++++++++++++++++++++++++++++++++++++++
>  3 files changed, 70 insertions(+)
> 
> diff --git a/lib/igt_pvr.c b/lib/igt_pvr.c
> index a26b4edad..70fc71388 100644
> --- a/lib/igt_pvr.c
> +++ b/lib/igt_pvr.c
> @@ -135,3 +135,32 @@ igt_pvr_get_heap_info(int fd, uint32_t *array_len_out)
>  	return heaps;
>  }
>  
> +/**
> + * igt_pvr_get_static_data_areas:
> + * @fd: The file descriptor of the DRM device.
> + * @array_len_out: Pointer to store the number of static data areas.
> + *
> + * Function to get information about the device static data areas.
> + *
> + * Returns: An array of drm_pvr_static_data_area structures. The caller is responsible
> + * for freeing the array.
> + */
> +struct drm_pvr_static_data_area *
> +igt_pvr_get_static_data_areas(int fd, uint32_t *array_len_out)
> +{
> +	struct drm_pvr_static_data_area *sdas =
> +		calloc(DRM_PVR_STATIC_DATA_AREA_YUV_CSC + 1, sizeof(*sdas));
> +	struct drm_pvr_dev_query_static_data_areas sdas_get = {
> +		.static_data_areas =
> +			DRM_PVR_OBJ_ARRAY(DRM_PVR_STATIC_DATA_AREA_YUV_CSC + 1,
> +					  sdas),
> +	};
> +
> +	igt_pvr_ioctl_dev_query(fd, DRM_PVR_DEV_QUERY_STATIC_DATA_AREAS_GET,
> +				sizeof(sdas_get), &sdas_get, 0);
> +
> +	if (array_len_out)
> +		*array_len_out = sdas_get.static_data_areas.count;
> +
> +	return sdas;
> +}
> diff --git a/lib/igt_pvr.h b/lib/igt_pvr.h
> index ca09f39e1..19909480b 100644
> --- a/lib/igt_pvr.h
> +++ b/lib/igt_pvr.h
> @@ -18,5 +18,7 @@ igt_pvr_ioctl_dev_query(int fd, enum drm_pvr_dev_query type, uint64_t size,
>  			void *pointer, int expect_err);
>  struct drm_pvr_heap *
>  igt_pvr_get_heap_info(int fd, uint32_t *array_len_out);
> +struct drm_pvr_static_data_area *
> +igt_pvr_get_static_data_areas(int fd, uint32_t *array_len_out);
>  
>  #endif /* IGT_PVR_H */
> diff --git a/tests/imagination/pvr_heap_info.c b/tests/imagination/pvr_heap_info.c
> index 7d953044e..fa8591a97 100644
> --- a/tests/imagination/pvr_heap_info.c
> +++ b/tests/imagination/pvr_heap_info.c
> @@ -123,6 +123,45 @@ int igt_main()
>  		free(heaps);
>  	}
>  
> +	igt_describe("Test validity of static data areas");
> +	igt_subtest("heap-info-static-data-areas-valid")
> +	{
> +		uint32_t heaps_count = 0;
> +		struct drm_pvr_heap *heaps =
> +			igt_pvr_get_heap_info(fd, &heaps_count);
> +
> +		uint32_t sda_count = 0;
> +		struct drm_pvr_static_data_area *static_data_areas =
> +			igt_pvr_get_static_data_areas(fd, &sda_count);
> +
> +		igt_assert(heaps);
> +		igt_assert(static_data_areas);
> +
> +		for (uint32_t i = 0; i < sda_count; i++) {
> +			const uint64_t start_offset = static_data_areas[i].offset;
> +			const uint64_t end_offset =
> +				start_offset + static_data_areas[i].size;
> +			const struct drm_pvr_heap *const heap =
> +				&heaps[static_data_areas[i].location_heap_id];
> +
> +			igt_assert_lte(static_data_areas[i].area_usage,
> +				       DRM_PVR_STATIC_DATA_AREA_YUV_CSC);
> +			igt_assert_lt(static_data_areas[i].location_heap_id,
> +				      DRM_PVR_HEAP_COUNT);
> +
> +			if (!static_data_areas[i].size)
> +				/* Not present for device. */
> +				continue;
> +
> +			/* Ensure reported range is inside the heap. */
> +			igt_assert_lte_u64(start_offset, heap->size);
> +			igt_assert_lte_u64(end_offset, heap->size);
> +		}
> +
> +		free(heaps);
> +		free(static_data_areas);
> +	}
> +
>  	igt_fixture()
>  	{
>  		drm_close_driver(fd);
> 
> -- 
> 2.43.0
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.