]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/xe/uapi: Expose the L3 bank mask
authorFrancois Dugast <francois.dugast@intel.com>
Tue, 16 Apr 2024 14:50:37 +0000 (14:50 +0000)
committerMatt Roper <matthew.d.roper@intel.com>
Tue, 21 May 2024 16:01:40 +0000 (09:01 -0700)
The L3 bank mask is already generated and stored internally with
the rest of the GT topology. In user space, the compute runtime
now needs this information to be added to the device properties
therefore the topology mask query is extended to provide a new
mask which represents the L3 banks enabled on the GT.

The changes in the compute runtime are ready and approved, see
link below.

v2: Rewrite commit message and add a link to the compute
    runtime PR (Francois Dugast)

Cc: Matt Roper <matthew.d.roper@intel.com>
Cc: Robert Krzemien <robert.krzemien@intel.com>
Cc: Mateusz Jablonski <mateusz.jablonski@intel.com>
Link: https://github.com/intel/compute-runtime/pull/722
Signed-off-by: Francois Dugast <francois.dugast@intel.com>
Acked-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
Reviewed-by: José Roberto de Souza <jose.souza@intel.com>
Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240416145037.7-2-francois.dugast@intel.com
drivers/gpu/drm/xe/xe_query.c
include/uapi/drm/xe_drm.h

index 29f847debb5cd3938ac8889e7a3b7236538beaae..995effcb904b04534c7f38ec7ca56cbf8f853e24 100644 (file)
@@ -455,9 +455,10 @@ static int query_hwconfig(struct xe_device *xe,
 static size_t calc_topo_query_size(struct xe_device *xe)
 {
        return xe->info.gt_count *
-               (3 * sizeof(struct drm_xe_query_topology_mask) +
+               (4 * sizeof(struct drm_xe_query_topology_mask) +
                 sizeof_field(struct xe_gt, fuse_topo.g_dss_mask) +
                 sizeof_field(struct xe_gt, fuse_topo.c_dss_mask) +
+                sizeof_field(struct xe_gt, fuse_topo.l3_bank_mask) +
                 sizeof_field(struct xe_gt, fuse_topo.eu_mask_per_dss));
 }
 
@@ -511,6 +512,12 @@ static int query_gt_topology(struct xe_device *xe,
                if (err)
                        return err;
 
+               topo.type = DRM_XE_TOPO_L3_BANK;
+               err = copy_mask(&query_ptr, &topo, gt->fuse_topo.l3_bank_mask,
+                               sizeof(gt->fuse_topo.l3_bank_mask));
+               if (err)
+                       return err;
+
                topo.type = DRM_XE_TOPO_EU_PER_DSS;
                err = copy_mask(&query_ptr, &topo,
                                gt->fuse_topo.eu_mask_per_dss,
index 1446c3bae5159e29ae5a637e4fb423983f352284..d7b0903c22b20d88e33cc5fc7c36181496e7cc94 100644 (file)
@@ -508,6 +508,7 @@ struct drm_xe_query_gt_list {
  *    containing the following in mask:
  *    ``DSS_COMPUTE    ff ff ff ff 00 00 00 00``
  *    means 32 DSS are available for compute.
+ *  - %DRM_XE_TOPO_L3_BANK - To query the mask of enabled L3 banks
  *  - %DRM_XE_TOPO_EU_PER_DSS - To query the mask of Execution Units (EU)
  *    available per Dual Sub Slices (DSS). For example a query response
  *    containing the following in mask:
@@ -520,6 +521,7 @@ struct drm_xe_query_topology_mask {
 
 #define DRM_XE_TOPO_DSS_GEOMETRY       1
 #define DRM_XE_TOPO_DSS_COMPUTE                2
+#define DRM_XE_TOPO_L3_BANK            3
 #define DRM_XE_TOPO_EU_PER_DSS         4
        /** @type: type of mask */
        __u16 type;