From: Robert Mazur <robert.mazur@imgtec.com>
To: <igt-dev@lists.freedesktop.org>
Cc: Alessio Belle <alessio.belle@imgtec.com>,
Luigi Santivetti <luigi.santivetti@imgtec.com>,
Brajesh Gupta <brajesh.gupta@imgtec.com>,
Robert Mazur <robert.mazur@imgtec.com>,
Donald Robson <donald.robson@imgtec.com>
Subject: [PATCH i-g-t v3 09/10] tests/imagination: Add DEV_QUERY quirks and enhancements tests
Date: Fri, 17 Jul 2026 16:21:41 +0200 [thread overview]
Message-ID: <20260717-test-imagination-add-support-v3-9-ce69f9ad330c@imgtec.com> (raw)
In-Reply-To: <20260717-test-imagination-add-support-v3-0-ce69f9ad330c@imgtec.com>
From: Donald Robson <donald.robson@imgtec.com>
Add subtests for DEV_QUERY quirks and enhancements: array copy
and invalid padding error paths.
Signed-off-by: Donald Robson <donald.robson@imgtec.com>
Signed-off-by: Robert Mazur <robert.mazur@imgtec.com>
---
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
next prev parent reply other threads:[~2026-07-17 14:27 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-17 14:21 [PATCH i-g-t v3 00/10] tests/imagination: Add initial test coverage for Imagination DRM driver Robert Mazur
2026-07-17 14:21 ` [PATCH i-g-t v3 01/10] tests/imagination: Add framework for Imagination tests Robert Mazur
2026-07-17 14:21 ` [PATCH i-g-t v3 02/10] tests/imagination: Add GEM mmap tests Robert Mazur
2026-07-17 14:21 ` [PATCH i-g-t v3 03/10] tests/imagination: Add DEV_QUERY tests Robert Mazur
2026-07-17 14:21 ` [PATCH i-g-t v3 04/10] tests/imagination: Add GPU ID test Robert Mazur
2026-07-17 14:21 ` [PATCH i-g-t v3 05/10] tests/imagination: Add DEV_QUERY heap info tests Robert Mazur
2026-07-17 14:21 ` [PATCH i-g-t v3 06/10] tests/imagination: Add DEV_QUERY static data area tests Robert Mazur
2026-07-17 14:21 ` [PATCH i-g-t v3 07/10] tests/imagination: Add VM_CONTEXT tests Robert Mazur
2026-07-17 14:21 ` [PATCH i-g-t v3 08/10] tests/imagination: Add tests for free list and hwrt creation ioctls Robert Mazur
2026-07-17 14:21 ` Robert Mazur [this message]
2026-07-17 14:21 ` [PATCH i-g-t v3 10/10] tests/imagination: Add DEV_QUERY runtime_info tests Robert Mazur
2026-07-17 21:16 ` ✓ i915.CI.BAT: success for tests/imagination: Add initial test coverage for Imagination DRM driver (rev3) Patchwork
2026-07-17 21:20 ` ✓ Xe.CI.BAT: " Patchwork
2026-07-18 4:13 ` ✓ Xe.CI.FULL: " Patchwork
2026-07-18 10:57 ` ✓ i915.CI.Full: " Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260717-test-imagination-add-support-v3-9-ce69f9ad330c@imgtec.com \
--to=robert.mazur@imgtec.com \
--cc=alessio.belle@imgtec.com \
--cc=brajesh.gupta@imgtec.com \
--cc=donald.robson@imgtec.com \
--cc=igt-dev@lists.freedesktop.org \
--cc=luigi.santivetti@imgtec.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox