Martin Blumenstingl wrote:
> @@ -360,6 +360,16 @@ static int meson_drv_bind_master(struct device *dev, 
> bool has_components)
>  
>  uninstall_irq:
>       free_irq(priv->vsync_irq, drm);
> +dsi_encoder_remove:
> +     if (meson_vpu_is_compatible(priv, VPU_COMPATIBLE_G12A))
> +             meson_encoder_dsi_remove(priv);
> +hdmi_encoder_remove:
> +     meson_encoder_hdmi_remove(priv);
> +unbind_components:
> +     if (has_components)
> +             component_unbind_all(dev, drm);

As 6a044642988b ("drm/meson: fix unbind path if HDMI fails to bind")
states, it seems invalid to call component_unbind_all() before
drm_dev_put(). Wouldn't this patch reintroduce the problem here?

In that sense the diff proposed by Martijn <li...@martijnvandeventer.nl>
behaves more correctly.


I've also found this thread [1] with another error path fixing patch. It
was suggested to improve that fix with managed drm device [2] interfaces but
AFAICS using devm_drm_dev_alloc() will reintroduce the problem mentioned
in 6a044642988b, too.

I think [1] should be applied as well with Martijn's patch?

[1]: 
https://lore.kernel.org/dri-devel/20240809124725.17956-1-abel...@astralinux.ru/T/#u
[2]: 
https://lore.kernel.org/dri-devel/20240828110421.14956-1-abel...@astralinux.ru/T/#u


Thanks!

> +cvbs_encoder_remove:
> +     meson_encoder_cvbs_remove(priv);
>  exit_afbcd:
>       if (priv->afbcd.ops)
>               priv->afbcd.ops->exit(priv);
> @@ -374,13 +384,6 @@ static int meson_drv_bind_master(struct device *dev, 
> bool has_components)
>  free_drm:
>       drm_dev_put(drm);
>  
> -     meson_encoder_dsi_remove(priv);
> -     meson_encoder_hdmi_remove(priv);
> -     meson_encoder_cvbs_remove(priv);
> -
> -     if (has_components)
> -             component_unbind_all(dev, drm);
> -
>       return ret;
>  }
>  
> -- 
> 2.49.0

Reply via email to