On Fri, 28 Aug 2026 21:56:43 +0100 Adrián Larumbe <[email protected]> wrote:
> The device init function feels a bit cluttered with things that should be > done in the specific subsystems where those locks and lists are being > used. Same goes for module parameters, it's best to limit them to the > subsystems where they're relevant. > > Signed-off-by: Adrián Larumbe <[email protected]> Reviewed-by: Boris Brezillon <[email protected]> It would also be good to have opaque structs for sub-components instead stuffing everything in panthor_device, but that can wait. > --- > drivers/gpu/drm/panfrost/panfrost_device.c | 10 ---------- > drivers/gpu/drm/panfrost/panfrost_drv.c | 7 ------- > drivers/gpu/drm/panfrost/panfrost_drv.h | 13 ------------- > drivers/gpu/drm/panfrost/panfrost_gem.c | 9 ++++++++- > drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c | 3 +++ > drivers/gpu/drm/panfrost/panfrost_gpu.c | 2 ++ > drivers/gpu/drm/panfrost/panfrost_job.c | 1 + > drivers/gpu/drm/panfrost/panfrost_mmu.c | 3 +++ > 8 files changed, 17 insertions(+), 31 deletions(-) > > diff --git a/drivers/gpu/drm/panfrost/panfrost_device.c > b/drivers/gpu/drm/panfrost/panfrost_device.c > index d2d2830f11a7..7daa2143f3c4 100644 > --- a/drivers/gpu/drm/panfrost/panfrost_device.c > +++ b/drivers/gpu/drm/panfrost/panfrost_device.c > @@ -223,16 +223,6 @@ int panfrost_device_init(struct panfrost_device *pfdev) > > pfdev->coherent = device_get_dma_attr(pfdev->base.dev) == > DEV_DMA_COHERENT; > > - mutex_init(&pfdev->shrinker_lock); > - INIT_LIST_HEAD(&pfdev->shrinker_list); > - > - mutex_init(&pfdev->sched_lock); > - INIT_LIST_HEAD(&pfdev->as_lru_list); > - > - spin_lock_init(&pfdev->as_lock); > - > - spin_lock_init(&pfdev->cycle_counter.lock); > - > #ifdef CONFIG_DEBUG_FS > mutex_init(&pfdev->debugfs.gems_lock); > INIT_LIST_HEAD(&pfdev->debugfs.gems_list); > diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c > b/drivers/gpu/drm/panfrost/panfrost_drv.c > index 80996e311a9d..ec8c1c08e147 100644 > --- a/drivers/gpu/drm/panfrost/panfrost_drv.c > +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c > @@ -21,7 +21,6 @@ > #include <drm/drm_utils.h> > > #include "panfrost_device.h" > -#include "panfrost_drv.h" > #include "panfrost_gem.h" > #include "panfrost_mmu.h" > #include "panfrost_job.h" > @@ -955,12 +954,6 @@ static const struct drm_driver panfrost_drm_driver = { > #endif > }; > > -#ifdef CONFIG_TRANSPARENT_HUGEPAGE > -bool panfrost_transparent_hugepage = true; > -module_param_named(transparent_hugepage, panfrost_transparent_hugepage, > bool, 0400); > -MODULE_PARM_DESC(transparent_hugepage, "Use a dedicated tmpfs mount point > with Transparent Hugepage enabled (true = default)"); > -#endif > - > static int panfrost_probe(struct platform_device *pdev) > { > struct panfrost_device *pfdev; > diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.h > b/drivers/gpu/drm/panfrost/panfrost_drv.h > deleted file mode 100644 > index bac0c415d4da..000000000000 > --- a/drivers/gpu/drm/panfrost/panfrost_drv.h > +++ /dev/null > @@ -1,13 +0,0 @@ > -/* SPDX-License-Identifier: GPL-2.0 or MIT */ > -/* Copyright 2025 Amazon.com, Inc. or its affiliates */ > - > -#ifndef __PANFROST_DRV_H__ > -#define __PANFROST_DRV_H__ > - > -#if IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE) > -extern bool panfrost_transparent_hugepage; > -#else > -#define panfrost_transparent_hugepage false > -#endif > - > -#endif > diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.c > b/drivers/gpu/drm/panfrost/panfrost_gem.c > index 7b993a089af2..15105b7f954b 100644 > --- a/drivers/gpu/drm/panfrost/panfrost_gem.c > +++ b/drivers/gpu/drm/panfrost/panfrost_gem.c > @@ -11,10 +11,17 @@ > #include <drm/panfrost_drm.h> > #include <drm/drm_print.h> > #include "panfrost_device.h" > -#include "panfrost_drv.h" > #include "panfrost_gem.h" > #include "panfrost_mmu.h" > > +#ifdef CONFIG_TRANSPARENT_HUGEPAGE > +bool panfrost_transparent_hugepage = true; > +module_param_named(transparent_hugepage, panfrost_transparent_hugepage, > bool, 0400); > +MODULE_PARM_DESC(transparent_hugepage, "Use a dedicated tmpfs mount point > with Transparent Hugepage enabled (true = default)"); > +#else > +#define panfrost_transparent_hugepage false > +#endif > + > int panfrost_gem_init(struct panfrost_device *pfdev) > { > int err; > diff --git a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c > b/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c > index fefae87535d6..72cd7a165e6d 100644 > --- a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c > +++ b/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c > @@ -97,6 +97,9 @@ panfrost_gem_shrinker_scan(struct shrinker *shrinker, > struct shrink_control *sc) > */ > int panfrost_gem_shrinker_init(struct panfrost_device *pfdev) > { > + mutex_init(&pfdev->shrinker_lock); > + INIT_LIST_HEAD(&pfdev->shrinker_list); > + > pfdev->shrinker = shrinker_alloc(0, "drm-panfrost"); > if (!pfdev->shrinker) > return -ENOMEM; > diff --git a/drivers/gpu/drm/panfrost/panfrost_gpu.c > b/drivers/gpu/drm/panfrost/panfrost_gpu.c > index 7d555e63e21a..8a15ccce08e9 100644 > --- a/drivers/gpu/drm/panfrost/panfrost_gpu.c > +++ b/drivers/gpu/drm/panfrost/panfrost_gpu.c > @@ -516,6 +516,8 @@ int panfrost_gpu_init(struct panfrost_device *pfdev) > { > int err; > > + spin_lock_init(&pfdev->cycle_counter.lock); > + > err = panfrost_gpu_soft_reset(pfdev); > if (err) > return err; > diff --git a/drivers/gpu/drm/panfrost/panfrost_job.c > b/drivers/gpu/drm/panfrost/panfrost_job.c > index 2d12b83e900a..6f920fd0fc4e 100644 > --- a/drivers/gpu/drm/panfrost/panfrost_job.c > +++ b/drivers/gpu/drm/panfrost/panfrost_job.c > @@ -873,6 +873,7 @@ int panfrost_jm_init(struct panfrost_device *pfdev) > > INIT_WORK(&pfdev->reset.work, panfrost_reset_work); > spin_lock_init(&js->job_lock); > + mutex_init(&pfdev->sched_lock); > > js->irq = platform_get_irq_byname(to_platform_device(pfdev->base.dev), > "job"); > if (js->irq < 0) > diff --git a/drivers/gpu/drm/panfrost/panfrost_mmu.c > b/drivers/gpu/drm/panfrost/panfrost_mmu.c > index 4a3162c3b659..5c393ed6e310 100644 > --- a/drivers/gpu/drm/panfrost/panfrost_mmu.c > +++ b/drivers/gpu/drm/panfrost/panfrost_mmu.c > @@ -955,6 +955,9 @@ int panfrost_mmu_init(struct panfrost_device *pfdev) > { > int err; > > + INIT_LIST_HEAD(&pfdev->as_lru_list); > + spin_lock_init(&pfdev->as_lock); > + > pfdev->mmu_irq = > platform_get_irq_byname(to_platform_device(pfdev->base.dev), "mmu"); > if (pfdev->mmu_irq < 0) > return pfdev->mmu_irq; >
