[PATCH 1/2] drm/xe/tile: Set default memory placement for BOs

Lucas De Marchi lucas.demarchi at intel.com
Tue Apr 2 21:54:54 UTC 2024


During initialization, record what should be the default placement for
BOs, unless otherwise specified via flags when BO is created. This will
allow to remove XE_BO_FLAG_VRAM_IF_DGFX() that is spread all throughout
the code.

Signed-off-by: Lucas De Marchi <lucas.demarchi at intel.com>
---
 drivers/gpu/drm/xe/xe_bo.c           |  9 +++++++++
 drivers/gpu/drm/xe/xe_bo.h           | 11 +++++------
 drivers/gpu/drm/xe/xe_device_types.h |  9 +++++++++
 drivers/gpu/drm/xe/xe_tile.c         |  6 ++++++
 4 files changed, 29 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
index 6166bc715656..71446688c643 100644
--- a/drivers/gpu/drm/xe/xe_bo.c
+++ b/drivers/gpu/drm/xe/xe_bo.c
@@ -1368,6 +1368,15 @@ __xe_bo_create_locked(struct xe_device *xe,
 	if (vm)
 		xe_vm_assert_held(vm);
 
+	if (!(flags & XE_BO_FLAG_PL_MASK)) {
+		struct xe_tile *tile_pl = tile;
+
+		if (!tile_pl)
+			tile_pl = xe_device_get_root_tile(xe);
+
+		flags |= tile_pl->mem.default_pl_flag;
+	}
+
 	if (start || end != ~0ULL) {
 		bo = xe_bo_alloc();
 		if (IS_ERR(bo))
diff --git a/drivers/gpu/drm/xe/xe_bo.h b/drivers/gpu/drm/xe/xe_bo.h
index bae042b35fa8..8781ee15c253 100644
--- a/drivers/gpu/drm/xe/xe_bo.h
+++ b/drivers/gpu/drm/xe/xe_bo.h
@@ -23,17 +23,16 @@
 
 #define XE_DEFAULT_GTT_SIZE_MB          3072ULL /* 3GB by default */
 
-#define XE_BO_FLAG_USER		BIT(0)
+#define XE_BO_FLAG_USER			BIT(0)
 /* The bits below need to be contiguous, or things break */
 #define XE_BO_FLAG_SYSTEM		BIT(1)
 #define XE_BO_FLAG_VRAM0		BIT(2)
 #define XE_BO_FLAG_VRAM1		BIT(3)
-#define XE_BO_FLAG_VRAM_MASK		(XE_BO_FLAG_VRAM0 | XE_BO_FLAG_VRAM1)
-/* -- */
 #define XE_BO_FLAG_STOLEN		BIT(4)
-#define XE_BO_FLAG_VRAM_IF_DGFX(tile)	(IS_DGFX(tile_to_xe(tile)) ? \
-					 XE_BO_FLAG_VRAM0 << (tile)->id : \
-					 XE_BO_FLAG_SYSTEM)
+#define XE_BO_FLAG_VRAM_MASK		(XE_BO_FLAG_VRAM0 | XE_BO_FLAG_VRAM1)
+#define XE_BO_FLAG_PL_MASK		(XE_BO_FLAG_VRAM_MASK | XE_BO_FLAG_SYSTEM | \
+					 XE_BO_FLAG_STOLEN)
+
 #define XE_BO_FLAG_GGTT			BIT(5)
 #define XE_BO_FLAG_IGNORE_MIN_PAGE_SIZE BIT(6)
 #define XE_BO_FLAG_PINNED		BIT(7)
diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
index 47c864f67348..cdcdf27a442a 100644
--- a/drivers/gpu/drm/xe/xe_device_types.h
+++ b/drivers/gpu/drm/xe/xe_device_types.h
@@ -173,6 +173,15 @@ struct xe_tile {
 		 */
 		struct xe_mem_region vram;
 
+		/**
+		 * @mem.default_pl_flag: Default placement for BOs
+		 *
+		 * Default placement set as one of XE_BO_FLAG_{VRAM*,SYSTEM}.
+		 * May still be overriden when creating a bo by setting a
+		 * specific flag.
+		 */
+		u32 default_pl_flag;
+
 		/** @mem.vram_mgr: VRAM TTM manager */
 		struct xe_ttm_vram_mgr *vram_mgr;
 
diff --git a/drivers/gpu/drm/xe/xe_tile.c b/drivers/gpu/drm/xe/xe_tile.c
index 0650b2fa75ef..a55157f29c2c 100644
--- a/drivers/gpu/drm/xe/xe_tile.c
+++ b/drivers/gpu/drm/xe/xe_tile.c
@@ -5,6 +5,7 @@
 
 #include <drm/drm_managed.h>
 
+#include "xe_bo.h"
 #include "xe_device.h"
 #include "xe_ggtt.h"
 #include "xe_gt.h"
@@ -162,6 +163,11 @@ int xe_tile_init_noalloc(struct xe_tile *tile)
 
 	xe_device_mem_access_get(tile_to_xe(tile));
 
+	if (IS_DGFX(tile->xe))
+		tile->mem.default_pl_flag = XE_BO_FLAG_VRAM0 << tile->id;
+	else
+		tile->mem.default_pl_flag = XE_BO_FLAG_SYSTEM;
+
 	err = tile_ttm_mgr_init(tile);
 	if (err)
 		goto err_mem_access;
-- 
2.43.0



More information about the Intel-xe mailing list