diff options
author | Michał Winiarski <michal.winiarski@intel.com> | 2023-12-05 04:32:57 +0300 |
---|---|---|
committer | Rodrigo Vivi <rodrigo.vivi@intel.com> | 2023-12-21 19:45:10 +0300 |
commit | 7e4ce4518b906a960122f29e8f3426ca95ebee0a (patch) | |
tree | e1f676a043743f9f4a3e6d7679eb038207fad576 /drivers/gpu/drm/xe/xe_tile.c | |
parent | 4f5ee007f62a1825cec8140b14b28ef532f570f8 (diff) | |
download | linux-7e4ce4518b906a960122f29e8f3426ca95ebee0a.tar.xz |
drm/xe: Introduce xe_tile_init_early and use at earlier point in probe
It also merges the GT (which is part of tile) initialization happening
at xe_info_init with allocating other per-tile data structures into a
common helper function.
Signed-off-by: Michał Winiarski <michal.winiarski@intel.com>
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Diffstat (limited to 'drivers/gpu/drm/xe/xe_tile.c')
-rw-r--r-- | drivers/gpu/drm/xe/xe_tile.c | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/drivers/gpu/drm/xe/xe_tile.c b/drivers/gpu/drm/xe/xe_tile.c index 131752a57f65..c74a4f840d84 100644 --- a/drivers/gpu/drm/xe/xe_tile.c +++ b/drivers/gpu/drm/xe/xe_tile.c @@ -7,6 +7,7 @@ #include "xe_device.h" #include "xe_ggtt.h" +#include "xe_gt.h" #include "xe_migrate.h" #include "xe_sa.h" #include "xe_tile.h" @@ -80,7 +81,7 @@ * * Returns -ENOMEM if allocations fail, otherwise 0. */ -int xe_tile_alloc(struct xe_tile *tile) +static int xe_tile_alloc(struct xe_tile *tile) { struct drm_device *drm = &tile_to_xe(tile)->drm; @@ -97,6 +98,35 @@ int xe_tile_alloc(struct xe_tile *tile) return 0; } +/** + * xe_tile_init_early - Initialize the tile and primary GT + * @tile: Tile to initialize + * @xe: Parent Xe device + * @id: Tile ID + * + * Initializes per-tile resources that don't require any interactions with the + * hardware or any knowledge about the Graphics/Media IP version. + * + * Returns: 0 on success, negative error code on error. + */ +int xe_tile_init_early(struct xe_tile *tile, struct xe_device *xe, u8 id) +{ + int err; + + tile->xe = xe; + tile->id = id; + + err = xe_tile_alloc(tile); + if (err) + return err; + + tile->primary_gt = xe_gt_alloc(tile); + if (IS_ERR(tile->primary_gt)) + return PTR_ERR(tile->primary_gt); + + return 0; +} + static int tile_ttm_mgr_init(struct xe_tile *tile) { struct xe_device *xe = tile_to_xe(tile); |