[igt-dev] [PATCH v3] tests/xe_huc_copy: Handle multiple GTs
Daniele Ceraolo Spurio
daniele.ceraolospurio at intel.com
Mon Oct 16 20:37:50 UTC 2023
The test currently only looks for video engines on GT0, which is a
problem because newer platforms (like MTL) have their video engines on
the media GT. ALso, it is technically possible to have 1 HuC per-GT,
though we don't currently have any platform that supports this.
To handle the media GT use-case and to future proof against multiple
HuCs, we can just loop and repeat the test on any GT that has video
engines.
v2: mark the test as skipped if no video engines are found (Kamil)
v3: move the skip to after the vma destruction (Kamil)
Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio at intel.com>
Reviewed-by: Kamil Konieczny <kamil.konieczny at linux.intel.com>
---
tests/intel/xe_huc_copy.c | 28 ++++++++++++++++++++++++----
1 file changed, 24 insertions(+), 4 deletions(-)
diff --git a/tests/intel/xe_huc_copy.c b/tests/intel/xe_huc_copy.c
index c9891a729..15fd6b026 100644
--- a/tests/intel/xe_huc_copy.c
+++ b/tests/intel/xe_huc_copy.c
@@ -104,9 +104,9 @@ gen12_create_batch_huc_copy(uint32_t *batch,
*/
static void
-test_huc_copy(int fd)
+__test_huc_copy(int fd, uint32_t vm, struct drm_xe_engine_class_instance *hwe)
{
- uint32_t vm, exec_queue;
+ uint32_t exec_queue;
char *dinput;
struct drm_xe_sync sync = { 0 };
@@ -117,8 +117,7 @@ test_huc_copy(int fd)
{ .addr = ADDR_BATCH, .size = SIZE_BATCH }, // batch
};
- vm = xe_vm_create(fd, DRM_XE_VM_CREATE_ASYNC_BIND_OPS, 0);
- exec_queue = xe_exec_queue_create_class(fd, vm, DRM_XE_ENGINE_CLASS_VIDEO_DECODE);
+ exec_queue = xe_exec_queue_create(fd, vm, hwe, 0);
sync.flags = DRM_XE_SYNC_SYNCOBJ | DRM_XE_SYNC_SIGNAL;
sync.handle = syncobj_create(fd, 0);
@@ -148,7 +147,28 @@ test_huc_copy(int fd)
syncobj_destroy(fd, sync.handle);
xe_exec_queue_destroy(fd, exec_queue);
+}
+
+static void
+test_huc_copy(int fd)
+{
+ struct drm_xe_engine_class_instance *hwe;
+ uint32_t vm;
+ uint32_t tested_gts = 0;
+
+ vm = xe_vm_create(fd, DRM_XE_VM_CREATE_ASYNC_BIND_OPS, 0);
+
+ xe_for_each_hw_engine(fd, hwe) {
+ if (hwe->engine_class == DRM_XE_ENGINE_CLASS_VIDEO_DECODE &&
+ !(tested_gts & BIT(hwe->gt_id))) {
+ tested_gts |= BIT(hwe->gt_id);
+ __test_huc_copy(fd, vm, hwe);
+ }
+ }
+
xe_vm_destroy(fd, vm);
+
+ igt_require_f(tested_gts, "No video class engines found\n");
}
static bool
--
2.41.0
More information about the igt-dev
mailing list