Re: [PATCH i-g-t v3 09/10] tests/imagination: Add DEV_QUERY quirks and enhancements tests

Kamil Konieczny <[email protected]>
Newsgroups org.freedesktop.lists.igt-dev
Message-ID <[email protected]>
Hi Robert,
On 2026-07-17 at 16:21:41 +0200, Robert Mazur wrote:
> From: Donald Robson <[email protected]>
> 
> Add subtests for DEV_QUERY quirks and enhancements: array copy

s/:/ for/

> and invalid padding error paths.
> 
> Signed-off-by: Donald Robson <[email protected]>
> Signed-off-by: Robert Mazur <[email protected]>

With above fixed this is
Acked-by: Kamil Konieczny <[email protected]>

Regards,
Kamil

> ---
>  tests/imagination/meson.build               |   1 +
>  tests/imagination/pvr_quirks_enhancements.c | 112 ++++++++++++++++++++++++++++
>  2 files changed, 113 insertions(+)
> 
> diff --git a/tests/imagination/meson.build b/tests/imagination/meson.build
> index 69ef0a8c6..dc08a5d8b 100644
> --- a/tests/imagination/meson.build
> +++ b/tests/imagination/meson.build
> @@ -4,6 +4,7 @@ pvr_progs = [ 'pvr_dev_query',
>  	      'pvr_gpu_info',
>  	      'pvr_heap_info',
>  	      'pvr_hwrt',
> +	      'pvr_quirks_enhancements',
>  	      'pvr_vm_context',
>  	    ]
>  
> diff --git a/tests/imagination/pvr_quirks_enhancements.c b/tests/imagination/pvr_quirks_enhancements.c
> new file mode 100644
> index 000000000..35e5ff190
> --- /dev/null
> +++ b/tests/imagination/pvr_quirks_enhancements.c
> @@ -0,0 +1,112 @@
> +// SPDX-License-Identifier: GPL-2.0 or MIT
> +/* Copyright (c) 2026 Imagination Technologies Ltd. All Rights Reserved */
> +
> +#include <errno.h>
> +#include <stdbool.h>
> +#include <stdint.h>
> +
> +#include "igt.h"
> +#include "igt_pvr.h"
> +
> +#include "pvr_drm.h"
> +
> +int igt_main()
> +{
> +	int fd;
> +
> +	igt_fixture()
> +	{
> +		fd = drm_open_driver(DRIVER_POWERVR);
> +	}
> +
> +	igt_describe("Test copying enhancements from the kernel");
> +	igt_subtest("enhancements-array-copy")
> +	{
> +		struct drm_pvr_dev_query_enhancements enhancements_get = {0};
> +		uint32_t *enhancements;
> +
> +		/* Enhancements. */
> +		igt_pvr_ioctl_dev_query(fd, DRM_PVR_DEV_QUERY_ENHANCEMENTS_GET,
> +					sizeof(enhancements_get),
> +					&enhancements_get, 0);
> +		/*
> +		 * Supplementary check - alloc one extra space as a watermark
> +		 * to check the copy does not overflow.  We only need to check
> +		 * this once for the whole UAPI, as a macro is used to do this.
> +		 */
> +		enhancements = calloc(enhancements_get.count + 1,
> +				      sizeof(*enhancements));
> +		igt_assert(enhancements);
> +
> +		/* Set watermark. */
> +		enhancements[enhancements_get.count] = 0xABCDEFAB;
> +
> +		enhancements_get.enhancements = (uint64_t)enhancements;
> +		igt_pvr_ioctl_dev_query(fd, DRM_PVR_DEV_QUERY_ENHANCEMENTS_GET,
> +					sizeof(enhancements_get),
> +					&enhancements_get, 0);
> +
> +		for (int i = 0; i < enhancements_get.count; i++)
> +			igt_assert_neq(enhancements[i], 0);
> +
> +		/* Check the watermark is intact. */
> +		igt_assert_eq(enhancements[enhancements_get.count], 0xABCDEFAB);
> +	}
> +
> +	igt_describe("Test copying quirks from the kernel");
> +	igt_subtest("quirks-array-copy")
> +	{
> +		struct drm_pvr_dev_query_quirks quirks_get = {0};
> +		uint32_t *quirks;
> +
> +		igt_pvr_ioctl_dev_query(fd, DRM_PVR_DEV_QUERY_QUIRKS_GET,
> +					sizeof(quirks_get), &quirks_get, 0);
> +		quirks = calloc(quirks_get.count, sizeof(*quirks));
> +		igt_assert(quirks);
> +
> +		quirks_get.quirks = (uint64_t)quirks;
> +		igt_pvr_ioctl_dev_query(fd, DRM_PVR_DEV_QUERY_QUIRKS_GET,
> +					sizeof(quirks_get),
> +					&quirks_get, 0);
> +
> +		for (int i = 0; i < quirks_get.count; i++)
> +			igt_assert_neq(quirks[i], 0);
> +
> +		igt_assert_lte(quirks_get.musthave_count, quirks_get.count);
> +	}
> +
> +	igt_describe("Test enhancements query with invalid padding");
> +	igt_subtest("enhancements-bad-padding")
> +	{
> +		struct drm_pvr_dev_query_enhancements enhancements_get = {
> +			._padding_a = 1,
> +		};
> +
> +		igt_pvr_ioctl_dev_query(fd, DRM_PVR_DEV_QUERY_ENHANCEMENTS_GET,
> +					sizeof(enhancements_get),
> +					&enhancements_get, EINVAL);
> +
> +		enhancements_get._padding_a = 0;
> +		enhancements_get._padding_c = 1;
> +
> +		igt_pvr_ioctl_dev_query(fd, DRM_PVR_DEV_QUERY_ENHANCEMENTS_GET,
> +					sizeof(enhancements_get),
> +					&enhancements_get, EINVAL);
> +	}
> +
> +	igt_describe("Test quirks query with invalid padding");
> +	igt_subtest("quirks-bad-padding")
> +	{
> +		struct drm_pvr_dev_query_quirks quirks_get = {
> +			._padding_c = 1,
> +		};
> +
> +		igt_pvr_ioctl_dev_query(fd, DRM_PVR_DEV_QUERY_QUIRKS_GET,
> +					sizeof(quirks_get), &quirks_get, EINVAL);
> +	}
> +
> +	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.