Re: [PATCH v2 3/8] drm/bridge/synopsys: dsi: defer probing if panel not available in bridge-attach

Heiko Stuebner
2018-07-04T10:36:15Z

Am Dienstag, 3. Juli 2018, 14:42:49 CEST schrieb Andrzej Hajda:
> On 18.06.2018 12:28, Heiko Stuebner wrote:
> > When the panel-driver is build as a module it currently fails hard as the
> > panel cannot be probed directly:
> >
> > dw_mipi_dsi_bind()
> > __dw_mipi_dsi_probe()
> > creates dsi bus
> > creates panel device
> > triggers panel module load
> > panel not probed (module not loaded or panel probe slow)
> > drm_bridge_attach
> > fails with -EINVAL due to empty panel_bridge
> >
> > So emit a -EPROBE_DEFER in that case to give the driver another
> > chance at getting the display later.
>
> Thats odd (at least for me), if the resource (panel in this case) is not
> present, bridge should not be attached (drm_bridge_attach should not be
> called). Ie __dw_mipi_dsi_probe should rather look for the panel and
> defer if not found. Resource gathering is the task of probe.
> drm_bridge_attach can be called after probe and it would be difficult
> for the caller to react properly for -EPROBE_DEFER error.

I think one of the problems comes from the fact that the panel only
gets probed (and even the panel-device created) after the dsi host bus
gets created in __dw_mipi_dsi_probe.

In hindsight, I think this is more of a concurrency issue between the
panel probing and calling dsi-attach and the dsi-controller looking for
the panel vs. panel-bridge.

So when I'm using drm_of_find_panel_or_bridge() as indicator of the
panel being, it probably makes things racy. I'll try to find a better
solution for the issue.

Heiko