drm/i915: Expose logical engine instance to user
authorMatthew Brost <matthew.brost@intel.com>
Thu, 14 Oct 2021 17:19:46 +0000 (10:19 -0700)
committerJohn Harrison <John.C.Harrison@Intel.com>
Fri, 15 Oct 2021 17:37:31 +0000 (10:37 -0700)
Expose logical engine instance to user via query engine info IOCTL. This
is required for split-frame workloads as these needs to be placed on
engines in a logically contiguous order. The logical mapping can change
based on fusing. Rather than having user have knowledge of the fusing we
simply just expose the logical mapping with the existing query engine
info IOCTL.

IGT: https://patchwork.freedesktop.org/patch/445637/?series=92854&rev=1
media UMD: https://github.com/intel/media-driver/pull/1252

v2:
 (Daniel Vetter)
  - Add IGT link, placeholder for media UMD

Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: John Harrison <John.C.Harrison@Intel.com>
Signed-off-by: John Harrison <John.C.Harrison@Intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20211014172005.27155-7-matthew.brost@intel.com
drivers/gpu/drm/i915/i915_query.c
include/uapi/drm/i915_drm.h

index 5e2b909827f44233e89a1f757407ac202c1f3116..51b368be0fc4a40fb1aaf42c0a9097e2b192251d 100644 (file)
@@ -124,7 +124,9 @@ query_engine_info(struct drm_i915_private *i915,
        for_each_uabi_engine(engine, i915) {
                info.engine.engine_class = engine->uabi_class;
                info.engine.engine_instance = engine->uabi_instance;
+               info.flags = I915_ENGINE_INFO_HAS_LOGICAL_INSTANCE;
                info.capabilities = engine->uabi_capabilities;
+               info.logical_instance = ilog2(engine->logical_mask);
 
                if (copy_to_user(info_ptr, &info, sizeof(info)))
                        return -EFAULT;
index aa2a7eccfb94439b92ac04d205299e714f823e14..0179f92e091699f21ccab8a70c1239e6140e1247 100644 (file)
@@ -2775,14 +2775,20 @@ struct drm_i915_engine_info {
 
        /** @flags: Engine flags. */
        __u64 flags;
+#define I915_ENGINE_INFO_HAS_LOGICAL_INSTANCE          (1 << 0)
 
        /** @capabilities: Capabilities of this engine. */
        __u64 capabilities;
 #define I915_VIDEO_CLASS_CAPABILITY_HEVC               (1 << 0)
 #define I915_VIDEO_AND_ENHANCE_CLASS_CAPABILITY_SFC    (1 << 1)
 
+       /** @logical_instance: Logical instance of engine */
+       __u16 logical_instance;
+
        /** @rsvd1: Reserved fields. */
-       __u64 rsvd1[4];
+       __u16 rsvd1[3];
+       /** @rsvd2: Reserved fields. */
+       __u64 rsvd2[3];
 };
 
 /**