Mesa (main): intel/dev: Add devinfo::mem to store i915 regions information

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Jun 22 01:14:11 UTC 2022


Module: Mesa
Branch: main
Commit: 4aecfbf0f4abd6932ae071c27bd8e6c3639b8dd1
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=4aecfbf0f4abd6932ae071c27bd8e6c3639b8dd1

Author: Jordan Justen <jordan.l.justen at intel.com>
Date:   Mon May 16 02:19:48 2022 -0700

intel/dev: Add devinfo::mem to store i915 regions information

Reworks:
 * Lionel: Change check on memory region valid to vram size
 * Jordan: Drop regions.valid (Lionel implemented a fallback)
 * Jordan: Rename devinfo::regions to devinfo::mem.
 * Jordan: Add devinfo::mem::use_class_instance
 * Add mesa_logw for lmem requiring regions. (s-b Lionel)

Signed-off-by: Jordan Justen <jordan.l.justen at intel.com>
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17075>

---

 src/intel/dev/intel_device_info.c | 47 +++++++++++++++++++++++++++++++++++++++
 src/intel/dev/intel_device_info.h | 12 ++++++++++
 2 files changed, 59 insertions(+)

diff --git a/src/intel/dev/intel_device_info.c b/src/intel/dev/intel_device_info.c
index 286b52b73b6..9a2f6b8ff72 100644
--- a/src/intel/dev/intel_device_info.c
+++ b/src/intel/dev/intel_device_info.c
@@ -1587,6 +1587,45 @@ query_topology(struct intel_device_info *devinfo, int fd)
 
 }
 
+/**
+ * Reports memory region info, and allows buffers to target system-memory,
+ * and/or device local memory.
+ */
+static bool
+query_regions(struct intel_device_info *devinfo, int fd)
+{
+   struct drm_i915_query_memory_regions *meminfo =
+      intel_i915_query_alloc(fd, DRM_I915_QUERY_MEMORY_REGIONS, NULL);
+   if (meminfo == NULL)
+      return false;
+
+   for (int i = 0; i < meminfo->num_regions; i++) {
+      const struct drm_i915_memory_region_info *mem = &meminfo->regions[i];
+      switch (mem->region.memory_class) {
+      case I915_MEMORY_CLASS_SYSTEM:
+         devinfo->mem.sram.mem_class = mem->region.memory_class;
+         devinfo->mem.sram.mem_instance = mem->region.memory_instance;
+         devinfo->mem.sram.mappable.size = mem->probed_size;
+         if (mem->unallocated_size != -1)
+            devinfo->mem.sram.mappable.free = mem->unallocated_size;
+         break;
+      case I915_MEMORY_CLASS_DEVICE:
+         devinfo->mem.vram.mem_class = mem->region.memory_class;
+         devinfo->mem.vram.mem_instance = mem->region.memory_instance;
+         devinfo->mem.vram.mappable.size = mem->probed_size;
+         if (mem->unallocated_size != -1)
+            devinfo->mem.vram.mappable.free = mem->unallocated_size;
+         break;
+      default:
+         break;
+      }
+   }
+
+   free(meminfo);
+   devinfo->mem.use_class_instance = true;
+   return true;
+}
+
 static int
 intel_get_aperture_size(int fd, uint64_t *size)
 {
@@ -1931,6 +1970,14 @@ intel_get_device_info_from_fd(int fd, struct intel_device_info *devinfo)
       getparam_topology(devinfo, fd);
    }
 
+   query_regions(devinfo, fd);
+
+   /* region info is required for lmem support */
+   if (devinfo->has_local_mem && !devinfo->mem.use_class_instance) {
+      mesa_logw("Could not query local memory size.");
+      return false;
+   }
+
    if (devinfo->platform == INTEL_PLATFORM_CHV)
       fixup_chv_device_info(devinfo);
 
diff --git a/src/intel/dev/intel_device_info.h b/src/intel/dev/intel_device_info.h
index 0426aa16dc4..cdea46cf2bf 100644
--- a/src/intel/dev/intel_device_info.h
+++ b/src/intel/dev/intel_device_info.h
@@ -391,6 +391,18 @@ struct intel_device_info
     * apply_hwconfig is true when the platform should apply hwconfig values
     */
    bool apply_hwconfig;
+
+   struct {
+      bool use_class_instance;
+      struct {
+         uint16_t mem_class;
+         uint16_t mem_instance;
+         struct {
+            uint64_t size;
+            uint64_t free;
+         } mappable;
+      } sram, vram;
+   } mem;
    /** @} */
 };
 



More information about the mesa-commit mailing list