]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
drm/xe: move the lmem verification code into a separate function
authorKoby Elbaz <kelbaz@habana.ai>
Sun, 29 Oct 2023 17:53:26 +0000 (19:53 +0200)
committerRodrigo Vivi <rodrigo.vivi@intel.com>
Thu, 21 Dec 2023 16:43:34 +0000 (11:43 -0500)
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>
drivers/gpu/drm/xe/xe_mmio.c

index 0da4f75c07bf6497706001ff4504cc97c79c4d77..d8f9fabf715e983e326006d1b797b5e0f4337466 100644 (file)
@@ -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)