mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH v2 0/7] drm: remove deprecated *_of_get_bridge() from non-OF drivers (fixes build regression)
@ 2026-09-29 13:39 Luca Ceresoli
  2026-09-29 13:39 ` [PATCH v2 1/7] drm/imx/lcdc: stop using deprecated devm_drm_of_get_bridge() Luca Ceresoli
                   ` (6 more replies)
  0 siblings, 7 replies; 10+ messages in thread
From: Luca Ceresoli @ 2026-09-29 13:39 UTC (permalink / raw)
  To: Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
	David Airlie, Simona Vetter, Frank Li, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, Icenowy Zheng,
	Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
	Jonas Karlman, Jernej Skrabec, Dave Stevenson, Maíra Canal,
	Raspberry Pi Kernel Maintenance, Geert Uytterhoeven
  Cc: Arnd Bergmann, Doug Anderson, Hui Pu, Ian Ray, Thomas Petazzoni,
	dri-devel, imx, linux-arm-kernel, linux-kernel,
	linux-renesas-soc, Luca Ceresoli, kernel test robot

After commit Fixes: aa8a8c7e4641 ("drm/bridge: panel: move all code to
drm_panel.c") some drivers fail building:

  error: implicit declaration of function 'devm_drm_of_get_bridge'

This is because devm_drm_of_get_bridge() (and drmm_of_get_bridge()) have
been moved to drm-panel.h.

The affected drivers are those which:

 * can be built without CONFIG_OF, and
 * don't include drm_panel.h

The affected drivers are 3, fix them (patches 1-3) by replacing the
deprecated *_of_get_bridge() calls with of_drm_get_bridge_by_endpoint().

While there, do the same for all drivers which be built without CONFIG_OF,
even if they don't fail (patches 4-7).

Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
---
Changes in v2:
- Fix bugs in patches 2,3,4
- Fix removed function name in patches 5,6
- Mention lkp reports in patches 2,3
- Add review tags on patches not modified since v1
- Link to v1: https://patch.msgid.link/20260929-drm-fix-of_get_bridge-build-regression-v1-0-ccb7e602daad@bootlin.com

---
Luca Ceresoli (7):
      drm/imx/lcdc: stop using deprecated devm_drm_of_get_bridge()
      drm: verisilicon: stop using deprecated devm_drm_of_get_bridge()
      drm/bridge: dw-mipi-dsi: stop using deprecated devm_drm_of_get_bridge()
      drm/bridge: dw-mipi-dsi2: stop using deprecated devm_drm_of_get_bridge()
      drm/vc4: dpi: stop using deprecated drmm_of_get_bridge()
      drm/vc4: dsi: stop using deprecated drmm_of_get_bridge()
      drm: renesas: shmobile: stop using deprecated devm_drm_of_get_bridge()

 drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c     | 11 +++++------
 drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi2.c    | 11 +++++------
 drivers/gpu/drm/imx/lcdc/imx-lcdc.c               |  4 ++--
 drivers/gpu/drm/renesas/shmobile/shmob_drm_crtc.c |  5 ++---
 drivers/gpu/drm/vc4/vc4_dpi.c                     |  9 ++-------
 drivers/gpu/drm/vc4/vc4_dsi.c                     | 10 ++++------
 drivers/gpu/drm/verisilicon/vs_bridge.c           | 11 ++++++-----
 drivers/gpu/drm/verisilicon/vs_bridge.h           |  1 -
 8 files changed, 26 insertions(+), 36 deletions(-)
---
base-commit: 91ceac83e599c9d48da4c4d2d91410c588a215f7
change-id: 20260929-drm-fix-of_get_bridge-build-regression-98f22f8a1dcc

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


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

* [PATCH v2 1/7] drm/imx/lcdc: stop using deprecated devm_drm_of_get_bridge()
  2026-09-29 13:39 [PATCH v2 0/7] drm: remove deprecated *_of_get_bridge() from non-OF drivers (fixes build regression) Luca Ceresoli
@ 2026-09-29 13:39 ` Luca Ceresoli
  2026-09-29 13:39 ` [PATCH v2 2/7] drm: verisilicon: " Luca Ceresoli
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 10+ messages in thread
From: Luca Ceresoli @ 2026-09-29 13:39 UTC (permalink / raw)
  To: Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
	David Airlie, Simona Vetter, Frank Li, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, Icenowy Zheng,
	Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
	Jonas Karlman, Jernej Skrabec, Dave Stevenson, Maíra Canal,
	Raspberry Pi Kernel Maintenance, Geert Uytterhoeven
  Cc: Arnd Bergmann, Doug Anderson, Hui Pu, Ian Ray, Thomas Petazzoni,
	dri-devel, imx, linux-arm-kernel, linux-kernel,
	linux-renesas-soc, Luca Ceresoli

devm_drm_of_get_bridge() is deprecated, switch to
of_drm_get_bridge_by_endpoint(). As of_drm_get_bridge_by_endpoint() returns
a refcounted bridge, ensure it is put.

Fixes build failure when CONFIG_OF is disabled.

Fixes: aa8a8c7e4641 ("drm/bridge: panel: move all code to drm_panel.c")
Reported-by: Arnd Bergmann <arnd@kernel.org>
Link: https://lore.kernel.org/r/20260928161605.2271412-1-arnd@kernel.org
Acked-by: Maxime Ripard <mripard@kernel.org>
Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
---
 drivers/gpu/drm/imx/lcdc/imx-lcdc.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/imx/lcdc/imx-lcdc.c b/drivers/gpu/drm/imx/lcdc/imx-lcdc.c
index c67fe80b8115..805a659e3f85 100644
--- a/drivers/gpu/drm/imx/lcdc/imx-lcdc.c
+++ b/drivers/gpu/drm/imx/lcdc/imx-lcdc.c
@@ -385,7 +385,6 @@ static int imx_lcdc_probe(struct platform_device *pdev)
 {
 	struct imx_lcdc *lcdc;
 	struct drm_device *drm;
-	struct drm_bridge *bridge;
 	int irq;
 	int ret;
 	struct device *dev = &pdev->dev;
@@ -401,7 +400,8 @@ static int imx_lcdc_probe(struct platform_device *pdev)
 	if (IS_ERR(lcdc->base))
 		return dev_err_probe(dev, PTR_ERR(lcdc->base), "Cannot get IO memory\n");
 
-	bridge = devm_drm_of_get_bridge(dev, dev->of_node, 0, 0);
+	struct drm_bridge *bridge __free(drm_bridge_put) =
+		of_drm_get_bridge_by_endpoint(dev->of_node, 0, 0);
 	if (IS_ERR(bridge))
 		return dev_err_probe(dev, PTR_ERR(bridge), "Failed to find bridge\n");
 

-- 
2.55.0


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

* [PATCH v2 2/7] drm: verisilicon: stop using deprecated devm_drm_of_get_bridge()
  2026-09-29 13:39 [PATCH v2 0/7] drm: remove deprecated *_of_get_bridge() from non-OF drivers (fixes build regression) Luca Ceresoli
  2026-09-29 13:39 ` [PATCH v2 1/7] drm/imx/lcdc: stop using deprecated devm_drm_of_get_bridge() Luca Ceresoli
@ 2026-09-29 13:39 ` Luca Ceresoli
  2026-09-29 14:42   ` Icenowy Zheng
  2026-09-29 13:39 ` [PATCH v2 3/7] drm/bridge: dw-mipi-dsi: " Luca Ceresoli
                   ` (4 subsequent siblings)
  6 siblings, 1 reply; 10+ messages in thread
From: Luca Ceresoli @ 2026-09-29 13:39 UTC (permalink / raw)
  To: Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
	David Airlie, Simona Vetter, Frank Li, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, Icenowy Zheng,
	Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
	Jonas Karlman, Jernej Skrabec, Dave Stevenson, Maíra Canal,
	Raspberry Pi Kernel Maintenance, Geert Uytterhoeven
  Cc: Arnd Bergmann, Doug Anderson, Hui Pu, Ian Ray, Thomas Petazzoni,
	dri-devel, imx, linux-arm-kernel, linux-kernel,
	linux-renesas-soc, Luca Ceresoli, kernel test robot

devm_drm_of_get_bridge() is deprecated, switch to
of_drm_get_bridge_by_endpoint(). As of_drm_get_bridge_by_endpoint() returns
a refcounted bridge, ensure it is put by using bridge.next_bridge.

Fixes build failure when CONFIG_OF is disabled.

Fixes: aa8a8c7e4641 ("drm/bridge: panel: move all code to drm_panel.c")
Reported-by: Arnd Bergmann <arnd@kernel.org>
Closes: https://lore.kernel.org/r/20260928161605.2271412-1-arnd@kernel.org
Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202609291109.OIsGTysr-lkp@intel.com/
Closes: https://lore.kernel.org/oe-kbuild-all/202609290408.BOs7sk55-lkp@intel.com/
Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>

---

Changes in v2:
- fix bridge reference leak on attach error path
- mention lkp report
---
 drivers/gpu/drm/verisilicon/vs_bridge.c | 11 ++++++-----
 drivers/gpu/drm/verisilicon/vs_bridge.h |  1 -
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/verisilicon/vs_bridge.c b/drivers/gpu/drm/verisilicon/vs_bridge.c
index dc7c85b07fe3..3a5091c0ac2c 100644
--- a/drivers/gpu/drm/verisilicon/vs_bridge.c
+++ b/drivers/gpu/drm/verisilicon/vs_bridge.c
@@ -29,7 +29,7 @@ static int vs_bridge_attach(struct drm_bridge *bridge,
 {
 	struct vs_bridge *vbridge = drm_bridge_to_vs_bridge(bridge);
 
-	return drm_bridge_attach(encoder, vbridge->next_bridge,
+	return drm_bridge_attach(encoder, vbridge->base.next_bridge,
 				 bridge, flags);
 }
 
@@ -303,8 +303,7 @@ struct vs_bridge *vs_bridge_init(struct drm_device *drm_dev,
 		return NULL;
 	}
 
-	next = devm_drm_of_get_bridge(drm_dev->dev, drm_dev->dev->of_node,
-				      output, intf);
+	next = of_drm_get_bridge_by_endpoint(drm_dev->dev->of_node, output, intf);
 	if (IS_ERR(next)) {
 		ret = PTR_ERR(next);
 		if (ret != -EPROBE_DEFER)
@@ -321,12 +320,14 @@ struct vs_bridge *vs_bridge_init(struct drm_device *drm_dev,
 
 	bridge = devm_drm_bridge_alloc(drm_dev->dev, struct vs_bridge, base,
 				       bridge_funcs);
-	if (IS_ERR(bridge))
+	if (IS_ERR(bridge)) {
+		drm_bridge_put(next);
 		return ERR_PTR(PTR_ERR(bridge));
+	}
 
 	bridge->crtc = crtc;
 	bridge->intf = intf;
-	bridge->next_bridge = next;
+	bridge->base.next_bridge = next;
 
 	if (intf == VSDC_OUTPUT_INTERFACE_DPI)
 		enctype = DRM_MODE_ENCODER_DPI;
diff --git a/drivers/gpu/drm/verisilicon/vs_bridge.h b/drivers/gpu/drm/verisilicon/vs_bridge.h
index 70fee1749699..2b0ed94e4520 100644
--- a/drivers/gpu/drm/verisilicon/vs_bridge.h
+++ b/drivers/gpu/drm/verisilicon/vs_bridge.h
@@ -25,7 +25,6 @@ struct vs_bridge {
 	struct drm_connector *conn;
 
 	struct vs_crtc *crtc;
-	struct drm_bridge *next_bridge;
 	enum vs_bridge_output_interface intf;
 };
 

-- 
2.55.0


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

* [PATCH v2 3/7] drm/bridge: dw-mipi-dsi: stop using deprecated devm_drm_of_get_bridge()
  2026-09-29 13:39 [PATCH v2 0/7] drm: remove deprecated *_of_get_bridge() from non-OF drivers (fixes build regression) Luca Ceresoli
  2026-09-29 13:39 ` [PATCH v2 1/7] drm/imx/lcdc: stop using deprecated devm_drm_of_get_bridge() Luca Ceresoli
  2026-09-29 13:39 ` [PATCH v2 2/7] drm: verisilicon: " Luca Ceresoli
@ 2026-09-29 13:39 ` Luca Ceresoli
  2026-09-29 13:39 ` [PATCH v2 4/7] drm/bridge: dw-mipi-dsi2: " Luca Ceresoli
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 10+ messages in thread
From: Luca Ceresoli @ 2026-09-29 13:39 UTC (permalink / raw)
  To: Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
	David Airlie, Simona Vetter, Frank Li, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, Icenowy Zheng,
	Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
	Jonas Karlman, Jernej Skrabec, Dave Stevenson, Maíra Canal,
	Raspberry Pi Kernel Maintenance, Geert Uytterhoeven
  Cc: Arnd Bergmann, Doug Anderson, Hui Pu, Ian Ray, Thomas Petazzoni,
	dri-devel, imx, linux-arm-kernel, linux-kernel,
	linux-renesas-soc, Luca Ceresoli, kernel test robot

devm_drm_of_get_bridge() is deprecated, switch to
of_drm_get_bridge_by_endpoint(). As of_drm_get_bridge_by_endpoint() returns
a refcounted bridge, ensure it is put by using bridge.next_bridge.

Fixes build failure when CONFIG_OF is disabled.

Fixes: aa8a8c7e4641 ("drm/bridge: panel: move all code to drm_panel.c")
Reported-by: Arnd Bergmann <arnd@kernel.org>
Closes: https://lore.kernel.org/r/20260928161605.2271412-1-arnd@kernel.org
Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202609291109.9RGna4XZ-lkp@intel.com/
Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>

---

Changes in v2:
- fix bridge reference leak on attach error and detach paths
- mention lkp report
---
 drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
index 5dd475fcaacf..22d1b8cbe1d5 100644
--- a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
+++ b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
@@ -244,7 +244,6 @@ struct debugfs_entries {
 struct dw_mipi_dsi {
 	struct drm_bridge bridge;
 	struct mipi_dsi_host dsi_host;
-	struct drm_bridge *panel_bridge;
 	struct device *dev;
 	void __iomem *base;
 
@@ -333,12 +332,12 @@ static int dw_mipi_dsi_host_attach(struct mipi_dsi_host *host,
 	dsi->format = device->format;
 	dsi->mode_flags = device->mode_flags;
 
-	bridge = devm_drm_of_get_bridge(dsi->dev, dsi->dev->of_node, 1, 0);
+	bridge = of_drm_get_bridge_by_endpoint(dsi->dev->of_node, 1, 0);
 	if (IS_ERR(bridge))
 		return PTR_ERR(bridge);
 
 	bridge->pre_enable_prev_first = true;
-	dsi->panel_bridge = bridge;
+	dsi->bridge.next_bridge = bridge;
 
 	drm_bridge_add(&dsi->bridge);
 
@@ -352,6 +351,7 @@ static int dw_mipi_dsi_host_attach(struct mipi_dsi_host *host,
 
 err_remove_bridge:
 	drm_bridge_remove(&dsi->bridge);
+	drm_bridge_clear_and_put(&dsi->bridge.next_bridge);
 	return ret;
 }
 
@@ -368,9 +368,8 @@ static int dw_mipi_dsi_host_detach(struct mipi_dsi_host *host,
 			return ret;
 	}
 
-	drm_of_panel_bridge_remove(host->dev->of_node, 1, 0);
-
 	drm_bridge_remove(&dsi->bridge);
+	drm_bridge_clear_and_put(&dsi->bridge.next_bridge);
 
 	return 0;
 }
@@ -1086,7 +1085,7 @@ static int dw_mipi_dsi_bridge_attach(struct drm_bridge *bridge,
 	encoder->encoder_type = DRM_MODE_ENCODER_DSI;
 
 	/* Attach the panel-bridge to the dsi bridge */
-	return drm_bridge_attach(encoder, dsi->panel_bridge, bridge,
+	return drm_bridge_attach(encoder, dsi->bridge.next_bridge, bridge,
 				 flags);
 }
 

-- 
2.55.0


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

* [PATCH v2 4/7] drm/bridge: dw-mipi-dsi2: stop using deprecated devm_drm_of_get_bridge()
  2026-09-29 13:39 [PATCH v2 0/7] drm: remove deprecated *_of_get_bridge() from non-OF drivers (fixes build regression) Luca Ceresoli
                   ` (2 preceding siblings ...)
  2026-09-29 13:39 ` [PATCH v2 3/7] drm/bridge: dw-mipi-dsi: " Luca Ceresoli
@ 2026-09-29 13:39 ` Luca Ceresoli
  2026-09-29 13:39 ` [PATCH v2 5/7] drm/vc4: dpi: stop using deprecated drmm_of_get_bridge() Luca Ceresoli
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 10+ messages in thread
From: Luca Ceresoli @ 2026-09-29 13:39 UTC (permalink / raw)
  To: Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
	David Airlie, Simona Vetter, Frank Li, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, Icenowy Zheng,
	Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
	Jonas Karlman, Jernej Skrabec, Dave Stevenson, Maíra Canal,
	Raspberry Pi Kernel Maintenance, Geert Uytterhoeven
  Cc: Arnd Bergmann, Doug Anderson, Hui Pu, Ian Ray, Thomas Petazzoni,
	dri-devel, imx, linux-arm-kernel, linux-kernel,
	linux-renesas-soc, Luca Ceresoli

devm_drm_of_get_bridge() is deprecated, switch to
of_drm_get_bridge_by_endpoint(). As of_drm_get_bridge_by_endpoint() returns
a refcounted bridge, ensure it is put by using bridge.next_bridge.

Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>

---

Changes in v2:
- fix bridge reference leak on attach error and detach paths
---
 drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi2.c | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi2.c b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi2.c
index 7fd2f1e60654..eb7d5713bd28 100644
--- a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi2.c
+++ b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi2.c
@@ -192,7 +192,6 @@ struct cmd_header {
 struct dw_mipi_dsi2 {
 	struct drm_bridge bridge;
 	struct mipi_dsi_host dsi_host;
-	struct drm_bridge *panel_bridge;
 	struct device *dev;
 	struct regmap *regmap;
 	struct clk *pclk;
@@ -528,12 +527,12 @@ static int dw_mipi_dsi2_host_attach(struct mipi_dsi_host *host,
 	dsi2->format = device->format;
 	dsi2->mode_flags = device->mode_flags;
 
-	bridge = devm_drm_of_get_bridge(dsi2->dev, dsi2->dev->of_node, 1, 0);
+	bridge = of_drm_get_bridge_by_endpoint(dsi2->dev->of_node, 1, 0);
 	if (IS_ERR(bridge))
 		return PTR_ERR(bridge);
 
 	bridge->pre_enable_prev_first = true;
-	dsi2->panel_bridge = bridge;
+	dsi2->bridge.next_bridge = bridge;
 
 	drm_bridge_add(&dsi2->bridge);
 
@@ -547,6 +546,7 @@ static int dw_mipi_dsi2_host_attach(struct mipi_dsi_host *host,
 
 err_remove_bridge:
 	drm_bridge_remove(&dsi2->bridge);
+	drm_bridge_clear_and_put(&dsi2->bridge.next_bridge);
 	return ret;
 }
 
@@ -564,8 +564,7 @@ static int dw_mipi_dsi2_host_detach(struct mipi_dsi_host *host,
 	}
 
 	drm_bridge_remove(&dsi2->bridge);
-
-	drm_of_panel_bridge_remove(host->dev->of_node, 1, 0);
+	drm_bridge_clear_and_put(&dsi2->bridge.next_bridge);
 
 	return 0;
 }
@@ -884,7 +883,7 @@ static int dw_mipi_dsi2_bridge_attach(struct drm_bridge *bridge,
 	encoder->encoder_type = DRM_MODE_ENCODER_DSI;
 
 	/* Attach the panel-bridge to the dsi bridge */
-	return drm_bridge_attach(encoder, dsi2->panel_bridge, bridge,
+	return drm_bridge_attach(encoder, dsi2->bridge.next_bridge, bridge,
 				 flags);
 }
 

-- 
2.55.0


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

* [PATCH v2 5/7] drm/vc4: dpi: stop using deprecated drmm_of_get_bridge()
  2026-09-29 13:39 [PATCH v2 0/7] drm: remove deprecated *_of_get_bridge() from non-OF drivers (fixes build regression) Luca Ceresoli
                   ` (3 preceding siblings ...)
  2026-09-29 13:39 ` [PATCH v2 4/7] drm/bridge: dw-mipi-dsi2: " Luca Ceresoli
@ 2026-09-29 13:39 ` Luca Ceresoli
  2026-09-29 13:39 ` [PATCH v2 6/7] drm/vc4: dsi: " Luca Ceresoli
  2026-09-29 13:39 ` [PATCH v2 7/7] drm: renesas: shmobile: stop using deprecated devm_drm_of_get_bridge() Luca Ceresoli
  6 siblings, 0 replies; 10+ messages in thread
From: Luca Ceresoli @ 2026-09-29 13:39 UTC (permalink / raw)
  To: Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
	David Airlie, Simona Vetter, Frank Li, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, Icenowy Zheng,
	Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
	Jonas Karlman, Jernej Skrabec, Dave Stevenson, Maíra Canal,
	Raspberry Pi Kernel Maintenance, Geert Uytterhoeven
  Cc: Arnd Bergmann, Doug Anderson, Hui Pu, Ian Ray, Thomas Petazzoni,
	dri-devel, imx, linux-arm-kernel, linux-kernel,
	linux-renesas-soc, Luca Ceresoli

drmm_of_get_bridge() is deprecated, switch to
of_drm_get_bridge_by_endpoint(). As of_drm_get_bridge_by_endpoint() returns
a refcounted bridge, ensure it is put.

drm_panel.h becomes unused, drop the include.

Also remove a comment that is now obvious: now panels are just bridges.

Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
---
 drivers/gpu/drm/vc4/vc4_dpi.c | 9 ++-------
 1 file changed, 2 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/vc4/vc4_dpi.c b/drivers/gpu/drm/vc4/vc4_dpi.c
index 53f36626a50d..5060eb463704 100644
--- a/drivers/gpu/drm/vc4/vc4_dpi.c
+++ b/drivers/gpu/drm/vc4/vc4_dpi.c
@@ -16,7 +16,6 @@
 #include <drm/drm_drv.h>
 #include <drm/drm_edid.h>
 #include <drm/drm_of.h>
-#include <drm/drm_panel.h>
 #include <drm/drm_print.h>
 #include <drm/drm_probe_helper.h>
 #include <drm/drm_simple_kms_helper.h>
@@ -279,16 +278,12 @@ static const struct of_device_id vc4_dpi_dt_match[] = {
 	{}
 };
 
-/* Sets up the next link in the display chain, whether it's a panel or
- * a bridge.
- */
 static int vc4_dpi_init_bridge(struct vc4_dpi *dpi)
 {
-	struct drm_device *drm = dpi->encoder.base.dev;
 	struct device *dev = &dpi->pdev->dev;
-	struct drm_bridge *bridge;
 
-	bridge = drmm_of_get_bridge(drm, dev->of_node, 0, 0);
+	struct drm_bridge *bridge __free(drm_bridge_put) =
+		of_drm_get_bridge_by_endpoint(dev->of_node, 0, 0);
 	if (IS_ERR(bridge)) {
 		/* If nothing was connected in the DT, that's not an
 		 * error.

-- 
2.55.0


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

* [PATCH v2 6/7] drm/vc4: dsi: stop using deprecated drmm_of_get_bridge()
  2026-09-29 13:39 [PATCH v2 0/7] drm: remove deprecated *_of_get_bridge() from non-OF drivers (fixes build regression) Luca Ceresoli
                   ` (4 preceding siblings ...)
  2026-09-29 13:39 ` [PATCH v2 5/7] drm/vc4: dpi: stop using deprecated drmm_of_get_bridge() Luca Ceresoli
@ 2026-09-29 13:39 ` Luca Ceresoli
  2026-09-29 13:39 ` [PATCH v2 7/7] drm: renesas: shmobile: stop using deprecated devm_drm_of_get_bridge() Luca Ceresoli
  6 siblings, 0 replies; 10+ messages in thread
From: Luca Ceresoli @ 2026-09-29 13:39 UTC (permalink / raw)
  To: Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
	David Airlie, Simona Vetter, Frank Li, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, Icenowy Zheng,
	Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
	Jonas Karlman, Jernej Skrabec, Dave Stevenson, Maíra Canal,
	Raspberry Pi Kernel Maintenance, Geert Uytterhoeven
  Cc: Arnd Bergmann, Doug Anderson, Hui Pu, Ian Ray, Thomas Petazzoni,
	dri-devel, imx, linux-arm-kernel, linux-kernel,
	linux-renesas-soc, Luca Ceresoli

drmm_of_get_bridge() is deprecated, switch to
of_drm_get_bridge_by_endpoint(). As of_drm_get_bridge_by_endpoint() returns
a refcounted bridge, ensure it is put by using bridge.next_bridge.

drm_panel.h becomes unused, drop the include.

Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
---
 drivers/gpu/drm/vc4/vc4_dsi.c | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/vc4/vc4_dsi.c b/drivers/gpu/drm/vc4/vc4_dsi.c
index 0148f2befed1..30598738cfcf 100644
--- a/drivers/gpu/drm/vc4/vc4_dsi.c
+++ b/drivers/gpu/drm/vc4/vc4_dsi.c
@@ -35,7 +35,6 @@
 #include <drm/drm_edid.h>
 #include <drm/drm_mipi_dsi.h>
 #include <drm/drm_of.h>
-#include <drm/drm_panel.h>
 #include <drm/drm_print.h>
 #include <drm/drm_probe_helper.h>
 #include <drm/drm_simple_kms_helper.h>
@@ -555,7 +554,6 @@ struct vc4_dsi {
 
 	struct platform_device *pdev;
 
-	struct drm_bridge *out_bridge;
 	struct drm_bridge bridge;
 
 	void __iomem *regs;
@@ -1165,7 +1163,7 @@ static int vc4_dsi_bridge_attach(struct drm_bridge *bridge,
 	struct vc4_dsi *dsi = bridge_to_vc4_dsi(bridge);
 
 	/* Attach the panel or bridge to the dsi bridge */
-	return drm_bridge_attach(encoder, dsi->out_bridge,
+	return drm_bridge_attach(encoder, dsi->bridge.next_bridge,
 				 &dsi->bridge, flags);
 }
 
@@ -1749,9 +1747,9 @@ static int vc4_dsi_bind(struct device *dev, struct device *master, void *data)
 		return ret;
 	}
 
-	dsi->out_bridge = drmm_of_get_bridge(drm, dev->of_node, 0, 0);
-	if (IS_ERR(dsi->out_bridge))
-		return PTR_ERR(dsi->out_bridge);
+	dsi->bridge.next_bridge = of_drm_get_bridge_by_endpoint(dev->of_node, 0, 0);
+	if (IS_ERR(dsi->bridge.next_bridge))
+		return PTR_ERR(dsi->bridge.next_bridge);
 
 	/* The esc clock rate is supposed to always be 100Mhz. */
 	ret = clk_set_rate(dsi->escape_clock, 100 * 1000000);

-- 
2.55.0


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

* [PATCH v2 7/7] drm: renesas: shmobile: stop using deprecated devm_drm_of_get_bridge()
  2026-09-29 13:39 [PATCH v2 0/7] drm: remove deprecated *_of_get_bridge() from non-OF drivers (fixes build regression) Luca Ceresoli
                   ` (5 preceding siblings ...)
  2026-09-29 13:39 ` [PATCH v2 6/7] drm/vc4: dsi: " Luca Ceresoli
@ 2026-09-29 13:39 ` Luca Ceresoli
  6 siblings, 0 replies; 10+ messages in thread
From: Luca Ceresoli @ 2026-09-29 13:39 UTC (permalink / raw)
  To: Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
	David Airlie, Simona Vetter, Frank Li, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, Icenowy Zheng,
	Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
	Jonas Karlman, Jernej Skrabec, Dave Stevenson, Maíra Canal,
	Raspberry Pi Kernel Maintenance, Geert Uytterhoeven
  Cc: Arnd Bergmann, Doug Anderson, Hui Pu, Ian Ray, Thomas Petazzoni,
	dri-devel, imx, linux-arm-kernel, linux-kernel,
	linux-renesas-soc, Luca Ceresoli

devm_drm_of_get_bridge() is deprecated, switch to
of_drm_get_bridge_by_endpoint(). As of_drm_get_bridge_by_endpoint() returns
a refcounted bridge, ensure it is put.

drm_panel.h becomes unused, drop the include.

Acked-by: Maxime Ripard <mripard@kernel.org>
Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
---
 drivers/gpu/drm/renesas/shmobile/shmob_drm_crtc.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/renesas/shmobile/shmob_drm_crtc.c b/drivers/gpu/drm/renesas/shmobile/shmob_drm_crtc.c
index 328a36215e39..51bae2008cc6 100644
--- a/drivers/gpu/drm/renesas/shmobile/shmob_drm_crtc.c
+++ b/drivers/gpu/drm/renesas/shmobile/shmob_drm_crtc.c
@@ -28,7 +28,6 @@
 #include <drm/drm_gem_dma_helper.h>
 #include <drm/drm_modeset_helper.h>
 #include <drm/drm_modeset_helper_vtables.h>
-#include <drm/drm_panel.h>
 #include <drm/drm_probe_helper.h>
 #include <drm/drm_vblank.h>
 
@@ -447,7 +446,6 @@ static const struct drm_encoder_funcs shmob_encoder_funcs = {
 int shmob_drm_encoder_create(struct shmob_drm_device *sdev)
 {
 	struct drm_encoder *encoder = &sdev->encoder;
-	struct drm_bridge *bridge;
 	int ret;
 
 	encoder->possible_crtcs = 1;
@@ -463,7 +461,8 @@ int shmob_drm_encoder_create(struct shmob_drm_device *sdev)
 	}
 
 	/* Create a panel bridge */
-	bridge = devm_drm_of_get_bridge(sdev->dev, sdev->dev->of_node, 0, 0);
+	struct drm_bridge *bridge __free(drm_bridge_put) =
+		of_drm_get_bridge_by_endpoint(sdev->dev->of_node, 0, 0);
 	if (IS_ERR(bridge))
 		return PTR_ERR(bridge);
 

-- 
2.55.0


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

* Re: [PATCH v2 2/7] drm: verisilicon: stop using deprecated devm_drm_of_get_bridge()
  2026-09-29 13:39 ` [PATCH v2 2/7] drm: verisilicon: " Luca Ceresoli
@ 2026-09-29 14:42   ` Icenowy Zheng
  2026-09-29 21:26     ` Luca Ceresoli
  0 siblings, 1 reply; 10+ messages in thread
From: Icenowy Zheng @ 2026-09-29 14:42 UTC (permalink / raw)
  To: Luca Ceresoli, Maarten Lankhorst, Maxime Ripard,
	Thomas Zimmermann, David Airlie, Simona Vetter, Frank Li,
	Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
	Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
	Jonas Karlman, Jernej Skrabec, Dave Stevenson, Maíra Canal,
	Raspberry Pi Kernel Maintenance, Geert Uytterhoeven
  Cc: Arnd Bergmann, Doug Anderson, Hui Pu, Ian Ray, Thomas Petazzoni,
	dri-devel, imx, linux-arm-kernel, linux-kernel,
	linux-renesas-soc, kernel test robot

在 2026-09-29二的 15:39 +0200,Luca Ceresoli写道:
> devm_drm_of_get_bridge() is deprecated, switch to
> of_drm_get_bridge_by_endpoint(). As of_drm_get_bridge_by_endpoint()
> returns
> a refcounted bridge, ensure it is put by using bridge.next_bridge.
> 
> Fixes build failure when CONFIG_OF is disabled.
> 
> Fixes: aa8a8c7e4641 ("drm/bridge: panel: move all code to
> drm_panel.c")
> Reported-by: Arnd Bergmann <arnd@kernel.org>
> Closes:
> https://lore.kernel.org/r/20260928161605.2271412-1-arnd@kernel.org
> Reported-by: kernel test robot <lkp@intel.com>
> Closes:
> https://lore.kernel.org/oe-kbuild-all/202609291109.OIsGTysr-lkp@intel.com/
> Closes:
> https://lore.kernel.org/oe-kbuild-all/202609290408.BOs7sk55-lkp@intel.com/
> Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>

Checked the code in drm_bridge.c, and it looks like the lifetime of
next_bridge should be indirectly managed by devm when
devm_drm_bridge_alloc() successes and the next_bridge field assigned,
so the only explicit put needed here should be in the alloc failure
path.

Patch is:

```
Reviewed-by: Icenowy Zheng <zhengxingda@iscas.ac.cn>
```

> 
> ---
> 
> Changes in v2:
> - fix bridge reference leak on attach error path

It should be `bridge alloc error` instead of `attach error`, but I
don't know how to correct the error in the changelog, and anyway it
won't be part of the final commit.

Thanks,
Icenowy

> - mention lkp report
> ---
>  drivers/gpu/drm/verisilicon/vs_bridge.c | 11 ++++++-----
>  drivers/gpu/drm/verisilicon/vs_bridge.h |  1 -
>  2 files changed, 6 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/gpu/drm/verisilicon/vs_bridge.c
> b/drivers/gpu/drm/verisilicon/vs_bridge.c
> index dc7c85b07fe3..3a5091c0ac2c 100644
> --- a/drivers/gpu/drm/verisilicon/vs_bridge.c
> +++ b/drivers/gpu/drm/verisilicon/vs_bridge.c
> @@ -29,7 +29,7 @@ static int vs_bridge_attach(struct drm_bridge
> *bridge,
>  {
>  	struct vs_bridge *vbridge = drm_bridge_to_vs_bridge(bridge);
>  
> -	return drm_bridge_attach(encoder, vbridge->next_bridge,
> +	return drm_bridge_attach(encoder, vbridge->base.next_bridge,
>  				 bridge, flags);
>  }
>  
> @@ -303,8 +303,7 @@ struct vs_bridge *vs_bridge_init(struct
> drm_device *drm_dev,
>  		return NULL;
>  	}
>  
> -	next = devm_drm_of_get_bridge(drm_dev->dev, drm_dev->dev-
> >of_node,
> -				      output, intf);
> +	next = of_drm_get_bridge_by_endpoint(drm_dev->dev->of_node,
> output, intf);
>  	if (IS_ERR(next)) {
>  		ret = PTR_ERR(next);
>  		if (ret != -EPROBE_DEFER)
> @@ -321,12 +320,14 @@ struct vs_bridge *vs_bridge_init(struct
> drm_device *drm_dev,
>  
>  	bridge = devm_drm_bridge_alloc(drm_dev->dev, struct
> vs_bridge, base,
>  				       bridge_funcs);
> -	if (IS_ERR(bridge))
> +	if (IS_ERR(bridge)) {
> +		drm_bridge_put(next);
>  		return ERR_PTR(PTR_ERR(bridge));
> +	}
>  
>  	bridge->crtc = crtc;
>  	bridge->intf = intf;
> -	bridge->next_bridge = next;
> +	bridge->base.next_bridge = next;
>  
>  	if (intf == VSDC_OUTPUT_INTERFACE_DPI)
>  		enctype = DRM_MODE_ENCODER_DPI;
> diff --git a/drivers/gpu/drm/verisilicon/vs_bridge.h
> b/drivers/gpu/drm/verisilicon/vs_bridge.h
> index 70fee1749699..2b0ed94e4520 100644
> --- a/drivers/gpu/drm/verisilicon/vs_bridge.h
> +++ b/drivers/gpu/drm/verisilicon/vs_bridge.h
> @@ -25,7 +25,6 @@ struct vs_bridge {
>  	struct drm_connector *conn;
>  
>  	struct vs_crtc *crtc;
> -	struct drm_bridge *next_bridge;
>  	enum vs_bridge_output_interface intf;
>  };
>  


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

* Re: [PATCH v2 2/7] drm: verisilicon: stop using deprecated devm_drm_of_get_bridge()
  2026-09-29 14:42   ` Icenowy Zheng
@ 2026-09-29 21:26     ` Luca Ceresoli
  0 siblings, 0 replies; 10+ messages in thread
From: Luca Ceresoli @ 2026-09-29 21:26 UTC (permalink / raw)
  To: Icenowy Zheng, Luca Ceresoli, Maarten Lankhorst, Maxime Ripard,
	Thomas Zimmermann, David Airlie, Simona Vetter, Frank Li,
	Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
	Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
	Jonas Karlman, Jernej Skrabec, Dave Stevenson, Maíra Canal,
	Raspberry Pi Kernel Maintenance, Geert Uytterhoeven
  Cc: Arnd Bergmann, Doug Anderson, Hui Pu, Ian Ray, Thomas Petazzoni,
	dri-devel, imx, linux-arm-kernel, linux-kernel,
	linux-renesas-soc, kernel test robot

Hello,

On Tue Sep 29, 2026 at 4:42 PM CEST, Icenowy Zheng wrote:
> 在 2026-09-29二的 15:39 +0200,Luca Ceresoli写道:
>> devm_drm_of_get_bridge() is deprecated, switch to
>> of_drm_get_bridge_by_endpoint(). As of_drm_get_bridge_by_endpoint()
>> returns
>> a refcounted bridge, ensure it is put by using bridge.next_bridge.
>>
>> Fixes build failure when CONFIG_OF is disabled.
>>
>> Fixes: aa8a8c7e4641 ("drm/bridge: panel: move all code to
>> drm_panel.c")
>> Reported-by: Arnd Bergmann <arnd@kernel.org>
>> Closes:
>> https://lore.kernel.org/r/20260928161605.2271412-1-arnd@kernel.org
>> Reported-by: kernel test robot <lkp@intel.com>
>> Closes:
>> https://lore.kernel.org/oe-kbuild-all/202609291109.OIsGTysr-lkp@intel.com/
>> Closes:
>> https://lore.kernel.org/oe-kbuild-all/202609290408.BOs7sk55-lkp@intel.com/
>> Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
>
> Checked the code in drm_bridge.c, and it looks like the lifetime of
> next_bridge should be indirectly managed by devm when
> devm_drm_bridge_alloc() successes and the next_bridge field assigned,
> so the only explicit put needed here should be in the alloc failure
> path.

Exactly.

I think vs_bridge_init() could be simplified a bit by moving the 'next =
...;' statement (with error management trailer) to after
devm_drm_bridge_alloc. This would avoid the explicit drm_bridge_put() call
added by this patch.

However for this regression fix I preferred to keep the diff minimal. The
cleanup mentioned above can be done later.

> Reviewed-by: Icenowy Zheng <zhengxingda@iscas.ac.cn>

Thanks for reviewing!

>> Changes in v2:
>> - fix bridge reference leak on attach error path
>
> It should be `bridge alloc error` instead of `attach error`, but I
> don't know how to correct the error in the changelog, and anyway it
> won't be part of the final commit.

Ah, right, that's a copy-paste leftover. It's correct that it won't appear
in the commit, so I won't sent a new iteration for this.

Luca

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

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

end of thread, other threads:[~2026-09-29 21:27 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-09-29 13:39 [PATCH v2 0/7] drm: remove deprecated *_of_get_bridge() from non-OF drivers (fixes build regression) Luca Ceresoli
2026-09-29 13:39 ` [PATCH v2 1/7] drm/imx/lcdc: stop using deprecated devm_drm_of_get_bridge() Luca Ceresoli
2026-09-29 13:39 ` [PATCH v2 2/7] drm: verisilicon: " Luca Ceresoli
2026-09-29 14:42   ` Icenowy Zheng
2026-09-29 21:26     ` Luca Ceresoli
2026-09-29 13:39 ` [PATCH v2 3/7] drm/bridge: dw-mipi-dsi: " Luca Ceresoli
2026-09-29 13:39 ` [PATCH v2 4/7] drm/bridge: dw-mipi-dsi2: " Luca Ceresoli
2026-09-29 13:39 ` [PATCH v2 5/7] drm/vc4: dpi: stop using deprecated drmm_of_get_bridge() Luca Ceresoli
2026-09-29 13:39 ` [PATCH v2 6/7] drm/vc4: dsi: " Luca Ceresoli
2026-09-29 13:39 ` [PATCH v2 7/7] drm: renesas: shmobile: stop using deprecated devm_drm_of_get_bridge() 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®