* [PATCH v2 1/5] drm/sti: hda: add bridge before attaching
2025-10-21 21:00 [PATCH v2 0/5] drm/bridge: enforce drm_bridge_add() before drm_bridge_attach() Luca Ceresoli
@ 2025-10-21 21:00 ` Luca Ceresoli
2025-10-27 15:23 ` Alain Volmat
2025-10-21 21:00 ` [PATCH v2 2/5] drm/sti: hdmi: " Luca Ceresoli
` (3 subsequent siblings)
4 siblings, 1 reply; 8+ messages in thread
From: Luca Ceresoli @ 2025-10-21 21:00 UTC (permalink / raw)
To: Alain Volmat, Raphael Gallais-Pou, Maarten Lankhorst,
Maxime Ripard, Thomas Zimmermann, David Airlie, Simona Vetter,
Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Raphael Gallais-Pou
Cc: Hui Pu, Thomas Petazzoni, dri-devel, linux-kernel, Luca Ceresoli
DRM bridges should be always added to the global bridge list before being
attached.
Link: https://lore.kernel.org/all/20250709-sophisticated-loon-of-rain-6ccdd8@houat/
Acked-by: Raphael Gallais-Pou <rgallaispou@gmail.com>
Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
---
drivers/gpu/drm/sti/sti_hda.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/drivers/gpu/drm/sti/sti_hda.c b/drivers/gpu/drm/sti/sti_hda.c
index 2c015f563de96ae58959801493ead870c49f70e5..b7397827889c94d6f8e8c2a48b09f06e29ceeaf7 100644
--- a/drivers/gpu/drm/sti/sti_hda.c
+++ b/drivers/gpu/drm/sti/sti_hda.c
@@ -779,6 +779,8 @@ static int sti_hda_probe(struct platform_device *pdev)
return PTR_ERR(hda->clk_hddac);
}
+ drm_bridge_add(&hda->bridge);
+
platform_set_drvdata(pdev, hda);
return component_add(&pdev->dev, &sti_hda_ops);
@@ -786,7 +788,10 @@ static int sti_hda_probe(struct platform_device *pdev)
static void sti_hda_remove(struct platform_device *pdev)
{
+ struct sti_hda *hda = platform_get_drvdata(pdev);
+
component_del(&pdev->dev, &sti_hda_ops);
+ drm_bridge_remove(&hda->bridge);
}
static const struct of_device_id hda_of_match[] = {
--
2.51.0
^ permalink raw reply related [flat|nested] 8+ messages in thread* Re: [PATCH v2 1/5] drm/sti: hda: add bridge before attaching
2025-10-21 21:00 ` [PATCH v2 1/5] drm/sti: hda: add bridge before attaching Luca Ceresoli
@ 2025-10-27 15:23 ` Alain Volmat
0 siblings, 0 replies; 8+ messages in thread
From: Alain Volmat @ 2025-10-27 15:23 UTC (permalink / raw)
To: Luca Ceresoli
Cc: Raphael Gallais-Pou, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Andrzej Hajda,
Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman,
Jernej Skrabec, Hui Pu, Thomas Petazzoni, dri-devel, linux-kernel
Hi Luca,
On Tue, Oct 21, 2025 at 11:00:44PM +0200, Luca Ceresoli wrote:
> DRM bridges should be always added to the global bridge list before being
> attached.
>
> Link: https://lore.kernel.org/all/20250709-sophisticated-loon-of-rain-6ccdd8@houat/
> Acked-by: Raphael Gallais-Pou <rgallaispou@gmail.com>
> Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
> ---
> drivers/gpu/drm/sti/sti_hda.c | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/drivers/gpu/drm/sti/sti_hda.c b/drivers/gpu/drm/sti/sti_hda.c
> index 2c015f563de96ae58959801493ead870c49f70e5..b7397827889c94d6f8e8c2a48b09f06e29ceeaf7 100644
> --- a/drivers/gpu/drm/sti/sti_hda.c
> +++ b/drivers/gpu/drm/sti/sti_hda.c
> @@ -779,6 +779,8 @@ static int sti_hda_probe(struct platform_device *pdev)
> return PTR_ERR(hda->clk_hddac);
> }
>
> + drm_bridge_add(&hda->bridge);
> +
> platform_set_drvdata(pdev, hda);
>
> return component_add(&pdev->dev, &sti_hda_ops);
> @@ -786,7 +788,10 @@ static int sti_hda_probe(struct platform_device *pdev)
>
> static void sti_hda_remove(struct platform_device *pdev)
> {
> + struct sti_hda *hda = platform_get_drvdata(pdev);
> +
> component_del(&pdev->dev, &sti_hda_ops);
> + drm_bridge_remove(&hda->bridge);
> }
>
> static const struct of_device_id hda_of_match[] = {
>
> --
> 2.51.0
>
Acked-by: Alain Volmat <alain.volmat@foss.st.com>
Regards,
Alain
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v2 2/5] drm/sti: hdmi: add bridge before attaching
2025-10-21 21:00 [PATCH v2 0/5] drm/bridge: enforce drm_bridge_add() before drm_bridge_attach() Luca Ceresoli
2025-10-21 21:00 ` [PATCH v2 1/5] drm/sti: hda: add bridge before attaching Luca Ceresoli
@ 2025-10-21 21:00 ` Luca Ceresoli
2025-10-27 15:23 ` Alain Volmat
2025-10-21 21:00 ` [PATCH v2 3/5] drm/bridge: document that adding a bridge is mandatory before attach Luca Ceresoli
` (2 subsequent siblings)
4 siblings, 1 reply; 8+ messages in thread
From: Luca Ceresoli @ 2025-10-21 21:00 UTC (permalink / raw)
To: Alain Volmat, Raphael Gallais-Pou, Maarten Lankhorst,
Maxime Ripard, Thomas Zimmermann, David Airlie, Simona Vetter,
Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Raphael Gallais-Pou
Cc: Hui Pu, Thomas Petazzoni, dri-devel, linux-kernel, Luca Ceresoli
DRM bridges should be always added to the global bridge list before being
attached.
Link: https://lore.kernel.org/all/20250709-sophisticated-loon-of-rain-6ccdd8@houat/
Acked-by: Raphael Gallais-Pou <rgallaispou@gmail.com>
Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
---
drivers/gpu/drm/sti/sti_hdmi.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/gpu/drm/sti/sti_hdmi.c b/drivers/gpu/drm/sti/sti_hdmi.c
index 4e7c3d78b2b971f8083deae96f3967b44a6499cb..f8222e60b1e01afb6d93f816915f17056c060f22 100644
--- a/drivers/gpu/drm/sti/sti_hdmi.c
+++ b/drivers/gpu/drm/sti/sti_hdmi.c
@@ -1459,6 +1459,7 @@ static int sti_hdmi_probe(struct platform_device *pdev)
platform_set_drvdata(pdev, hdmi);
+ drm_bridge_add(&hdmi->bridge);
return component_add(&pdev->dev, &sti_hdmi_ops);
release_adapter:
@@ -1475,6 +1476,7 @@ static void sti_hdmi_remove(struct platform_device *pdev)
if (hdmi->audio_pdev)
platform_device_unregister(hdmi->audio_pdev);
component_del(&pdev->dev, &sti_hdmi_ops);
+ drm_bridge_remove(&hdmi->bridge);
}
struct platform_driver sti_hdmi_driver = {
--
2.51.0
^ permalink raw reply related [flat|nested] 8+ messages in thread* Re: [PATCH v2 2/5] drm/sti: hdmi: add bridge before attaching
2025-10-21 21:00 ` [PATCH v2 2/5] drm/sti: hdmi: " Luca Ceresoli
@ 2025-10-27 15:23 ` Alain Volmat
0 siblings, 0 replies; 8+ messages in thread
From: Alain Volmat @ 2025-10-27 15:23 UTC (permalink / raw)
To: Luca Ceresoli
Cc: Raphael Gallais-Pou, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Andrzej Hajda,
Neil Armstrong, Robert Foss, Laurent Pinchart, Jonas Karlman,
Jernej Skrabec, Hui Pu, Thomas Petazzoni, dri-devel, linux-kernel
Hi Luca,
On Tue, Oct 21, 2025 at 11:00:45PM +0200, Luca Ceresoli wrote:
> DRM bridges should be always added to the global bridge list before being
> attached.
>
> Link: https://lore.kernel.org/all/20250709-sophisticated-loon-of-rain-6ccdd8@houat/
> Acked-by: Raphael Gallais-Pou <rgallaispou@gmail.com>
> Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
> ---
> drivers/gpu/drm/sti/sti_hdmi.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/drivers/gpu/drm/sti/sti_hdmi.c b/drivers/gpu/drm/sti/sti_hdmi.c
> index 4e7c3d78b2b971f8083deae96f3967b44a6499cb..f8222e60b1e01afb6d93f816915f17056c060f22 100644
> --- a/drivers/gpu/drm/sti/sti_hdmi.c
> +++ b/drivers/gpu/drm/sti/sti_hdmi.c
> @@ -1459,6 +1459,7 @@ static int sti_hdmi_probe(struct platform_device *pdev)
>
> platform_set_drvdata(pdev, hdmi);
>
> + drm_bridge_add(&hdmi->bridge);
> return component_add(&pdev->dev, &sti_hdmi_ops);
>
> release_adapter:
> @@ -1475,6 +1476,7 @@ static void sti_hdmi_remove(struct platform_device *pdev)
> if (hdmi->audio_pdev)
> platform_device_unregister(hdmi->audio_pdev);
> component_del(&pdev->dev, &sti_hdmi_ops);
> + drm_bridge_remove(&hdmi->bridge);
> }
>
> struct platform_driver sti_hdmi_driver = {
>
> --
> 2.51.0
>
Acked-by: Alain Volmat <alain.volmat@foss.st.com>
Regards,
Alain
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v2 3/5] drm/bridge: document that adding a bridge is mandatory before attach
2025-10-21 21:00 [PATCH v2 0/5] drm/bridge: enforce drm_bridge_add() before drm_bridge_attach() Luca Ceresoli
2025-10-21 21:00 ` [PATCH v2 1/5] drm/sti: hda: add bridge before attaching Luca Ceresoli
2025-10-21 21:00 ` [PATCH v2 2/5] drm/sti: hdmi: " Luca Ceresoli
@ 2025-10-21 21:00 ` Luca Ceresoli
2025-10-21 21:00 ` [PATCH v2 4/5] drm/bridge: add warning for bridges attached without being added Luca Ceresoli
2025-10-21 21:00 ` [PATCH v2 5/5] drm/bridge: add warning for bridges using neither devm_drm_bridge_alloc() nor drm_bridge_add() Luca Ceresoli
4 siblings, 0 replies; 8+ messages in thread
From: Luca Ceresoli @ 2025-10-21 21:00 UTC (permalink / raw)
To: Alain Volmat, Raphael Gallais-Pou, Maarten Lankhorst,
Maxime Ripard, Thomas Zimmermann, David Airlie, Simona Vetter,
Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Raphael Gallais-Pou
Cc: Hui Pu, Thomas Petazzoni, dri-devel, linux-kernel, Luca Ceresoli
At the moment it's not documented that you need to add a bridge before
attaching it. Clarify that.
Suggested-by: Maxime Ripard <mripard@kernel.org>
Link: https://lore.kernel.org/all/20250709-sophisticated-loon-of-rain-6ccdd8@houat/
Reviewed-by: Raphael Gallais-Pou <rgallaispou@gmail.com>
Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
---
drivers/gpu/drm/drm_bridge.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c
index 53e7ece36dd940aabd1c0880f296fce7224a12ac..1246a52f8767b52c5f10139aa897824b3c2f28da 100644
--- a/drivers/gpu/drm/drm_bridge.c
+++ b/drivers/gpu/drm/drm_bridge.c
@@ -422,6 +422,9 @@ static bool drm_bridge_is_atomic(struct drm_bridge *bridge)
* If non-NULL the previous bridge must be already attached by a call to this
* function.
*
+ * The bridge to be attached must have been previously added by
+ * drm_bridge_add().
+ *
* Note that bridges attached to encoders are auto-detached during encoder
* cleanup in drm_encoder_cleanup(), so drm_bridge_attach() should generally
* *not* be balanced with a drm_bridge_detach() in driver code.
--
2.51.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v2 4/5] drm/bridge: add warning for bridges attached without being added
2025-10-21 21:00 [PATCH v2 0/5] drm/bridge: enforce drm_bridge_add() before drm_bridge_attach() Luca Ceresoli
` (2 preceding siblings ...)
2025-10-21 21:00 ` [PATCH v2 3/5] drm/bridge: document that adding a bridge is mandatory before attach Luca Ceresoli
@ 2025-10-21 21:00 ` Luca Ceresoli
2025-10-21 21:00 ` [PATCH v2 5/5] drm/bridge: add warning for bridges using neither devm_drm_bridge_alloc() nor drm_bridge_add() Luca Ceresoli
4 siblings, 0 replies; 8+ messages in thread
From: Luca Ceresoli @ 2025-10-21 21:00 UTC (permalink / raw)
To: Alain Volmat, Raphael Gallais-Pou, Maarten Lankhorst,
Maxime Ripard, Thomas Zimmermann, David Airlie, Simona Vetter,
Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Raphael Gallais-Pou
Cc: Hui Pu, Thomas Petazzoni, dri-devel, linux-kernel, Luca Ceresoli
DRM bridges must be added before they are attached. Add a warning to catch
violations.
The warning is based on the bridge not being part of any list, so it will
trigger if the bridge is being attached without ever having been added.
It won't catch cases of bridges attached after having been added and then
removed, because in that case the bridge will be in
bridge_lingering_list. However such a case is both more demanding to detect
and less likely to happen, so it can be left unchecked, at least for now.
Link: https://lore.kernel.org/all/20250709-sophisticated-loon-of-rain-6ccdd8@houat/
Reviewed-by: Raphael Gallais-Pou <rgallaispou@gmail.com>
Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
---
drivers/gpu/drm/drm_bridge.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c
index 1246a52f8767b52c5f10139aa897824b3c2f28da..6dba601a056bb3cff8b8dd5b1ec46299235b2d85 100644
--- a/drivers/gpu/drm/drm_bridge.c
+++ b/drivers/gpu/drm/drm_bridge.c
@@ -441,6 +441,9 @@ int drm_bridge_attach(struct drm_encoder *encoder, struct drm_bridge *bridge,
if (!encoder || !bridge)
return -EINVAL;
+ if (list_empty(&bridge->list))
+ DRM_WARN("Missing drm_bridge_add() before attach\n");
+
drm_bridge_get(bridge);
if (previous && (!previous->dev || previous->encoder != encoder)) {
--
2.51.0
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH v2 5/5] drm/bridge: add warning for bridges using neither devm_drm_bridge_alloc() nor drm_bridge_add()
2025-10-21 21:00 [PATCH v2 0/5] drm/bridge: enforce drm_bridge_add() before drm_bridge_attach() Luca Ceresoli
` (3 preceding siblings ...)
2025-10-21 21:00 ` [PATCH v2 4/5] drm/bridge: add warning for bridges attached without being added Luca Ceresoli
@ 2025-10-21 21:00 ` Luca Ceresoli
4 siblings, 0 replies; 8+ messages in thread
From: Luca Ceresoli @ 2025-10-21 21:00 UTC (permalink / raw)
To: Alain Volmat, Raphael Gallais-Pou, Maarten Lankhorst,
Maxime Ripard, Thomas Zimmermann, David Airlie, Simona Vetter,
Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Raphael Gallais-Pou
Cc: Hui Pu, Thomas Petazzoni, dri-devel, linux-kernel, Luca Ceresoli
The correct sequence for bridge initialization is:
1. devm_drm_bridge_alloc()
2. drm_bridge_add()
3. drm_bridge_attach()
For bridges missing either 1 or 2 there are warnings in place already,
presenting an explanatory error message.
Bridges missing both 1 and 2 would still face a poorly understandable
message, as reported in a recent regression report [0]:
WARNING: [...] at [...]/lib/refcount.c:25 drm_bridge_attach+0x2c/0x1dc
...
Call trace:
...
drm_bridge_attach
...
Add a new warning to ensure an understandable message is logged in such
cases. Use the same message and warning message already in place in
drm_bridge_add().
[0] https://lore.kernel.org/all/hlf4wdopapxnh4rekl5s3kvoi6egaga3lrjfbx6r223ar3txri@3ik53xw5idyh/
Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
---
This patch was added in v2 after having received regression report [0].
---
drivers/gpu/drm/drm_bridge.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c
index 6dba601a056bb3cff8b8dd5b1ec46299235b2d85..8f355df883d8ac8de9d361ec302f4ccbf3bca0d6 100644
--- a/drivers/gpu/drm/drm_bridge.c
+++ b/drivers/gpu/drm/drm_bridge.c
@@ -441,6 +441,9 @@ int drm_bridge_attach(struct drm_encoder *encoder, struct drm_bridge *bridge,
if (!encoder || !bridge)
return -EINVAL;
+ if (!bridge->container)
+ DRM_WARN("DRM bridge corrupted or not allocated by devm_drm_bridge_alloc()\n");
+
if (list_empty(&bridge->list))
DRM_WARN("Missing drm_bridge_add() before attach\n");
--
2.51.0
^ permalink raw reply related [flat|nested] 8+ messages in thread