mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH v2] drm/bridge: waveshare-dsi: Register and attach our DSI device at probe
@ 2026-02-06 12:57 Marek Vasut
  2026-02-06 14:34 ` Luca Ceresoli
  2026-03-03  8:14 ` Luca Ceresoli
  0 siblings, 2 replies; 4+ messages in thread
From: Marek Vasut @ 2026-02-06 12:57 UTC (permalink / raw)
  To: dri-devel
  Cc: Marek Vasut, Luca Ceresoli, Andrzej Hajda, David Airlie,
	Jernej Skrabec, Jonas Karlman, Laurent Pinchart,
	Maarten Lankhorst, Maxime Ripard, Neil Armstrong, Robert Foss,
	Simona Vetter, Thomas Zimmermann, linux-kernel,
	linux-renesas-soc

In order to avoid any probe ordering issue, the best practice is to move
the secondary MIPI-DSI device registration and attachment to the
MIPI-DSI host at probe time.

Besides solving the probe ordering problems, this makes the bridge work
with R-Car DU. The R-Car DU will attempt to locate the DSI host bridge in
its own rcar_du_probe()->rcar_du_modeset_init()->rcar_du_encoder_init()
by calling of_drm_find_bridge() which calls of_drm_find_and_get_bridge()
and iterates over bridge_list to locate the DSI host bridge.

However, unless the WS driver calls mipi_dsi_attach() in probe(), the
DSI host bridge .attach callback rcar_mipi_dsi_host_attach() is not
called and the DSI host bridge is not added into bridge_list. Therefore
the of_drm_find_and_get_bridge() called from du_probe() will never find
the DSI host bridge and probe will indefinitelly fail with -EPROBE_DEFER.

The circular dependency here is, that if rcar_du_encoder_init() would
manage to find the DSI host bridge, it would call the WS driver .attach
callback ws_bridge_bridge_attach(), but this is too late and can never
happen. This change avoids the circular dependency.

Reviewed-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
Signed-off-by: Marek Vasut <marek.vasut+renesas@mailbox.org>
---
Note that this is similar to e.g. commit
6ef7ee48765f ("drm/bridge: sn65dsi83: Register and attach our DSI device at probe")
and pretty much what every other DSI-to-DPI bridge does.
---
Cc: Andrzej Hajda <andrzej.hajda@intel.com>
Cc: David Airlie <airlied@gmail.com>
Cc: Jernej Skrabec <jernej.skrabec@gmail.com>
Cc: Jonas Karlman <jonas@kwiboo.se>
Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com>
Cc: Luca Ceresoli <luca.ceresoli@bootlin.com>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Maxime Ripard <mripard@kernel.org>
Cc: Neil Armstrong <neil.armstrong@linaro.org>
Cc: Robert Foss <rfoss@kernel.org>
Cc: Simona Vetter <simona@ffwll.ch>
Cc: Thomas Zimmermann <tzimmermann@suse.de>
Cc: dri-devel@lists.freedesktop.org
Cc: linux-kernel@vger.kernel.org
Cc: linux-renesas-soc@vger.kernel.org
---
V2: - Update commit message with issue description
    - Add RB from Luca
---
 drivers/gpu/drm/bridge/waveshare-dsi.c | 7 +------
 1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/bridge/waveshare-dsi.c b/drivers/gpu/drm/bridge/waveshare-dsi.c
index 43f4e7412d722..9254446f54958 100644
--- a/drivers/gpu/drm/bridge/waveshare-dsi.c
+++ b/drivers/gpu/drm/bridge/waveshare-dsi.c
@@ -80,11 +80,6 @@ static int ws_bridge_bridge_attach(struct drm_bridge *bridge,
 				   enum drm_bridge_attach_flags flags)
 {
 	struct ws_bridge *ws = bridge_to_ws_bridge(bridge);
-	int ret;
-
-	ret = ws_bridge_attach_dsi(ws);
-	if (ret)
-		return ret;
 
 	return drm_bridge_attach(encoder, ws->next_bridge,
 				 &ws->bridge, flags);
@@ -179,7 +174,7 @@ static int ws_bridge_probe(struct i2c_client *i2c)
 	ws->bridge.of_node = dev->of_node;
 	devm_drm_bridge_add(dev, &ws->bridge);
 
-	return 0;
+	return ws_bridge_attach_dsi(ws);
 }
 
 static const struct of_device_id ws_bridge_of_ids[] = {
-- 
2.51.0


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v2] drm/bridge: waveshare-dsi: Register and attach our DSI device at probe
  2026-02-06 12:57 [PATCH v2] drm/bridge: waveshare-dsi: Register and attach our DSI device at probe Marek Vasut
