From: CQ Tang <cq.tang@xxxxxxxxx> We have three memory region types: INTEL_SMEM, INTEL_LMEM, and INTEL_STOLEN. We also have two types of memory: system memory and device memory (or called local memory). Memory region with type INTEL_SMEM only has system memory; the other two types of memory regions could have either system memory or device memory. This function is used to distinguish real local device memory or system memory (including fake local memmory and bios stolen system memory) for INTEL_LMEM and INTEL_STOLEN memory region type. PPGTT will program PTE_LM bit based on this value. Cc: Joonas Lahtinen <joonas.lahtinen@xxxxxxxxxxxxxxx> Cc: Matthew Auld <matthew.auld@xxxxxxxxx> Cc: Abdiel Janulgue <abdiel.janulgue@xxxxxxxxxxxxxxx> Cc: Chris P Wilson <chris.p.wilson@xxxxxxxxx> Cc: Francesco Balestrieri <francesco.balestrieri@xxxxxxxxx> Cc: Niranjana Vishwanathapura <niranjana.vishwanathapura@xxxxxxxxx> Cc: Venkata S Dhanalakota <venkata.s.dhanalakota@xxxxxxxxx> Cc: Neel Desai <neel.desai@xxxxxxxxx> Cc: Matthew Brost <matthew.brost@xxxxxxxxx> Cc: Sudeep Dutt <sudeep.dutt@xxxxxxxxx> Signed-off-by: CQ Tang <cq.tang@xxxxxxxxx> --- drivers/gpu/drm/i915/gem/i915_gem_lmem.c | 11 ++++++++++- drivers/gpu/drm/i915/gem/i915_gem_lmem.h | 1 + drivers/gpu/drm/i915/gt/intel_ggtt.c | 2 +- drivers/gpu/drm/i915/gt/intel_ppgtt.c | 2 +- drivers/gpu/drm/i915/intel_memory_region.h | 1 + drivers/gpu/drm/i915/intel_region_lmem.c | 3 +++ 6 files changed, 17 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/i915/gem/i915_gem_lmem.c b/drivers/gpu/drm/i915/gem/i915_gem_lmem.c index 840b68eb10d3..e56874e54fde 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_lmem.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_lmem.c @@ -217,7 +217,16 @@ i915_gem_object_lmem_io_map_page_atomic(struct drm_i915_gem_object *obj, bool i915_gem_object_is_lmem(struct drm_i915_gem_object *obj) { - return obj->ops == &i915_gem_lmem_obj_ops; + struct intel_memory_region *region = obj->mm.region; + + return region && (region->is_devmem || region->type == INTEL_MEMORY_LOCAL); +} + +bool i915_gem_object_is_devmem(struct drm_i915_gem_object *obj) +{ + struct intel_memory_region *region = obj->mm.region; + + return region && region->is_devmem; } struct drm_i915_gem_object * diff --git a/drivers/gpu/drm/i915/gem/i915_gem_lmem.h b/drivers/gpu/drm/i915/gem/i915_gem_lmem.h index a24d94bc380f..a1b6a10050bf 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_lmem.h +++ b/drivers/gpu/drm/i915/gem/i915_gem_lmem.h @@ -21,6 +21,7 @@ i915_gem_object_lmem_io_map_page_atomic(struct drm_i915_gem_object *obj, unsigned long n); bool i915_gem_object_is_lmem(struct drm_i915_gem_object *obj); +bool i915_gem_object_is_devmem(struct drm_i915_gem_object *obj); struct drm_i915_gem_object * i915_gem_object_create_lmem(struct drm_i915_private *i915, diff --git a/drivers/gpu/drm/i915/gt/intel_ggtt.c b/drivers/gpu/drm/i915/gt/intel_ggtt.c index 26aa5debd7e9..eed5b640e493 100644 --- a/drivers/gpu/drm/i915/gt/intel_ggtt.c +++ b/drivers/gpu/drm/i915/gt/intel_ggtt.c @@ -456,7 +456,7 @@ static void ggtt_bind_vma(struct i915_address_space *vm, pte_flags = 0; if (vma->vm->has_read_only && i915_gem_object_is_readonly(obj)) pte_flags |= PTE_READ_ONLY; - if (i915_gem_object_is_lmem(obj)) + if (i915_gem_object_is_devmem(obj)) pte_flags |= PTE_LM; vm->insert_entries(vm, vma, cache_level, pte_flags); diff --git a/drivers/gpu/drm/i915/gt/intel_ppgtt.c b/drivers/gpu/drm/i915/gt/intel_ppgtt.c index 731d8730fa5f..34a02643bb75 100644 --- a/drivers/gpu/drm/i915/gt/intel_ppgtt.c +++ b/drivers/gpu/drm/i915/gt/intel_ppgtt.c @@ -195,7 +195,7 @@ void ppgtt_bind_vma(struct i915_address_space *vm, pte_flags = 0; if (i915_gem_object_is_readonly(vma->obj)) pte_flags |= PTE_READ_ONLY; - if (i915_gem_object_is_lmem(vma->obj)) + if (i915_gem_object_is_devmem(vma->obj)) pte_flags |= PTE_LM; vm->insert_entries(vm, vma, cache_level, pte_flags); diff --git a/drivers/gpu/drm/i915/intel_memory_region.h b/drivers/gpu/drm/i915/intel_memory_region.h index 20431d3ce490..ed827c770d47 100644 --- a/drivers/gpu/drm/i915/intel_memory_region.h +++ b/drivers/gpu/drm/i915/intel_memory_region.h @@ -92,6 +92,7 @@ struct intel_memory_region { enum intel_region_id id; char name[8]; struct intel_gt *gt; /* GT closest to this region. */ + bool is_devmem; /* true for device memory */ dma_addr_t remap_addr; diff --git a/drivers/gpu/drm/i915/intel_region_lmem.c b/drivers/gpu/drm/i915/intel_region_lmem.c index 7f2b31d469b0..939cf0d195a5 100644 --- a/drivers/gpu/drm/i915/intel_region_lmem.c +++ b/drivers/gpu/drm/i915/intel_region_lmem.c @@ -166,6 +166,9 @@ setup_lmem(struct drm_i915_private *dev_priv) (u64)mem->io_start); DRM_INFO("Intel graphics LMEM size: %llx\n", (u64)lmem_size); + + /* this is real device memory */ + mem->is_devmem = true; } return mem; -- 2.26.2 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx