Commit fdef72e0 authored by Koby Elbaz's avatar Koby Elbaz Committed by Rodrigo Vivi

drm/xe: add a flag to bypass multi-tile config from MTCFG reg

Skip reading this register as it is not relevant in the new devices.
Signed-off-by: default avatarKoby Elbaz <kelbaz@habana.ai>
Reviewed-by: default avatarOfir Bitton <obitton@habana.ai>
Reviewed-by: default avatarMoti Haimovski <mhaimovski@habana.ai>
Signed-off-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
parent 6360ebd1
...@@ -243,6 +243,8 @@ struct xe_device { ...@@ -243,6 +243,8 @@ struct xe_device {
u8 has_llc:1; u8 has_llc:1;
/** @has_range_tlb_invalidation: Has range based TLB invalidations */ /** @has_range_tlb_invalidation: Has range based TLB invalidations */
u8 has_range_tlb_invalidation:1; u8 has_range_tlb_invalidation:1;
/** @bypass_mtcfg: Bypass Multi-Tile configuration from MTCFG register */
u8 bypass_mtcfg:1;
} info; } info;
/** @irq: device interrupt state */ /** @irq: device interrupt state */
......
...@@ -318,26 +318,28 @@ int xe_mmio_probe_vram(struct xe_device *xe) ...@@ -318,26 +318,28 @@ int xe_mmio_probe_vram(struct xe_device *xe)
static void xe_mmio_probe_tiles(struct xe_device *xe) static void xe_mmio_probe_tiles(struct xe_device *xe)
{ {
u8 adj_tile_count = xe->info.tile_count;
struct xe_gt *gt = xe_root_mmio_gt(xe); struct xe_gt *gt = xe_root_mmio_gt(xe);
u32 mtcfg; u32 mtcfg;
u8 adj_tile_count;
u8 id; u8 id;
if (xe->info.tile_count == 1) if (xe->info.tile_count == 1)
return; return;
mtcfg = xe_mmio_read64_2x32(gt, XEHP_MTCFG_ADDR); if (!xe->info.bypass_mtcfg) {
adj_tile_count = xe->info.tile_count = mtcfg = xe_mmio_read64_2x32(gt, XEHP_MTCFG_ADDR);
REG_FIELD_GET(TILE_COUNT, mtcfg) + 1; adj_tile_count = xe->info.tile_count =
REG_FIELD_GET(TILE_COUNT, mtcfg) + 1;
/* /*
* FIXME: Needs some work for standalone media, but should be impossible * FIXME: Needs some work for standalone media, but should be impossible
* with multi-tile for now. * with multi-tile for now.
*/ */
xe->info.gt_count = xe->info.tile_count; xe->info.gt_count = xe->info.tile_count;
drm_info(&xe->drm, "tile_count: %d, adj_tile_count %d\n", drm_info(&xe->drm, "tile_count: %d, adj_tile_count %d\n",
xe->info.tile_count, adj_tile_count); xe->info.tile_count, adj_tile_count);
}
if (xe->info.tile_count > 1) { if (xe->info.tile_count > 1) {
const int mmio_bar = 0; const int mmio_bar = 0;
......
...@@ -56,6 +56,7 @@ struct xe_device_desc { ...@@ -56,6 +56,7 @@ struct xe_device_desc {
u8 require_force_probe:1; u8 require_force_probe:1;
u8 is_dgfx:1; u8 is_dgfx:1;
u8 has_llc:1; u8 has_llc:1;
u8 bypass_mtcfg:1;
}; };
#define PLATFORM(x) \ #define PLATFORM(x) \
...@@ -553,6 +554,7 @@ static int xe_info_init(struct xe_device *xe, ...@@ -553,6 +554,7 @@ static int xe_info_init(struct xe_device *xe,
xe->info.graphics_name = graphics_desc->name; xe->info.graphics_name = graphics_desc->name;
xe->info.media_name = media_desc ? media_desc->name : "none"; xe->info.media_name = media_desc ? media_desc->name : "none";
xe->info.has_llc = desc->has_llc; xe->info.has_llc = desc->has_llc;
xe->info.bypass_mtcfg = desc->bypass_mtcfg;
xe->info.dma_mask_size = graphics_desc->dma_mask_size; xe->info.dma_mask_size = graphics_desc->dma_mask_size;
xe->info.vram_flags = graphics_desc->vram_flags; xe->info.vram_flags = graphics_desc->vram_flags;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment