mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-04-14 04:25:22 -04:00
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: Koby Elbaz <kelbaz@habana.ai> Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com> Link: https://lore.kernel.org/r/20231029175326.626745-1-kelbaz@habana.ai Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
This commit is contained in:
@@ -381,10 +381,27 @@ static void mmio_fini(struct drm_device *drm, void *arg)
|
||||
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)
|
||||
{
|
||||
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;
|
||||
int err;
|
||||
|
||||
@@ -409,16 +426,9 @@ int xe_mmio_init(struct xe_device *xe)
|
||||
root_tile->mmio.size = xe->mmio.size;
|
||||
root_tile->mmio.regs = xe->mmio.regs;
|
||||
|
||||
/*
|
||||
* 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;
|
||||
}
|
||||
err = xe_verify_lmem_ready(xe);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
err = xe_set_dma_info(xe);
|
||||
if (err)
|
||||
|
||||
Reference in New Issue
Block a user