RE: [PATCH v3 1/4] drm: renesas: rz-du: rzg2l_du_encoder: convert to of_drm_find_and_get_bridge()

Biju Das
2026-03-19T14:29:24Z

Hi Luca Ceresoli,

Thanks for the patch.

> -----Original Message-----
> From: Luca Ceresoli <luca.ceresoli@bootlin.com>
> 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 <luca.ceresoli@bootlin.com>

Reviewed-by: Biju Das <biju.das.jz@bp.renesas.com>

Tested on Renesas RZ/V2L SMARC EVK

So,

Tested-by: Biju Das <biju.das.jz@bp.renesas.com>

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