drm/xe: Move struct xe_vram_region to a dedicated header

[ Upstream commit 7a20b4f558 ]

Let's move the xe_vram_region structure to a new header dedicated to VRAM
to improve modularity and avoid unnecessary dependencies when only
VRAM-related structures are needed.

v2: Fix build if CONFIG_DRM_XE_DEVMEM_MIRROR is enabled
v3: Fix build if CONFIG_DRM_XE_DISPLAY is enabled
v4: Move helper to get tile dpagemap to xe_svm.c

Signed-off-by: Piotr Piórkowski <piotr.piorkowski@intel.com>
Suggested-by: Jani Nikula <jani.nikula@intel.com>
Reviewed-by: Satyanarayana K V P <satyanarayana.k.v.p@intel.com> # rev3
Acked-by: Matthew Brost <matthew.brost@intel.com>
Link: https://lore.kernel.org/r/20250714184818.89201-4-piotr.piorkowski@intel.com
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
Stable-dep-of: d30203739b ("drm/xe: Move rebar to be done earlier")
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Piotr Piórkowski
2025-10-21 09:34:25 -04:00
committed by Greg Kroah-Hartman
parent 31afb337c3
commit 1426f15c13
13 changed files with 91 additions and 72 deletions

View File

@@ -16,6 +16,7 @@
#include "xe_device.h" #include "xe_device.h"
#include "xe_ggtt.h" #include "xe_ggtt.h"
#include "xe_pm.h" #include "xe_pm.h"
#include "xe_vram_types.h"
static void static void
write_dpt_rotated(struct xe_bo *bo, struct iosys_map *map, u32 *dpt_ofs, u32 bo_ofs, write_dpt_rotated(struct xe_bo *bo, struct iosys_map *map, u32 *dpt_ofs, u32 bo_ofs,

View File

@@ -21,6 +21,7 @@
#include "intel_plane.h" #include "intel_plane.h"
#include "intel_plane_initial.h" #include "intel_plane_initial.h"
#include "xe_bo.h" #include "xe_bo.h"
#include "xe_vram_types.h"
#include "xe_wa.h" #include "xe_wa.h"
#include <generated/xe_wa_oob.h> #include <generated/xe_wa_oob.h>

View File

@@ -36,6 +36,7 @@
#include "xe_trace_bo.h" #include "xe_trace_bo.h"
#include "xe_ttm_stolen_mgr.h" #include "xe_ttm_stolen_mgr.h"
#include "xe_vm.h" #include "xe_vm.h"
#include "xe_vram_types.h"
const char *const xe_mem_type_to_name[TTM_NUM_MEM_TYPES] = { const char *const xe_mem_type_to_name[TTM_NUM_MEM_TYPES] = {
[XE_PL_SYSTEM] = "system", [XE_PL_SYSTEM] = "system",

View File

@@ -9,6 +9,7 @@
#include <linux/iosys-map.h> #include <linux/iosys-map.h>
#include <drm/drm_gpusvm.h> #include <drm/drm_gpusvm.h>
#include <drm/drm_pagemap.h>
#include <drm/ttm/ttm_bo.h> #include <drm/ttm/ttm_bo.h>
#include <drm/ttm/ttm_device.h> #include <drm/ttm/ttm_device.h>
#include <drm/ttm/ttm_placement.h> #include <drm/ttm/ttm_placement.h>

View File

@@ -64,6 +64,7 @@
#include "xe_ttm_sys_mgr.h" #include "xe_ttm_sys_mgr.h"
#include "xe_vm.h" #include "xe_vm.h"
#include "xe_vram.h" #include "xe_vram.h"
#include "xe_vram_types.h"
#include "xe_vsec.h" #include "xe_vsec.h"
#include "xe_wait_user_fence.h" #include "xe_wait_user_fence.h"
#include "xe_wa.h" #include "xe_wa.h"

View File

@@ -10,7 +10,6 @@
#include <drm/drm_device.h> #include <drm/drm_device.h>
#include <drm/drm_file.h> #include <drm/drm_file.h>
#include <drm/drm_pagemap.h>
#include <drm/ttm/ttm_device.h> #include <drm/ttm/ttm_device.h>
#include "xe_devcoredump_types.h" #include "xe_devcoredump_types.h"
@@ -26,7 +25,6 @@
#include "xe_sriov_vf_types.h" #include "xe_sriov_vf_types.h"
#include "xe_step_types.h" #include "xe_step_types.h"
#include "xe_survivability_mode_types.h" #include "xe_survivability_mode_types.h"
#include "xe_ttm_vram_mgr_types.h"
#if IS_ENABLED(CONFIG_DRM_XE_DEBUG) #if IS_ENABLED(CONFIG_DRM_XE_DEBUG)
#define TEST_VM_OPS_ERROR #define TEST_VM_OPS_ERROR
@@ -39,6 +37,7 @@ struct xe_ggtt;
struct xe_i2c; struct xe_i2c;
struct xe_pat_ops; struct xe_pat_ops;
struct xe_pxp; struct xe_pxp;
struct xe_vram_region;
#define XE_BO_INVALID_OFFSET LONG_MAX #define XE_BO_INVALID_OFFSET LONG_MAX
@@ -71,63 +70,6 @@ struct xe_pxp;
const struct xe_tile * : (const struct xe_device *)((tile__)->xe), \ const struct xe_tile * : (const struct xe_device *)((tile__)->xe), \
struct xe_tile * : (tile__)->xe) struct xe_tile * : (tile__)->xe)
/**
* struct xe_vram_region - memory region structure
* This is used to describe a memory region in xe
* device, such as HBM memory or CXL extension memory.
*/
struct xe_vram_region {
/** @tile: Back pointer to tile */
struct xe_tile *tile;
/** @io_start: IO start address of this VRAM instance */
resource_size_t io_start;
/**
* @io_size: IO size of this VRAM instance
*
* This represents how much of this VRAM we can access
* via the CPU through the VRAM BAR. This can be smaller
* than @usable_size, in which case only part of VRAM is CPU
* accessible (typically the first 256M). This
* configuration is known as small-bar.
*/
resource_size_t io_size;
/** @dpa_base: This memory regions's DPA (device physical address) base */
resource_size_t dpa_base;
/**
* @usable_size: usable size of VRAM
*
* Usable size of VRAM excluding reserved portions
* (e.g stolen mem)
*/
resource_size_t usable_size;
/**
* @actual_physical_size: Actual VRAM size
*
* Actual VRAM size including reserved portions
* (e.g stolen mem)
*/
resource_size_t actual_physical_size;
/** @mapping: pointer to VRAM mappable space */
void __iomem *mapping;
/** @ttm: VRAM TTM manager */
struct xe_ttm_vram_mgr ttm;
#if IS_ENABLED(CONFIG_DRM_XE_PAGEMAP)
/** @pagemap: Used to remap device memory as ZONE_DEVICE */
struct dev_pagemap pagemap;
/**
* @dpagemap: The struct drm_pagemap of the ZONE_DEVICE memory
* pages of this tile.
*/
struct drm_pagemap dpagemap;
/**
* @hpa_base: base host physical address
*
* This is generated when remap device memory as ZONE_DEVICE
*/
resource_size_t hpa_base;
#endif
};
/** /**
* struct xe_mmio - register mmio structure * struct xe_mmio - register mmio structure
* *

View File

@@ -33,6 +33,7 @@
#include "xe_migrate.h" #include "xe_migrate.h"
#include "xe_sriov.h" #include "xe_sriov.h"
#include "xe_ttm_vram_mgr.h" #include "xe_ttm_vram_mgr.h"
#include "xe_vram_types.h"
#include "xe_wopcm.h" #include "xe_wopcm.h"
#define make_u64_from_u32(hi, lo) ((u64)((u64)(u32)(hi) << 32 | (u32)(lo))) #define make_u64_from_u32(hi, lo) ((u64)((u64)(u32)(hi) << 32 | (u32)(lo)))

View File

@@ -17,6 +17,7 @@
#include "xe_ttm_vram_mgr.h" #include "xe_ttm_vram_mgr.h"
#include "xe_vm.h" #include "xe_vm.h"
#include "xe_vm_types.h" #include "xe_vm_types.h"
#include "xe_vram_types.h"
static bool xe_svm_range_in_vram(struct xe_svm_range *range) static bool xe_svm_range_in_vram(struct xe_svm_range *range)
{ {
@@ -989,6 +990,11 @@ int xe_svm_range_get_pages(struct xe_vm *vm, struct xe_svm_range *range,
#if IS_ENABLED(CONFIG_DRM_XE_PAGEMAP) #if IS_ENABLED(CONFIG_DRM_XE_PAGEMAP)
static struct drm_pagemap *tile_local_pagemap(struct xe_tile *tile)
{
return &tile->mem.vram->dpagemap;
}
/** /**
* xe_svm_alloc_vram()- Allocate device memory pages for range, * xe_svm_alloc_vram()- Allocate device memory pages for range,
* migrating existing data. * migrating existing data.
@@ -1006,7 +1012,7 @@ int xe_svm_alloc_vram(struct xe_tile *tile, struct xe_svm_range *range,
xe_assert(tile_to_xe(tile), range->base.flags.migrate_devmem); xe_assert(tile_to_xe(tile), range->base.flags.migrate_devmem);
range_debug(range, "ALLOCATE VRAM"); range_debug(range, "ALLOCATE VRAM");
dpagemap = xe_tile_local_pagemap(tile); dpagemap = tile_local_pagemap(tile);
return drm_pagemap_populate_mm(dpagemap, xe_svm_range_start(range), return drm_pagemap_populate_mm(dpagemap, xe_svm_range_start(range),
xe_svm_range_end(range), xe_svm_range_end(range),
range->base.gpusvm->mm, range->base.gpusvm->mm,

View File

@@ -20,6 +20,7 @@
#include "xe_ttm_vram_mgr.h" #include "xe_ttm_vram_mgr.h"
#include "xe_wa.h" #include "xe_wa.h"
#include "xe_vram.h" #include "xe_vram.h"
#include "xe_vram_types.h"
/** /**
* DOC: Multi-tile Design * DOC: Multi-tile Design

View File

@@ -18,18 +18,6 @@ int xe_tile_alloc_vram(struct xe_tile *tile);
void xe_tile_migrate_wait(struct xe_tile *tile); void xe_tile_migrate_wait(struct xe_tile *tile);
#if IS_ENABLED(CONFIG_DRM_XE_PAGEMAP)
static inline struct drm_pagemap *xe_tile_local_pagemap(struct xe_tile *tile)
{
return &tile->mem.vram->dpagemap;
}
#else
static inline struct drm_pagemap *xe_tile_local_pagemap(struct xe_tile *tile)
{
return NULL;
}
#endif
static inline bool xe_tile_is_root(struct xe_tile *tile) static inline bool xe_tile_is_root(struct xe_tile *tile)
{ {
return tile->id == 0; return tile->id == 0;

View File

@@ -15,6 +15,7 @@
#include "xe_gt.h" #include "xe_gt.h"
#include "xe_res_cursor.h" #include "xe_res_cursor.h"
#include "xe_ttm_vram_mgr.h" #include "xe_ttm_vram_mgr.h"
#include "xe_vram_types.h"
static inline struct drm_buddy_block * static inline struct drm_buddy_block *
xe_ttm_vram_mgr_first_block(struct list_head *list) xe_ttm_vram_mgr_first_block(struct list_head *list)

View File

@@ -21,6 +21,7 @@
#include "xe_module.h" #include "xe_module.h"
#include "xe_sriov.h" #include "xe_sriov.h"
#include "xe_vram.h" #include "xe_vram.h"
#include "xe_vram_types.h"
#define BAR_SIZE_SHIFT 20 #define BAR_SIZE_SHIFT 20

View File

@@ -0,0 +1,74 @@
/* SPDX-License-Identifier: MIT */
/*
* Copyright © 2025 Intel Corporation
*/
#ifndef _XE_VRAM_TYPES_H_
#define _XE_VRAM_TYPES_H_
#if IS_ENABLED(CONFIG_DRM_XE_PAGEMAP)
#include <drm/drm_pagemap.h>
#endif
#include "xe_ttm_vram_mgr_types.h"
struct xe_tile;
/**
* struct xe_vram_region - memory region structure
* This is used to describe a memory region in xe
* device, such as HBM memory or CXL extension memory.
*/
struct xe_vram_region {
/** @tile: Back pointer to tile */
struct xe_tile *tile;
/** @io_start: IO start address of this VRAM instance */
resource_size_t io_start;
/**
* @io_size: IO size of this VRAM instance
*
* This represents how much of this VRAM we can access
* via the CPU through the VRAM BAR. This can be smaller
* than @usable_size, in which case only part of VRAM is CPU
* accessible (typically the first 256M). This
* configuration is known as small-bar.
*/
resource_size_t io_size;
/** @dpa_base: This memory regions's DPA (device physical address) base */
resource_size_t dpa_base;
/**
* @usable_size: usable size of VRAM
*
* Usable size of VRAM excluding reserved portions
* (e.g stolen mem)
*/
resource_size_t usable_size;
/**
* @actual_physical_size: Actual VRAM size
*
* Actual VRAM size including reserved portions
* (e.g stolen mem)
*/
resource_size_t actual_physical_size;
/** @mapping: pointer to VRAM mappable space */
void __iomem *mapping;
/** @ttm: VRAM TTM manager */
struct xe_ttm_vram_mgr ttm;
#if IS_ENABLED(CONFIG_DRM_XE_PAGEMAP)
/** @pagemap: Used to remap device memory as ZONE_DEVICE */
struct dev_pagemap pagemap;
/**
* @dpagemap: The struct drm_pagemap of the ZONE_DEVICE memory
* pages of this tile.
*/
struct drm_pagemap dpagemap;
/**
* @hpa_base: base host physical address
*
* This is generated when remap device memory as ZONE_DEVICE
*/
resource_size_t hpa_base;
#endif
};
#endif