Re: [PATCH] drm/vc4: crtc: Fix runtime_pm reference counting

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello Maxime,

On 2/3/22 11:20, Maxime Ripard wrote:
> At boot on the BCM2711, if the HDMI controllers are running, the CRTC
> driver will disable itself and its associated HDMI controller to work
> around a hardware bug that would leave some pixels stuck in a FIFO.
> 
> In order to avoid that issue, we need to run some operations in lockstep
> between the CRTC and HDMI controller, and we need to make sure the HDMI
> controller will be powered properly.
> 
> However, since we haven't enabled it through KMS, the runtime_pm state
> is off at this point so we need to make sure the device is powered
> through pm_runtime_resume_and_get, and once the operations are complete,
> we call pm_runtime_put.
> 
> However, the HDMI controller will do that itself in its
> post_crtc_powerdown, which means we'll end up calling pm_runtime_put for
> a single pm_runtime_get, throwing the reference counting off. Let's
> remove the pm_runtime_put call in the CRTC code in order to have the
> proper counting.
> 
> Fixes: bca10db67bda ("drm/vc4: crtc: Make sure the HDMI controller is powered when disabling")
> Signed-off-by: Maxime Ripard <maxime@xxxxxxxxxx>
> ---
>  drivers/gpu/drm/vc4/vc4_crtc.c | 8 +++++---
>  1 file changed, 5 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/gpu/drm/vc4/vc4_crtc.c b/drivers/gpu/drm/vc4/vc4_crtc.c
> index 287dbc89ad64..799aaf8c1abf 100644
> --- a/drivers/gpu/drm/vc4/vc4_crtc.c
> +++ b/drivers/gpu/drm/vc4/vc4_crtc.c
> @@ -525,9 +525,11 @@ int vc4_crtc_disable_at_boot(struct drm_crtc *crtc)
>  	if (ret)
>  		return ret;
>  
> -	ret = pm_runtime_put(&vc4_hdmi->pdev->dev);
> -	if (ret)
> -		return ret;
> +	/*
> +	 * post_crtc_powerdown will have called pm_runtime_put, so we
> +	 * don't need it here otherwise we'll get the reference counting
> +	 * wrong.
> +	 */
>

I'm not familiar with the BCM2711 SoC nor its HDMI controller but your
commit message clearly explain the issue and is nice to have a comment
here, to avoid someone trying to do a pm_runtime_put() again.

Reviewed-by: Javier Martinez Canillas <javierm@xxxxxxxxxx>

Best regards,
-- 
Javier Martinez Canillas
Linux Engineering
Red Hat




[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux