Commit 37d1eaab authored by Koby Elbaz's avatar Koby Elbaz Committed by Rodrigo Vivi

drm/xe: move the lmem verification code into a separate function

If lmem (VRAM) is not fully initialized, the punit will power down
the GT, which will prevent register access from the driver side.
That code moved into a corresponding function (xe_verify_lmem_ready)
to make the code clearer.
Signed-off-by: default avatarKoby Elbaz <kelbaz@habana.ai>
Reviewed-by: default avatarLucas De Marchi <lucas.demarchi@intel.com>
Link: https://lore.kernel.org/r/20231029175326.626745-1-kelbaz@habana.aiSigned-off-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
parent 04dfef5b
...@@ -381,10 +381,27 @@ static void mmio_fini(struct drm_device *drm, void *arg) ...@@ -381,10 +381,27 @@ static void mmio_fini(struct drm_device *drm, void *arg)
iounmap(xe->mem.vram.mapping); iounmap(xe->mem.vram.mapping);
} }
static int xe_verify_lmem_ready(struct xe_device *xe)
{
struct xe_gt *gt = xe_root_mmio_gt(xe);
/*
* The boot firmware initializes local memory and assesses its health.
* If memory training fails, the punit will have been instructed to
* keep the GT powered down; we won't be able to communicate with it
* and we should not continue with driver initialization.
*/
if (IS_DGFX(xe) && !(xe_mmio_read32(gt, GU_CNTL) & LMEM_INIT)) {
drm_err(&xe->drm, "VRAM not initialized by firmware\n");
return -ENODEV;
}
return 0;
}
int xe_mmio_init(struct xe_device *xe) int xe_mmio_init(struct xe_device *xe)
{ {
struct xe_tile *root_tile = xe_device_get_root_tile(xe); struct xe_tile *root_tile = xe_device_get_root_tile(xe);
struct xe_gt *gt = xe_root_mmio_gt(xe);
const int mmio_bar = 0; const int mmio_bar = 0;
int err; int err;
...@@ -409,16 +426,9 @@ int xe_mmio_init(struct xe_device *xe) ...@@ -409,16 +426,9 @@ int xe_mmio_init(struct xe_device *xe)
root_tile->mmio.size = xe->mmio.size; root_tile->mmio.size = xe->mmio.size;
root_tile->mmio.regs = xe->mmio.regs; root_tile->mmio.regs = xe->mmio.regs;
/* err = xe_verify_lmem_ready(xe);
* The boot firmware initializes local memory and assesses its health. if (err)
* If memory training fails, the punit will have been instructed to return err;
* keep the GT powered down; we won't be able to communicate with it
* and we should not continue with driver initialization.
*/
if (IS_DGFX(xe) && !(xe_mmio_read32(gt, GU_CNTL) & LMEM_INIT)) {
drm_err(&xe->drm, "VRAM not initialized by firmware\n");
return -ENODEV;
}
err = xe_set_dma_info(xe); err = xe_set_dma_info(xe);
if (err) if (err)
......
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