mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-06 10:00:17 +00:00
drm/xe: Move struct xe_vram_region to a dedicated header
[ Upstream commit7a20b4f558] 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:
committed by
Greg Kroah-Hartman
parent
31afb337c3
commit
1426f15c13
@@ -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,
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -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)))
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
74
drivers/gpu/drm/xe/xe_vram_types.h
Normal file
74
drivers/gpu/drm/xe/xe_vram_types.h
Normal 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
|
||||||
Reference in New Issue
Block a user