]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/panfrost: Handle inexistent GPU during probe
authorAdrián Larumbe <adrian.larumbe@collabora.com>
Sun, 19 Oct 2025 14:52:07 +0000 (15:52 +0100)
committerSteven Price <steven.price@arm.com>
Mon, 20 Oct 2025 15:05:16 +0000 (16:05 +0100)
Just in case we're dealing with a yet not recognised device.

Reviewed-by: Steven Price <steven.price@arm.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Signed-off-by: Adrián Larumbe <adrian.larumbe@collabora.com>
Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
Link: https://lore.kernel.org/r/20251019145225.3621989-3-adrian.larumbe@collabora.com
Signed-off-by: Steven Price <steven.price@arm.com>
drivers/gpu/drm/panfrost/panfrost_gpu.c

index f94337a6c302056b8e77b4d6e5293c2107ada732..8d049a07d393c51f2165ab106ed05882f9c78aab 100644 (file)
@@ -240,9 +240,10 @@ static const struct panfrost_model gpu_models[] = {
        /* MediaTek MT8188 Mali-G57 MC3 */
        GPU_MODEL(g57, 0x9093,
                GPU_REV(g57, 0, 0)),
+       {0},
 };
 
-static void panfrost_gpu_init_features(struct panfrost_device *pfdev)
+static int panfrost_gpu_init_features(struct panfrost_device *pfdev)
 {
        u32 gpu_id, num_js, major, minor, status, rev;
        const char *name = "unknown";
@@ -327,6 +328,12 @@ static void panfrost_gpu_init_features(struct panfrost_device *pfdev)
                break;
        }
 
+       if (!model->name) {
+               dev_err(pfdev->base.dev, "GPU model not found: mali-%s id rev %#x %#x\n",
+                       name, gpu_id, rev);
+               return -ENODEV;
+       }
+
        bitmap_from_u64(pfdev->features.hw_features, hw_feat);
        bitmap_from_u64(pfdev->features.hw_issues, hw_issues);
 
@@ -347,6 +354,8 @@ static void panfrost_gpu_init_features(struct panfrost_device *pfdev)
 
        dev_info(pfdev->base.dev, "shader_present=0x%0llx l2_present=0x%0llx",
                 pfdev->features.shader_present, pfdev->features.l2_present);
+
+       return 0;
 }
 
 void panfrost_cycle_counter_get(struct panfrost_device *pfdev)
@@ -489,7 +498,9 @@ int panfrost_gpu_init(struct panfrost_device *pfdev)
        if (err)
                return err;
 
-       panfrost_gpu_init_features(pfdev);
+       err = panfrost_gpu_init_features(pfdev);
+       if (err)
+               return err;
 
        err = dma_set_mask_and_coherent(pfdev->base.dev,
                                        DMA_BIT_MASK(FIELD_GET(0xff00,