linux-mediatek.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 00/26] drm/bridge: add drm_of_find_bridge(), deprecate of_drm_find_bridge()
@ 2025-11-19 13:05 Luca Ceresoli
  2025-11-19 13:05 ` [PATCH 01/26] drm/bridge: add drm_of_find_bridge() Luca Ceresoli
                   ` (25 more replies)
  0 siblings, 26 replies; 43+ messages in thread
From: Luca Ceresoli @ 2025-11-19 13:05 UTC (permalink / raw)
  To: Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
	Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Maxime Ripard,
	Thomas Zimmermann, David Airlie, Simona Vetter, Jonathan Corbet,
	Alexey Brodkin, Phong LE, Liu Ying, Shawn Guo, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, Adrien Grassein,
	Laurent Pinchart, Tomi Valkeinen, Kieran Bingham,
	Geert Uytterhoeven, Magnus Damm, Kevin Hilman, Jerome Brunet,
	Martin Blumenstingl, Chun-Kuang Hu, Philipp Zabel,
	Matthias Brugger, AngeloGioacchino Del Regno, Anitha Chrisanthus,
	Edmund Dea, Inki Dae, Seung-Woo Kim, Kyungmin Park,
	Krzysztof Kozlowski, Alim Akhtar
  Cc: Hui Pu, Thomas Petazzoni, dri-devel, linux-kernel, linux-doc, imx,
	linux-arm-kernel, linux-renesas-soc, linux-amlogic,
	linux-mediatek, linux-samsung-soc, Luca Ceresoli

This series deprecated of_drm_find_bridge(), adds a replacement which
handles bridge refcounting, and converts most of the direct users.

This is part of the work to support hotplug of DRM bridges. The grand plan
was discussed in [0].

Here's the work breakdown (➜ marks the current series):

 1. ➜ add refcounting to DRM bridges struct drm_bridge,
      based on devm_drm_bridge_alloc()
    A. ✔ add new alloc API and refcounting (v6.16)
    B. ✔ convert all bridge drivers to new API (v6.17)
    C. ✔ kunit tests (v6.17)
    D. ✔ add get/put to drm_bridge_add/remove() + attach/detach()
         and warn on old allocation pattern (v6.17)
    E. ➜ add get/put on drm_bridge accessors
       1. ✔ drm_bridge_chain_get_first_bridge(), add cleanup action (v6.18)
       2. ✔ drm_bridge_get_prev_bridge() (v6.18)
       3. ✔ drm_bridge_get_next_bridge() (v6.19)
       4. ✔ drm_for_each_bridge_in_chain() (v6.19)
       5. ✔ drm_bridge_connector_init (v6.19)
       6. … protect encoder bridge chain with a mutex
       7. ➜ of_drm_find_bridge()
          a. ➜ add drm_of_fund_bridge(), convert most direct users
	  b. convert other direct users
	  c. convert bridge-only drm_of_find_panel_or_bridge() users
       8. drm_of_find_panel_or_bridge, *_of_get_bridge
       9. ✔ enforce drm_bridge_add before drm_bridge_attach (v6.19)
    F. ✔ debugfs improvements
       1. ✔ add top-level 'bridges' file (v6.16)
       2. ✔ show refcount and list lingering bridges (v6.19)
 2. … handle gracefully atomic updates during bridge removal
    A. … Add drm_dev_enter/exit() to protect device resources
    B. … protect private_obj removal from list
 3. … DSI host-device driver interaction
 4. ✔ removing the need for the "always-disconnected" connector
 5. finish the hotplug bridge work, moving code to the core and potentially
    removing the hotplug-bridge itself (this needs to be clarified as
    points 1-3 are developed)

[0] https://lore.kernel.org/lkml/20250206-hotplug-drm-bridge-v6-0-9d6f2c9c3058@bootlin.com/#t

Almost all the functions returning a struct drm_bridge pointer have been
modified to drm_bridge_get() the returned bridge, and their users updated
to drm_bridge_put() it.

of_drm_find_bridge() could be modified easily in the same way, but it has a
lot of (direct + indirect) callers, and most notably
drm_of_find_panel_or_bridge() which is very hard to adapt without reowrking
the panel_bridge lifetime.

Moreover of_drm_find_bridge() shold be called drm_of_find_bridge() by the
DRM subsystem conventions.

This has been discussed in [1] and Maxime proposed an incremental approach:

> One way to solve it would be that, for example, of_drm_find_bridge is
> oddly named according to our convention and it would make more sense to
> be called drm_of_find_bridge().
>
> So maybe we can just create drm_of_find_bridge() that takes a reference,
> make of_drm_find_bridge() deprecated in favour of drm_of_find_bridge(),
> add a TODO, and call it a day. People will gradually switch to the new
> API over time.

That proposal is implemented by this series. Most of the direct callers are
also converted: they are all trivial conversions except for one, which is
handled by the last 3 patches.

