Hi Luca Ceresoli,

Thanks for the patch.

> -----Original Message-----
> From: Luca Ceresoli <[email protected]>
> Sent: 18 March 2026 09:40
> Subject: [PATCH v3 1/4] drm: renesas: rz-du: rzg2l_du_encoder: convert to 
> of_drm_find_and_get_bridge()
> 
> of_drm_find_bridge() is deprecated. Move to its replacement
> of_drm_find_and_get_bridge() which gets a bridge reference, and ensure it is 
> put when done.
> 
> This is made somewhat simpler by the fact that 'bridge' is a local variable.
> 
> However we need to handle both branches of the main if().
> 
> In the 'else' case, just switch to of_drm_find_and_get_bridge() to ensure the 
> bridge is not freed
> while in use in the function tail
> (drm_bridge_attach() mainly).
> 
> In the 'then' case, devm_drm_panel_bridge_add_typed() already increments the 
> refcount using devres
> which ties the bridge allocation lifetime to the device lifetime, so we would 
> not need to do anything.
> However to have the same behaviour in both branches take an additional 
> reference here, so that the
> bridge needs to be put whichever branch is taken without more complicated 
> logic. Ensure to clear the
> bridge pointer however, to avoid calling drm_bridge_put() on an ERR_PTR.
> 
> Signed-off-by: Luca Ceresoli <[email protected]>

Reviewed-by: Biju Das <[email protected]>

Tested on Renesas RZ/V2L SMARC EVK

So,

Tested-by: Biju Das <[email protected]>

Cheers,
Biju



> ---
>  drivers/gpu/drm/renesas/rz-du/rzg2l_du_encoder.c | 14 ++++++++++----
>  1 file changed, 10 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/gpu/drm/renesas/rz-du/rzg2l_du_encoder.c 
> b/drivers/gpu/drm/renesas/rz-
> du/rzg2l_du_encoder.c
> index 5e6dd16705e6..9b65bcefdb86 100644
> --- a/drivers/gpu/drm/renesas/rz-du/rzg2l_du_encoder.c
> +++ b/drivers/gpu/drm/renesas/rz-du/rzg2l_du_encoder.c
> @@ -67,7 +67,7 @@ int rzg2l_du_encoder_init(struct rzg2l_du_device  *rcdu,  {
>       struct rzg2l_du_encoder *renc;
>       struct drm_connector *connector;
> -     struct drm_bridge *bridge;
> +     struct drm_bridge *bridge __free(drm_bridge_put) = NULL;
>       int ret;
> 
>       /*
> @@ -83,10 +83,16 @@ int rzg2l_du_encoder_init(struct rzg2l_du_device  *rcdu,
> 
>               bridge = devm_drm_panel_bridge_add_typed(rcdu->dev, panel,
>                                                        
> DRM_MODE_CONNECTOR_DPI);
> -             if (IS_ERR(bridge))
> -                     return PTR_ERR(bridge);
> +             if (IS_ERR(bridge)) {
> +                     // Inhibit the cleanup action on an ERR_PTR
> +                     ret = PTR_ERR(bridge);
> +                     bridge = NULL;
> +                     return ret;
> +             }
> +
> +             drm_bridge_get(bridge);
>       } else {
> -             bridge = of_drm_find_bridge(enc_node);
> +             bridge = of_drm_find_and_get_bridge(enc_node);
>               if (!bridge)
>                       return -EPROBE_DEFER;
>       }
> 
> --
> 2.53.0

Reply via email to