On Mon Aug 26 15:30:54 2024 +0200, Jacopo Mondi wrote: > During the probe() routine, the PiSP BE driver needs to power up the > interface in order to identify and initialize the hardware. > > The driver resumes the interface by calling the > pispbe_runtime_resume() function directly, without going > through the pm_runtime helpers, but later suspends it by calling > pm_runtime_put_autosuspend(). > > This causes a PM usage count imbalance at probe time, notified by the > runtime_pm framework with the below message in the system log: > > pispbe 1000880000.pisp_be: Runtime PM usage count underflow! > > Fix this by resuming the interface using the pm runtime helpers instead > of calling the resume function directly and use the pm_runtime framework > in the probe() error path. While at it, remove manual suspend of the > interface in the remove() function. The driver cannot be unloaded if in > use, so simply disable runtime pm. > > To simplify the implementation, make the driver depend on PM as the > RPI5 platform where the ISP is integrated in uses the PM framework by > default. > > Fixes: 12187bd5d4f8 ("media: raspberrypi: Add support for PiSP BE") > Cc: sta...@vger.kernel.org > Tested-by: Naushir Patuck <na...@raspberrypi.com> > Reviewed-by: Naushir Patuck <na...@raspberrypi.com> > Reviewed-by: Laurent Pinchart <laurent.pinch...@ideasonboard.com> > Signed-off-by: Jacopo Mondi <jacopo.mo...@ideasonboard.com> > Signed-off-by: Hans Verkuil <hverk...@xs4all.nl>
Patch committed. Thanks, Hans Verkuil drivers/media/platform/raspberrypi/pisp_be/Kconfig | 1 + drivers/media/platform/raspberrypi/pisp_be/pisp_be.c | 5 ++--- 2 files changed, 3 insertions(+), 3 deletions(-) --- diff --git a/drivers/media/platform/raspberrypi/pisp_be/Kconfig b/drivers/media/platform/raspberrypi/pisp_be/Kconfig index 46765a2e4c4d..a9e51fd94aad 100644 --- a/drivers/media/platform/raspberrypi/pisp_be/Kconfig +++ b/drivers/media/platform/raspberrypi/pisp_be/Kconfig @@ -3,6 +3,7 @@ config VIDEO_RASPBERRYPI_PISP_BE depends on V4L_PLATFORM_DRIVERS depends on VIDEO_DEV depends on ARCH_BCM2835 || COMPILE_TEST + depends on PM select VIDEO_V4L2_SUBDEV_API select MEDIA_CONTROLLER select VIDEOBUF2_DMA_CONTIG diff --git a/drivers/media/platform/raspberrypi/pisp_be/pisp_be.c b/drivers/media/platform/raspberrypi/pisp_be/pisp_be.c index ccc6cb99868b..be794a123620 100644 --- a/drivers/media/platform/raspberrypi/pisp_be/pisp_be.c +++ b/drivers/media/platform/raspberrypi/pisp_be/pisp_be.c @@ -1725,7 +1725,7 @@ static int pispbe_probe(struct platform_device *pdev) pm_runtime_use_autosuspend(pispbe->dev); pm_runtime_enable(pispbe->dev); - ret = pispbe_runtime_resume(pispbe->dev); + ret = pm_runtime_resume_and_get(pispbe->dev); if (ret) goto pm_runtime_disable_err; @@ -1747,7 +1747,7 @@ static int pispbe_probe(struct platform_device *pdev) disable_devs_err: pispbe_destroy_devices(pispbe); pm_runtime_suspend_err: - pispbe_runtime_suspend(pispbe->dev); + pm_runtime_put(pispbe->dev); pm_runtime_disable_err: pm_runtime_dont_use_autosuspend(pispbe->dev); pm_runtime_disable(pispbe->dev); @@ -1761,7 +1761,6 @@ static void pispbe_remove(struct platform_device *pdev) pispbe_destroy_devices(pispbe); - pispbe_runtime_suspend(pispbe->dev); pm_runtime_dont_use_autosuspend(pispbe->dev); pm_runtime_disable(pispbe->dev); }