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