[1] https://lore.kernel.org/dri-devel/20250319-stylish-lime-mongoose-0a18ad@houat/

Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
---
Luca Ceresoli (26):
      drm/bridge: add drm_of_find_bridge()
      drm/bridge: deprecate of_drm_find_bridge()
      drm/todo: add entry about converting to drm_of_find_bridge()
      drm/bridge: make of_drm_find_bridge() a wrapper of drm_of_find_bridge()
      drm/arcpgu: convert to drm_of_find_bridge()
      drm/bridge: add devm_drm_of_find_bridge
      drm/bridge: ite-it66121: use devm_drm_of_find_bridge() to put the next bridge
      drm/bridge: imx8qxp-pixel-combiner: use devm_drm_of_find_bridge() to put the next bridge
      drm/bridge: simple-bridge: use devm_drm_of_find_bridge() to put the next bridge
      drm/bridge: tpd12s015: use devm_drm_of_find_bridge() to put the next bridge
      drm/bridge: thc63lvd1024: use devm_drm_of_find_bridge() to put the next bridge
      drm/bridge: imx8qxp-pxl2dpi: use devm_drm_of_find_bridge() to put the next and companion bridges
      drm/bridge: lt8912b: use devm_drm_of_find_bridge() to put the hdmi bridge
      drm/bridge: tfp410: use devm_drm_of_find_bridge() to put the next bridge
      drm/bridge: imx8qxp-ldb: use devm_drm_of_find_bridge() to put the companion bridge
      drm/rcar-du: lvds: use devm_drm_of_find_bridge() to put the next bridge
      drm/meson: encoder_*: use devm_drm_of_find_bridge() to put the next bridge
      drm/bridge: sii902x: use devm_drm_of_find_bridge() to put the next bridge
      drm/mediatek: use devm_drm_of_find_bridge() to put the next bridge
      drm/kmb: dsi: use devm_drm_of_find_bridge() to put the next bridge
      drm/imx/ipuv3: use devm_drm_of_find_bridge() to put the next bridge
      drm/exynos: hdmi: use devm_drm_of_find_bridge() to put the next bridge
      drm/bridge: dw-hdmi: use devm_drm_of_find_bridge() to put the next bridge
      drm/bridge: imx8qxp-pixel-link: simplify logic to find next bridge
      drm/bridge: imx8qxp-pixel-link: simplify freeing of the remote device_node
      drm/bridge: imx8qxp-pixel-link: convert to drm_of_find_bridge()

 Documentation/gpu/todo.rst                         | 16 ++++++
 drivers/gpu/drm/bridge/imx/imx8qxp-ldb.c           |  2 +-
 .../gpu/drm/bridge/imx/imx8qxp-pixel-combiner.c    |  2 +-
 drivers/gpu/drm/bridge/imx/imx8qxp-pixel-link.c    | 37 ++++++------
 drivers/gpu/drm/bridge/imx/imx8qxp-pxl2dpi.c       |  4 +-
 drivers/gpu/drm/bridge/ite-it66121.c               |  2 +-
 drivers/gpu/drm/bridge/lontium-lt8912b.c           |  2 +-
 drivers/gpu/drm/bridge/sii902x.c                   |  2 +-
 drivers/gpu/drm/bridge/simple-bridge.c             |  2 +-
 drivers/gpu/drm/bridge/synopsys/dw-hdmi.c          |  2 +-
 drivers/gpu/drm/bridge/thc63lvd1024.c              |  2 +-
 drivers/gpu/drm/bridge/ti-tfp410.c                 |  2 +-
 drivers/gpu/drm/bridge/ti-tpd12s015.c              |  2 +-
 drivers/gpu/drm/drm_bridge.c                       | 66 ++++++++++++++++++++--
 drivers/gpu/drm/exynos/exynos_hdmi.c               |  2 +-
 drivers/gpu/drm/imx/ipuv3/dw_hdmi-imx.c            |  2 +-
 drivers/gpu/drm/kmb/kmb_dsi.c                      |  2 +-
 drivers/gpu/drm/mediatek/mtk_hdmi.c                |  2 +-
 drivers/gpu/drm/meson/meson_encoder_cvbs.c         |  2 +-
 drivers/gpu/drm/meson/meson_encoder_dsi.c          |  2 +-
 drivers/gpu/drm/meson/meson_encoder_hdmi.c         |  2 +-
 drivers/gpu/drm/renesas/rcar-du/rcar_lvds.c        |  2 +-
 drivers/gpu/drm/tiny/arcpgu.c                      |  4 +-
 include/drm/drm_bridge.h                           | 10 ++++
 24 files changed, 125 insertions(+), 48 deletions(-)
---
base-commit: 92c49b3f4df8f9acfa95551ef38fc00c675319fd
change-id: 20251117-drm-bridge-alloc-getput-drm_of_find_bridge-74903367448d

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



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

