Commit e7dc1341 authored by Matthew Auld's avatar Matthew Auld Committed by Rodrigo Vivi

drm/xe/bo: refactor try_add_vram

Get rid of some of the duplication here. In a future patch we need to
also consider [fpfn, lpfn], so better adjust in only one place.
Suggested-by: default avatarJosé Roberto de Souza <jose.souza@intel.com>
Signed-off-by: default avatarMatthew Auld <matthew.auld@intel.com>
Reviewed-by: default avatarJosé Roberto de Souza <jose.souza@intel.com>
Reviewed-by: default avatarGwan-gyeong Mun <gwan-gyeong.mun@intel.com>
Signed-off-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
parent 8deba79f
...@@ -106,17 +106,15 @@ static void try_add_system(struct xe_bo *bo, struct ttm_place *places, ...@@ -106,17 +106,15 @@ static void try_add_system(struct xe_bo *bo, struct ttm_place *places,
} }
} }
static void try_add_vram0(struct xe_device *xe, struct xe_bo *bo, static void add_vram(struct xe_device *xe, struct xe_bo *bo,
struct ttm_place *places, u32 bo_flags, u32 *c) struct ttm_place *places, u32 bo_flags, u32 mem_type, u32 *c)
{ {
struct xe_gt *gt; struct xe_gt *gt = mem_type_to_gt(xe, mem_type);
if (bo_flags & XE_BO_CREATE_VRAM0_BIT) {
gt = mem_type_to_gt(xe, XE_PL_VRAM0);
XE_BUG_ON(!gt->mem.vram.size); XE_BUG_ON(!gt->mem.vram.size);
places[*c] = (struct ttm_place) { places[*c] = (struct ttm_place) {
.mem_type = XE_PL_VRAM0, .mem_type = mem_type,
/* /*
* For eviction / restore on suspend / resume objects * For eviction / restore on suspend / resume objects
* pinned in VRAM must be contiguous * pinned in VRAM must be contiguous
...@@ -128,33 +126,22 @@ static void try_add_vram0(struct xe_device *xe, struct xe_bo *bo, ...@@ -128,33 +126,22 @@ static void try_add_vram0(struct xe_device *xe, struct xe_bo *bo,
*c += 1; *c += 1;
if (bo->props.preferred_mem_type == XE_BO_PROPS_INVALID) if (bo->props.preferred_mem_type == XE_BO_PROPS_INVALID)
bo->props.preferred_mem_type = XE_PL_VRAM0; bo->props.preferred_mem_type = mem_type;
}
} }
static void try_add_vram1(struct xe_device *xe, struct xe_bo *bo, static void try_add_vram(struct xe_device *xe, struct xe_bo *bo,
struct ttm_place *places, u32 bo_flags, u32 *c) struct ttm_place *places, u32 bo_flags, u32 *c)
{ {
struct xe_gt *gt; if (bo->props.preferred_gt == XE_GT1) {
if (bo_flags & XE_BO_CREATE_VRAM1_BIT)
if (bo_flags & XE_BO_CREATE_VRAM1_BIT) { add_vram(xe, bo, places, bo_flags, XE_PL_VRAM1, c);
gt = mem_type_to_gt(xe, XE_PL_VRAM1); if (bo_flags & XE_BO_CREATE_VRAM0_BIT)
XE_BUG_ON(!gt->mem.vram.size); add_vram(xe, bo, places, bo_flags, XE_PL_VRAM0, c);
} else {
places[*c] = (struct ttm_place) { if (bo_flags & XE_BO_CREATE_VRAM0_BIT)
.mem_type = XE_PL_VRAM1, add_vram(xe, bo, places, bo_flags, XE_PL_VRAM0, c);
/* if (bo_flags & XE_BO_CREATE_VRAM1_BIT)
* For eviction / restore on suspend / resume objects add_vram(xe, bo, places, bo_flags, XE_PL_VRAM1, c);
* pinned in VRAM must be contiguous
*/
.flags = bo_flags & (XE_BO_CREATE_PINNED_BIT |
XE_BO_CREATE_GGTT_BIT) ?
TTM_PL_FLAG_CONTIGUOUS : 0,
};
*c += 1;
if (bo->props.preferred_mem_type == XE_BO_PROPS_INVALID)
bo->props.preferred_mem_type = XE_PL_VRAM1;
} }
} }
...@@ -184,20 +171,9 @@ static int __xe_bo_placement_for_flags(struct xe_device *xe, struct xe_bo *bo, ...@@ -184,20 +171,9 @@ static int __xe_bo_placement_for_flags(struct xe_device *xe, struct xe_bo *bo,
if (bo->props.preferred_mem_class == XE_MEM_REGION_CLASS_SYSMEM) { if (bo->props.preferred_mem_class == XE_MEM_REGION_CLASS_SYSMEM) {
try_add_system(bo, places, bo_flags, &c); try_add_system(bo, places, bo_flags, &c);
if (bo->props.preferred_gt == XE_GT1) { try_add_vram(xe, bo, places, bo_flags, &c);
try_add_vram1(xe, bo, places, bo_flags, &c);
try_add_vram0(xe, bo, places, bo_flags, &c);
} else {
try_add_vram0(xe, bo, places, bo_flags, &c);
try_add_vram1(xe, bo, places, bo_flags, &c);
}
} else if (bo->props.preferred_gt == XE_GT1) {
try_add_vram1(xe, bo, places, bo_flags, &c);
try_add_vram0(xe, bo, places, bo_flags, &c);
try_add_system(bo, places, bo_flags, &c);
} else { } else {
try_add_vram0(xe, bo, places, bo_flags, &c); try_add_vram(xe, bo, places, bo_flags, &c);
try_add_vram1(xe, bo, places, bo_flags, &c);
try_add_system(bo, places, bo_flags, &c); try_add_system(bo, places, bo_flags, &c);
} }
try_add_stolen(xe, bo, places, bo_flags, &c); try_add_stolen(xe, bo, places, bo_flags, &c);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment