On Tue, 15 Oct 2024 00:31:37 +0100 Adrián Larumbe <adrian.larumbe@xxxxxxxxxxxxx> wrote: > Just in case we're dealing with a yet not recognised device. While I can see how problematic it would be if we expose a GPU that requires kernel quirks we don't know about, I suspect the original authors had a good reason to allow probing of unknown GPUs (ease of GPU bringup), so I'll defer that one to Steve and Rob. > > Signed-off-by: Adrián Larumbe <adrian.larumbe@xxxxxxxxxxxxx> > --- > drivers/gpu/drm/panfrost/panfrost_gpu.c | 15 +++++++++++++-- > 1 file changed, 13 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/panfrost/panfrost_gpu.c b/drivers/gpu/drm/panfrost/panfrost_gpu.c > index 5a33919fa213..495621324de1 100644 > --- a/drivers/gpu/drm/panfrost/panfrost_gpu.c > +++ b/drivers/gpu/drm/panfrost/panfrost_gpu.c > @@ -237,9 +237,10 @@ static const struct panfrost_model gpu_models[] = { > */ > GPU_MODEL(g57, 0x9003, > 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"; > @@ -324,6 +325,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); > > @@ -344,6 +351,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) > @@ -486,7 +495,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,