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 >