return tile->migrate;
}
-static struct xe_vram_region *res_to_mem_region(struct ttm_resource *res)
-{
- struct xe_device *xe = ttm_to_xe_device(res->bo->bdev);
- struct ttm_resource_manager *mgr;
- struct xe_ttm_vram_mgr *vram_mgr;
-
- xe_assert(xe, resource_is_vram(res));
- mgr = ttm_manager_type(&xe->ttm, res->mem_type);
- vram_mgr = to_xe_ttm_vram_mgr(mgr);
-
- return container_of(vram_mgr, struct xe_vram_region, ttm);
-}
-
static void try_add_system(struct xe_device *xe, struct xe_bo *bo,
u32 bo_flags, u32 *c)
{
return 0;
case XE_PL_VRAM0:
case XE_PL_VRAM1: {
- struct xe_vram_region *vram = res_to_mem_region(mem);
+ struct xe_vram_region *vram = xe_map_resource_to_region(mem);
if (!xe_ttm_resource_visible(mem))
return -EINVAL;
if (ttm_bo->resource->mem_type == XE_PL_STOLEN)
return xe_ttm_stolen_io_offset(bo, page_offset << PAGE_SHIFT) >> PAGE_SHIFT;
- vram = res_to_mem_region(ttm_bo->resource);
+ vram = xe_map_resource_to_region(ttm_bo->resource);
xe_res_first(ttm_bo->resource, (u64)page_offset << PAGE_SHIFT, 0, &cursor);
return (vram->io_start + cursor.start) >> PAGE_SHIFT;
}
goto out;
}
- vram = res_to_mem_region(ttm_bo->resource);
+ vram = xe_map_resource_to_region(ttm_bo->resource);
xe_res_first(ttm_bo->resource, offset & PAGE_MASK,
xe_bo_size(bo) - (offset & PAGE_MASK), &cursor);
case XE_PL_SYSTEM:
return 0;
default:
- return res_to_mem_region(res)->dpa_base;
+ return xe_map_resource_to_region(res)->dpa_base;
}
return 0;
}
struct xe_bo *bo = to_xe_bo(devmem_allocation);
struct ttm_resource *res = bo->ttm.resource;
struct list_head *blocks = &to_xe_ttm_vram_mgr_resource(res)->blocks;
+ struct xe_vram_region *vr = xe_map_resource_to_region(res);
+ struct gpu_buddy *buddy = vram_to_buddy(vr);
struct gpu_buddy_block *block;
int j = 0;
list_for_each_entry(block, blocks, link) {
- struct xe_vram_region *vr = block->private;
- struct gpu_buddy *buddy = vram_to_buddy(vr);
u64 block_pfn = block_offset_to_pfn(devmem_allocation->dpagemap,
gpu_buddy_block_offset(block));
int i;
struct dma_fence *pre_migrate_fence = NULL;
struct xe_device *xe = vr->xe;
struct device *dev = xe->drm.dev;
- struct gpu_buddy_block *block;
struct xe_validation_ctx vctx;
- struct list_head *blocks;
struct drm_exec exec;
struct xe_bo *bo;
int err = 0, idx;
&dpagemap_devmem_ops, dpagemap, end - start,
pre_migrate_fence);
- blocks = &to_xe_ttm_vram_mgr_resource(bo->ttm.resource)->blocks;
- list_for_each_entry(block, blocks, link)
- block->private = vr;
-
xe_bo_get(bo);
/* Ensure the device has a pm ref while there are device pages active. */
#include "regs/xe_gt_regs.h"
#include "regs/xe_regs.h"
#include "xe_assert.h"
+#include "xe_bo.h"
#include "xe_device.h"
#include "xe_force_wake.h"
#include "xe_gt_mcr.h"
return 0;
}
+/**
+ * xe_map_resource_to_region - Map ttm resource to vram memory region
+ * @res: The ttm resource
+ *
+ * Get vram memory region using vram memory manager managing this resource
+ *
+ * Returns: pointer to xe_vram_region
+ */
+struct xe_vram_region *xe_map_resource_to_region(struct ttm_resource *res)
+{
+ struct xe_device *xe = ttm_to_xe_device(res->bo->bdev);
+ struct ttm_resource_manager *mgr;
+ struct xe_ttm_vram_mgr *vram_mgr;
+
+ xe_assert(xe, mem_type_is_vram(res->mem_type));
+ mgr = ttm_manager_type(&xe->ttm, res->mem_type);
+ vram_mgr = to_xe_ttm_vram_mgr(mgr);
+
+ return container_of(vram_mgr, struct xe_vram_region, ttm);
+}
+
/**
* xe_vram_probe() - Probe VRAM configuration
* @xe: the &xe_device
struct xe_device;
struct xe_vram_region;
+struct ttm_resource;
+struct xe_vram_region *xe_map_resource_to_region(struct ttm_resource *res);
int xe_vram_probe(struct xe_device *xe);
struct xe_vram_region *xe_vram_region_alloc(struct xe_device *xe, u8 id, u32 placement);