diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile index e6945fbb47022f07bf47f40efe6c9f8a40a73b4f..ee4a95beec206c7102fe8c26d69f4b414d40b25d 100644 --- a/drivers/gpu/drm/xe/Makefile +++ b/drivers/gpu/drm/xe/Makefile @@ -83,7 +83,7 @@ xe-y += xe_bb.o \ xe_step.o \ xe_sync.o \ xe_trace.o \ - xe_ttm_gtt_mgr.o \ + xe_ttm_sys_mgr.o \ xe_ttm_stolen_mgr.o \ xe_ttm_vram_mgr.o \ xe_tuning.o \ diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c index a79f934e3d2d86eaf95f7f161636b7151f768c6f..45d6e5ff47fd28817935c62a50b44e988cecf1c5 100644 --- a/drivers/gpu/drm/xe/xe_device.c +++ b/drivers/gpu/drm/xe/xe_device.c @@ -28,6 +28,7 @@ #include "xe_pm.h" #include "xe_query.h" #include "xe_ttm_stolen_mgr.h" +#include "xe_ttm_sys_mgr.h" #include "xe_vm.h" #include "xe_vm_madvise.h" #include "xe_wait_user_fence.h" @@ -279,6 +280,8 @@ int xe_device_probe(struct xe_device *xe) if (err) goto err_irq_shutdown; + xe_ttm_sys_mgr_init(xe); + for_each_gt(gt, xe, id) { err = xe_gt_init_noalloc(gt); if (err) diff --git a/drivers/gpu/drm/xe/xe_device.h b/drivers/gpu/drm/xe/xe_device.h index d277f8985f7bfb5d431ea7ba0a91d875a0ce4a18..cbae480a20922f666f46852e0a4e4598d1b1165d 100644 --- a/drivers/gpu/drm/xe/xe_device.h +++ b/drivers/gpu/drm/xe/xe_device.h @@ -116,4 +116,5 @@ static inline bool xe_device_has_flat_ccs(struct xe_device *xe) } u32 xe_device_ccs_bytes(struct xe_device *xe, u64 size); + #endif diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h index 204fb071e52493b03f1a41f71ad533e1e958df5a..b598bd1317aa99702b4fa92ca9ff31d9632ada61 100644 --- a/drivers/gpu/drm/xe/xe_device_types.h +++ b/drivers/gpu/drm/xe/xe_device_types.h @@ -198,6 +198,8 @@ struct xe_device { /** @mapping: pointer to VRAM mappable space */ void *__iomem mapping; } vram; + /** @sys_mgr: system TTM manager */ + struct ttm_resource_manager sys_mgr; } mem; /** @usm: unified memory state */ diff --git a/drivers/gpu/drm/xe/xe_gt.c b/drivers/gpu/drm/xe/xe_gt.c index bc821f431c45ab0eed2afa390e6741ecd7616b57..daaf93e23bbfc4ed6e8c50714588571a8bc21094 100644 --- a/drivers/gpu/drm/xe/xe_gt.c +++ b/drivers/gpu/drm/xe/xe_gt.c @@ -36,7 +36,6 @@ #include "xe_ring_ops.h" #include "xe_sa.h" #include "xe_sched_job.h" -#include "xe_ttm_gtt_mgr.h" #include "xe_ttm_vram_mgr.h" #include "xe_tuning.h" #include "xe_uc.h" @@ -77,16 +76,11 @@ int xe_gt_alloc(struct xe_device *xe, struct xe_gt *gt) if (!gt->mem.vram_mgr) return -ENOMEM; - gt->mem.gtt_mgr = drmm_kzalloc(drm, sizeof(*gt->mem.gtt_mgr), - GFP_KERNEL); - if (!gt->mem.gtt_mgr) - return -ENOMEM; } else { struct xe_gt *full_gt = xe_find_full_gt(gt); gt->mem.ggtt = full_gt->mem.ggtt; gt->mem.vram_mgr = full_gt->mem.vram_mgr; - gt->mem.gtt_mgr = full_gt->mem.gtt_mgr; } gt->ordered_wq = alloc_ordered_workqueue("gt-ordered-wq", 0); @@ -98,26 +92,14 @@ static int gt_ttm_mgr_init(struct xe_gt *gt) { struct xe_device *xe = gt_to_xe(gt); int err; - struct sysinfo si; - u64 gtt_size; - - si_meminfo(&si); - gtt_size = (u64)si.totalram * si.mem_unit * 3/4; if (gt->mem.vram.size) { err = xe_ttm_vram_mgr_init(gt, gt->mem.vram_mgr); if (err) return err; - gtt_size = min(max((XE_DEFAULT_GTT_SIZE_MB << 20), - (u64)gt->mem.vram.size), - gtt_size); xe->info.mem_region_mask |= BIT(gt->info.vram_id) << 1; } - err = xe_ttm_gtt_mgr_init(gt, gt->mem.gtt_mgr, gtt_size); - if (err) - return err; - return 0; } diff --git a/drivers/gpu/drm/xe/xe_gt_types.h b/drivers/gpu/drm/xe/xe_gt_types.h index 8f29aba455e05dc323906812810b47d7646ccaae..9d3117fad2e4b27282c2119184b783e7acb21543 100644 --- a/drivers/gpu/drm/xe/xe_gt_types.h +++ b/drivers/gpu/drm/xe/xe_gt_types.h @@ -162,8 +162,6 @@ struct xe_gt { } vram; /** @vram_mgr: VRAM TTM manager */ struct xe_ttm_vram_mgr *vram_mgr; - /** @gtt_mr: GTT TTM manager */ - struct xe_ttm_gtt_mgr *gtt_mgr; /** @ggtt: Global graphics translation table */ struct xe_ggtt *ggtt; } mem; diff --git a/drivers/gpu/drm/xe/xe_ttm_gtt_mgr.h b/drivers/gpu/drm/xe/xe_ttm_gtt_mgr.h deleted file mode 100644 index d1d57cb9c2b89b73c13aff4bcc6e16ce7757a8cb..0000000000000000000000000000000000000000 --- a/drivers/gpu/drm/xe/xe_ttm_gtt_mgr.h +++ /dev/null @@ -1,16 +0,0 @@ -/* SPDX-License-Identifier: MIT */ -/* - * Copyright © 2022 Intel Corporation - */ - -#ifndef _XE_TTGM_GTT_MGR_H_ -#define _XE_TTGM_GTT_MGR_H_ - -#include "xe_ttm_gtt_mgr_types.h" - -struct xe_gt; - -int xe_ttm_gtt_mgr_init(struct xe_gt *gt, struct xe_ttm_gtt_mgr *mgr, - u64 gtt_size); - -#endif diff --git a/drivers/gpu/drm/xe/xe_ttm_gtt_mgr_types.h b/drivers/gpu/drm/xe/xe_ttm_gtt_mgr_types.h deleted file mode 100644 index c66737488326f8cc3bec397ae691ac85c8b41b2b..0000000000000000000000000000000000000000 --- a/drivers/gpu/drm/xe/xe_ttm_gtt_mgr_types.h +++ /dev/null @@ -1,18 +0,0 @@ -/* SPDX-License-Identifier: MIT */ -/* - * Copyright © 2022 Intel Corporation - */ - -#ifndef _XE_TTM_GTT_MGR_TYPES_H_ -#define _XE_TTM_GTT_MGR_TYPES_H_ - -#include <drm/ttm/ttm_device.h> - -struct xe_gt; - -struct xe_ttm_gtt_mgr { - struct xe_gt *gt; - struct ttm_resource_manager manager; -}; - -#endif diff --git a/drivers/gpu/drm/xe/xe_ttm_gtt_mgr.c b/drivers/gpu/drm/xe/xe_ttm_sys_mgr.c similarity index 52% rename from drivers/gpu/drm/xe/xe_ttm_gtt_mgr.c rename to drivers/gpu/drm/xe/xe_ttm_sys_mgr.c index 8075781070f27d5e48b8a0fa7f018b7547645f4f..5b0674bbb8ed0b9e84fc268cfd6b1d0051188fe9 100644 --- a/drivers/gpu/drm/xe/xe_ttm_gtt_mgr.c +++ b/drivers/gpu/drm/xe/xe_ttm_sys_mgr.c @@ -4,6 +4,8 @@ * Copyright (C) 2021-2002 Red Hat */ +#include "xe_ttm_sys_mgr.h" + #include <drm/drm_managed.h> #include <drm/ttm/ttm_placement.h> @@ -12,31 +14,24 @@ #include "xe_bo.h" #include "xe_gt.h" -#include "xe_ttm_gtt_mgr.h" -struct xe_ttm_gtt_node { +struct xe_ttm_sys_node { struct ttm_buffer_object *tbo; struct ttm_range_mgr_node base; }; -static inline struct xe_ttm_gtt_mgr * -to_gtt_mgr(struct ttm_resource_manager *man) -{ - return container_of(man, struct xe_ttm_gtt_mgr, manager); -} - -static inline struct xe_ttm_gtt_node * -to_xe_ttm_gtt_node(struct ttm_resource *res) +static inline struct xe_ttm_sys_node * +to_xe_ttm_sys_node(struct ttm_resource *res) { - return container_of(res, struct xe_ttm_gtt_node, base.base); + return container_of(res, struct xe_ttm_sys_node, base.base); } -static int xe_ttm_gtt_mgr_new(struct ttm_resource_manager *man, +static int xe_ttm_sys_mgr_new(struct ttm_resource_manager *man, struct ttm_buffer_object *tbo, const struct ttm_place *place, struct ttm_resource **res) { - struct xe_ttm_gtt_node *node; + struct xe_ttm_sys_node *node; int r; node = kzalloc(struct_size(node, base.mm_nodes, 1), GFP_KERNEL); @@ -66,32 +61,31 @@ static int xe_ttm_gtt_mgr_new(struct ttm_resource_manager *man, return r; } -static void xe_ttm_gtt_mgr_del(struct ttm_resource_manager *man, +static void xe_ttm_sys_mgr_del(struct ttm_resource_manager *man, struct ttm_resource *res) { - struct xe_ttm_gtt_node *node = to_xe_ttm_gtt_node(res); + struct xe_ttm_sys_node *node = to_xe_ttm_sys_node(res); ttm_resource_fini(man, res); kfree(node); } -static void xe_ttm_gtt_mgr_debug(struct ttm_resource_manager *man, +static void xe_ttm_sys_mgr_debug(struct ttm_resource_manager *man, struct drm_printer *printer) { } -static const struct ttm_resource_manager_func xe_ttm_gtt_mgr_func = { - .alloc = xe_ttm_gtt_mgr_new, - .free = xe_ttm_gtt_mgr_del, - .debug = xe_ttm_gtt_mgr_debug +static const struct ttm_resource_manager_func xe_ttm_sys_mgr_func = { + .alloc = xe_ttm_sys_mgr_new, + .free = xe_ttm_sys_mgr_del, + .debug = xe_ttm_sys_mgr_debug }; -static void ttm_gtt_mgr_fini(struct drm_device *drm, void *arg) +static void ttm_sys_mgr_fini(struct drm_device *drm, void *arg) { - struct xe_ttm_gtt_mgr *mgr = arg; - struct xe_device *xe = gt_to_xe(mgr->gt); - struct ttm_resource_manager *man = &mgr->manager; + struct xe_device *xe = (struct xe_device *)arg; + struct ttm_resource_manager *man = &xe->mem.sys_mgr; int err; ttm_resource_manager_set_used(man, false); @@ -104,27 +98,18 @@ static void ttm_gtt_mgr_fini(struct drm_device *drm, void *arg) ttm_set_driver_manager(&xe->ttm, XE_PL_TT, NULL); } -int xe_ttm_gtt_mgr_init(struct xe_gt *gt, struct xe_ttm_gtt_mgr *mgr, - u64 gtt_size) +int xe_ttm_sys_mgr_init(struct xe_device *xe) { - struct xe_device *xe = gt_to_xe(gt); - struct ttm_resource_manager *man = &mgr->manager; - int err; - - XE_BUG_ON(xe_gt_is_media_type(gt)); + struct ttm_resource_manager *man = &xe->mem.sys_mgr; + struct sysinfo si; + u64 gtt_size; - mgr->gt = gt; + si_meminfo(&si); + gtt_size = (u64)si.totalram * si.mem_unit * 3/4; man->use_tt = true; - man->func = &xe_ttm_gtt_mgr_func; - + man->func = &xe_ttm_sys_mgr_func; ttm_resource_manager_init(man, &xe->ttm, gtt_size >> PAGE_SHIFT); - - ttm_set_driver_manager(&xe->ttm, XE_PL_TT, &mgr->manager); + ttm_set_driver_manager(&xe->ttm, XE_PL_TT, man); ttm_resource_manager_set_used(man, true); - - err = drmm_add_action_or_reset(&xe->drm, ttm_gtt_mgr_fini, mgr); - if (err) - return err; - - return 0; + return drmm_add_action_or_reset(&xe->drm, ttm_sys_mgr_fini, xe); } diff --git a/drivers/gpu/drm/xe/xe_ttm_sys_mgr.h b/drivers/gpu/drm/xe/xe_ttm_sys_mgr.h new file mode 100644 index 0000000000000000000000000000000000000000..e8f5cd395b2895660b6f25844784cd60fccec678 --- /dev/null +++ b/drivers/gpu/drm/xe/xe_ttm_sys_mgr.h @@ -0,0 +1,13 @@ +/* SPDX-License-Identifier: MIT */ +/* + * Copyright © 2023 Intel Corporation + */ + +#ifndef _XE_TTM_SYS_MGR_H_ +#define _XE_TTM_SYS_MGR_H_ + +struct xe_device; + +int xe_ttm_sys_mgr_init(struct xe_device *xe); + +#endif