drm/xe/uapi: Add DRM_XE_QUERY_CONFIG_FLAG_HAS_CPU_ADDR_MIRROR
authorMatthew Brost <matthew.brost@intel.com>
Thu, 6 Mar 2025 01:26:44 +0000 (17:26 -0800)
committerMatthew Brost <matthew.brost@intel.com>
Thu, 6 Mar 2025 19:35:52 +0000 (11:35 -0800)
Add the DRM_XE_QUERY_CONFIG_FLAG_HAS_CPU_ADDR_MIRROR device query flag,
which indicates whether the device supports CPU address mirroring. The
intent is for UMDs to use this query to determine if a VM can be set up
with CPU address mirroring. This flag is implemented by checking if the
device supports GPU faults.

v7:
 - Only report enabled if CONFIG_DRM_GPUSVM is selected (CI)

Signed-off-by: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
Reviewed-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Reviewed-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250306012657.3505757-20-matthew.brost@intel.com
drivers/gpu/drm/xe/xe_query.c
include/uapi/drm/xe_drm.h

index ce2a2767de1a3ae3d3161fda167faa1bad5acc92..5e65830dad25855fc72b564cd0d4d00743582123 100644 (file)
@@ -338,8 +338,11 @@ static int query_config(struct xe_device *xe, struct drm_xe_device_query *query)
        config->info[DRM_XE_QUERY_CONFIG_REV_AND_DEVICE_ID] =
                xe->info.devid | (xe->info.revid << 16);
        if (xe_device_get_root_tile(xe)->mem.vram.usable_size)
-               config->info[DRM_XE_QUERY_CONFIG_FLAGS] =
+               config->info[DRM_XE_QUERY_CONFIG_FLAGS] |=
                        DRM_XE_QUERY_CONFIG_FLAG_HAS_VRAM;
+       if (xe->info.has_usm && IS_ENABLED(CONFIG_DRM_GPUSVM))
+               config->info[DRM_XE_QUERY_CONFIG_FLAGS] |=
+                       DRM_XE_QUERY_CONFIG_FLAG_HAS_CPU_ADDR_MIRROR;
        config->info[DRM_XE_QUERY_CONFIG_FLAGS] |=
                        DRM_XE_QUERY_CONFIG_FLAG_HAS_LOW_LATENCY;
        config->info[DRM_XE_QUERY_CONFIG_MIN_ALIGNMENT] =
index acf92a367e3d5d0c806b8842fd2b04ec99bf66e7..616916985e3f307e5ba015606ed5171374a3111f 100644 (file)
@@ -395,6 +395,8 @@ struct drm_xe_query_mem_regions {
  *      has usable VRAM
  *    - %DRM_XE_QUERY_CONFIG_FLAG_HAS_LOW_LATENCY - Flag is set if the device
  *      has low latency hint support
+ *    - %DRM_XE_QUERY_CONFIG_FLAG_HAS_CPU_ADDR_MIRROR - Flag is set if the
+ *      device has CPU address mirroring support
  *  - %DRM_XE_QUERY_CONFIG_MIN_ALIGNMENT - Minimal memory alignment
  *    required by this device, typically SZ_4K or SZ_64K
  *  - %DRM_XE_QUERY_CONFIG_VA_BITS - Maximum bits of a virtual address
@@ -412,6 +414,7 @@ struct drm_xe_query_config {
 #define DRM_XE_QUERY_CONFIG_FLAGS                      1
        #define DRM_XE_QUERY_CONFIG_FLAG_HAS_VRAM       (1 << 0)
        #define DRM_XE_QUERY_CONFIG_FLAG_HAS_LOW_LATENCY        (1 << 1)
+       #define DRM_XE_QUERY_CONFIG_FLAG_HAS_CPU_ADDR_MIRROR    (1 << 2)
 #define DRM_XE_QUERY_CONFIG_MIN_ALIGNMENT              2
 #define DRM_XE_QUERY_CONFIG_VA_BITS                    3
 #define DRM_XE_QUERY_CONFIG_MAX_EXEC_QUEUE_PRIORITY    4