mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-21 20:10:14 +01:00
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@intel.com> Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17075>
This commit is contained in:
parent
1222c86e34
commit
4aecfbf0f4
2 changed files with 59 additions and 0 deletions
|
|
@ -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
|
static int
|
||||||
intel_get_aperture_size(int fd, uint64_t *size)
|
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);
|
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)
|
if (devinfo->platform == INTEL_PLATFORM_CHV)
|
||||||
fixup_chv_device_info(devinfo);
|
fixup_chv_device_info(devinfo);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -391,6 +391,18 @@ struct intel_device_info
|
||||||
* apply_hwconfig is true when the platform should apply hwconfig values
|
* apply_hwconfig is true when the platform should apply hwconfig values
|
||||||
*/
|
*/
|
||||||
bool apply_hwconfig;
|
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;
|
||||||
/** @} */
|
/** @} */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue