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,
}
}
static void try_add_vram0(struct xe_device *xe, struct xe_bo *bo,
struct ttm_place *places, u32 bo_flags, u32 *c)
static void add_vram(struct xe_device *xe, struct xe_bo *bo,
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);
places[*c] = (struct ttm_place) {
.mem_type = XE_PL_VRAM0,
.mem_type = mem_type,
/*
* For eviction / restore on suspend / resume objects
* pinned in VRAM must be contiguous
......@@ -128,33 +126,22 @@ static void try_add_vram0(struct xe_device *xe, struct xe_bo *bo,
*c += 1;
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 xe_gt *gt;
if (bo_flags & XE_BO_CREATE_VRAM1_BIT) {
gt = mem_type_to_gt(xe, XE_PL_VRAM1);
XE_BUG_ON(!gt->mem.vram.size);
places[*c] = (struct ttm_place) {
.mem_type = XE_PL_VRAM1,
/*
* For eviction / restore on suspend / resume objects
* 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;
if (bo->props.preferred_gt == XE_GT1) {
if (bo_flags & XE_BO_CREATE_VRAM1_BIT)
add_vram(xe, bo, places, bo_flags, XE_PL_VRAM1, c);
if (bo_flags & XE_BO_CREATE_VRAM0_BIT)
add_vram(xe, bo, places, bo_flags, XE_PL_VRAM0, c);
} else {
if (bo_flags & XE_BO_CREATE_VRAM0_BIT)
add_vram(xe, bo, places, bo_flags, XE_PL_VRAM0, c);
if (bo_flags & XE_BO_CREATE_VRAM1_BIT)
add_vram(xe, bo, places, bo_flags, XE_PL_VRAM1, c);
}
}
......@@ -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) {
try_add_system(bo, places, bo_flags, &c);
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);
} 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);
try_add_vram(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);
try_add_vram(xe, bo, places, bo_flags, &c);
try_add_system(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