@ 2026-02-06 14:34 ` Luca Ceresoli
  2026-03-02 21:34   ` Marek Vasut
  2026-03-03  8:14 ` Luca Ceresoli
  1 sibling, 1 reply; 4+ messages in thread
From: Luca Ceresoli @ 2026-02-06 14:34 UTC (permalink / raw)
  To: Marek Vasut, dri-devel
  Cc: Andrzej Hajda, David Airlie, Jernej Skrabec, Jonas Karlman,
	Laurent Pinchart, Maarten Lankhorst, Maxime Ripard,
	Neil Armstrong, Robert Foss, Simona Vetter, Thomas Zimmermann,
	linux-kernel, linux-renesas-soc

Hi Marek,

On Fri Feb 6, 2026 at 1:57 PM CET, Marek Vasut wrote:
> In order to avoid any probe ordering issue, the best practice is to move
> the secondary MIPI-DSI device registration and attachment to the
> MIPI-DSI host at probe time.
>
> Besides solving the probe ordering problems, this makes the bridge work
> with R-Car DU. The R-Car DU will attempt to locate the DSI host bridge in
> its own rcar_du_probe()->rcar_du_modeset_init()->rcar_du_encoder_init()
> by calling of_drm_find_bridge() which calls of_drm_find_and_get_bridge()
> and iterates over bridge_list to locate the DSI host bridge.
>
> However, unless the WS driver calls mipi_dsi_attach() in probe(), the
> DSI host bridge .attach callback rcar_mipi_dsi_host_attach() is not
> called and the DSI host bridge is not added into bridge_list. Therefore
> the of_drm_find_and_get_bridge() called from du_probe() will never find
> the DSI host bridge and probe will indefinitelly fail with -EPROBE_DEFER.
>
> The circular dependency here is, that if rcar_du_encoder_init() would
> manage to find the DSI host bridge, it would call the WS driver .attach
> callback ws_bridge_bridge_attach(), but this is too late and can never
> happen. This change avoids the circular dependency.
>
> Reviewed-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
> Signed-off-by: Marek Vasut <marek.vasut+renesas@mailbox.org>

Thanks for the very clear description! R-by confirmed.

Luca

--
Luca Ceresoli, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v2] drm/bridge: waveshare-dsi: Register and attach our DSI device at probe
  2026-02-06 14:34 ` Luca Ceresoli
@ 2026-03-02 21:34   ` Marek Vasut
  0 siblings, 0 replies; 4+ messages in thread
From: Marek Vasut @ 2026-03-02 21:34 UTC (permalink / raw)
  To: Luca Ceresoli, dri-devel
  Cc: Andrzej Hajda, David Airlie, Jernej Skrabec, Jonas Karlman,
	Laurent Pinchart, Maarten Lankhorst, Maxime Ripard,
	Neil Armstrong, Robert Foss, Simona Vetter, Thomas Zimmermann,
	linux-kernel, linux-renesas-soc

On 2/6/26 3:34 PM, Luca Ceresoli wrote:
> Hi Marek,
> 
> On Fri Feb 6, 2026 at 1:57 PM CET, Marek Vasut wrote:
>> In order to avoid any probe ordering issue, the best practice is to move
>> the secondary MIPI-DSI device registration and attachment to the
>> MIPI-DSI host at probe time.
>>
>> Besides solving the probe ordering problems, this makes the bridge work
>> with R-Car DU. The R-Car DU will attempt to locate the DSI host bridge in
>> its own rcar_du_probe()->rcar_du_modeset_init()->rcar_du_encoder_init()
>> by calling of_drm_find_bridge() which calls of_drm_find_and_get_bridge()
>> and iterates over bridge_list to locate the DSI host bridge.
>>
>> However, unless the WS driver calls mipi_dsi_attach() in probe(), the
>> DSI host bridge .attach callback rcar_mipi_dsi_host_attach() is not
>> called and the DSI host bridge is not added into bridge_list. Therefore
>> the of_drm_find_and_get_bridge() called from du_probe() will never find
>> the DSI host bridge and probe will indefinitelly fail with -EPROBE_DEFER.
>>
>> The circular dependency here is, that if rcar_du_encoder_init() would
>> manage to find the DSI host bridge, it would call the WS driver .attach
>> callback ws_bridge_bridge_attach(), but this is too late and can never
>> happen. This change avoids the circular dependency.
>>
>> Reviewed-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
>> Signed-off-by: Marek Vasut <marek.vasut+renesas@mailbox.org>
> 
> Thanks for the very clear description! R-by confirmed.
Can this be applied now ?

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v2] drm/bridge: waveshare-dsi: Register and attach our DSI device at probe
  2026-02-06 12:57 [PATCH v2] drm/bridge: waveshare-dsi: Register and attach our DSI device at probe Marek Vasut
  2026-02-06 14:34 ` Luca Ceresoli
@ 2026-03-03  8:14 ` Luca Ceresoli
  1 sibling, 0 replies; 4+ messages in thread
From: Luca Ceresoli @ 2026-03-03  8:14 UTC (permalink / raw)
  To: dri-devel, Marek Vasut
  Cc: Andrzej Hajda, David Airlie, Jernej Skrabec, Jonas Karlman,
	Laurent Pinchart, Maarten Lankhorst, Maxime Ripard,
	Neil Armstrong, Robert Foss, Simona Vetter, Thomas Zimmermann,
	linux-kernel, linux-renesas-soc


On Fri, 06 Feb 2026 13:57:53 +0100, Marek Vasut wrote:
> In order to avoid any probe ordering issue, the best practice is to move
> the secondary MIPI-DSI device registration and attachment to the
> MIPI-DSI host at probe time.
> 
> Besides solving the probe ordering problems, this makes the bridge work
> with R-Car DU. The R-Car DU will attempt to locate the DSI host bridge in
> its own rcar_du_probe()->rcar_du_modeset_init()->rcar_du_encoder_init()
> by calling of_drm_find_bridge() which calls of_drm_find_and_get_bridge()
> and iterates over bridge_list to locate the DSI host bridge.
> 
> [...]

Applied, thanks!

[1/1] drm/bridge: waveshare-dsi: Register and attach our DSI device at probe
      commit: b8eb97ead862de7a321dd55a901542a372f8f1cd

Best regards,
-- 
Luca Ceresoli <luca.ceresoli@bootlin.com>


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2026-03-03  8:14 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-02-06 12:57 [PATCH v2] drm/bridge: waveshare-dsi: Register and attach our DSI device at probe Marek Vasut
2026-02-06 14:34 ` Luca Ceresoli
2026-03-02 21:34   ` Marek Vasut
2026-03-03  8:14 ` Luca Ceresoli

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®