end of thread, other threads:[~2025-11-24 16:44 UTC | newest]

Thread overview: 43+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-11-19 13:05 [PATCH 00/26] drm/bridge: add drm_of_find_bridge(), deprecate of_drm_find_bridge() Luca Ceresoli
2025-11-19 13:05 ` [PATCH 01/26] drm/bridge: add drm_of_find_bridge() Luca Ceresoli
2025-11-19 14:22   ` Louis Chauvet
2025-11-19 14:29     ` Luca Ceresoli
2025-11-24 10:15   ` Maxime Ripard
2025-11-24 16:03     ` Luca Ceresoli
2025-11-19 13:05 ` [PATCH 02/26] drm/bridge: deprecate of_drm_find_bridge() Luca Ceresoli
2025-11-19 14:28   ` Louis Chauvet
2025-11-19 15:13     ` Luca Ceresoli
2025-11-24 10:18     ` Maxime Ripard
2025-11-24 16:23       ` Luca Ceresoli
2025-11-19 13:05 ` [PATCH 03/26] drm/todo: add entry about converting to drm_of_find_bridge() Luca Ceresoli
2025-11-24 10:21   ` Maxime Ripard
2025-11-19 13:05 ` [PATCH 04/26] drm/bridge: make of_drm_find_bridge() a wrapper of drm_of_find_bridge() Luca Ceresoli
2025-11-24 10:22   ` Maxime Ripard
2025-11-24 16:44     ` Luca Ceresoli
2025-11-19 13:05 ` [PATCH 05/26] drm/arcpgu: convert to drm_of_find_bridge() Luca Ceresoli
2025-11-19 13:05 ` [PATCH 06/26] drm/bridge: add devm_drm_of_find_bridge Luca Ceresoli
2025-11-19 14:33   ` Louis Chauvet
2025-11-19 15:05     ` Luca Ceresoli
2025-11-24 10:39   ` Maxime Ripard
2025-11-24 16:25     ` Luca Ceresoli
2025-11-19 13:05 ` [PATCH 07/26] drm/bridge: ite-it66121: use devm_drm_of_find_bridge() to put the next bridge Luca Ceresoli
2025-11-19 14:36   ` Louis Chauvet
2025-11-19 13:05 ` [PATCH 08/26] drm/bridge: imx8qxp-pixel-combiner: " Luca Ceresoli
2025-11-19 13:05 ` [PATCH 09/26] drm/bridge: simple-bridge: " Luca Ceresoli
2025-11-19 13:05 ` [PATCH 10/26] drm/bridge: tpd12s015: " Luca Ceresoli
2025-11-19 13:05 ` [PATCH 11/26] drm/bridge: thc63lvd1024: " Luca Ceresoli
2025-11-19 13:05 ` [PATCH 12/26] drm/bridge: imx8qxp-pxl2dpi: use devm_drm_of_find_bridge() to put the next and companion bridges Luca Ceresoli
2025-11-19 13:05 ` [PATCH 13/26] drm/bridge: lt8912b: use devm_drm_of_find_bridge() to put the hdmi bridge Luca Ceresoli
2025-11-19 13:05 ` [PATCH 14/26] drm/bridge: tfp410: use devm_drm_of_find_bridge() to put the next bridge Luca Ceresoli
2025-11-19 13:05 ` [PATCH 15/26] drm/bridge: imx8qxp-ldb: use devm_drm_of_find_bridge() to put the companion bridge Luca Ceresoli
2025-11-19 13:05 ` [PATCH 16/26] drm/rcar-du: lvds: use devm_drm_of_find_bridge() to put the next bridge Luca Ceresoli
2025-11-19 13:05 ` [PATCH 17/26] drm/meson: encoder_*: " Luca Ceresoli
2025-11-19 13:05 ` [PATCH 18/26] drm/bridge: sii902x: " Luca Ceresoli
2025-11-19 13:05 ` [PATCH 19/26] drm/mediatek: " Luca Ceresoli
2025-11-19 13:05 ` [PATCH 20/26] drm/kmb: dsi: " Luca Ceresoli
2025-11-19 13:05 ` [PATCH 21/26] drm/imx/ipuv3: " Luca Ceresoli
2025-11-19 13:05 ` [PATCH 22/26] drm/exynos: hdmi: " Luca Ceresoli
2025-11-19 13:05 ` [PATCH 23/26] drm/bridge: dw-hdmi: " Luca Ceresoli
2025-11-19 13:05 ` [PATCH 24/26] drm/bridge: imx8qxp-pixel-link: simplify logic to find " Luca Ceresoli
2025-11-19 13:05 ` [PATCH 25/26] drm/bridge: imx8qxp-pixel-link: simplify freeing of the remote device_node Luca Ceresoli
2025-11-19 13:05 ` [PATCH 26/26] drm/bridge: imx8qxp-pixel-link: convert to drm_of_find_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;
as well as URLs for NNTP newsgroup(s).