[PATCH v2 00/41] drm/display: bridge-connector: attach encoder to the connector

Icenowy Zheng zhengxingda at iscas.ac.cn
Sat Apr 25 08:22:56 PDT 2026


在 2026-04-23四的 11:16 +0200,Luca Ceresoli写道:
> This series simplifies using the bridge-connector by removing the
> need to
> attach the newly created connector to the encoder.
> 
> == Series description
> 
> Currently all users of the bridge-connector must call
> drm_connector_attach_encoder() immediately after a successful
> drm_bridge_connector_init().
> 
> This is an unnecessary burden for users. Move the call to the end of
> drm_bridge_connector_init() so all callers can be simplified.
> 
>  * Patch 1 adds a drm_connector_attach_encoder() call at the end of
>    drm_bridge_connector_init()
>  * The other patches remove drm_connector_attach_encoder() after all
>    drm_bridge_connector_init() calls, ordered from the simplest ones
>    (only the last one is somewhat non-obvious)
> 
> The Cc list is huge due to the many drivers touched. I sent v1 to a
> reduced
> Cc list to ensure there is an agreement about the overall idea. That
> seems
> to be the case, so now it's time to copy all drivers maintainers.
> 
> It would be nice to apply all of this series at once to avoid
> duplicated
> calls to drm_connector_attach_encoder() in the interim. That would be
> harmless beacuse drm_connector_attach_encoder() is idempotent, but
> unpleasant.
> 
> == Additional rationale (for the curious)
> 
> Besides making the usage of the bridge-connector a bit simpler, this
> series
> is in preparation for DRM bridge hotplug. Here's why, feel free to
> skip if
> you don't care.
> 
> The old bridge hotplug proposals I have sent in the past [1] were
> based on
> a hotplug-bridge driver to sit between the last fixed bridge and the
> first
> hotplugged bridge. Discussion with the community led to the need of
> removing the hotplug-bridge and let common DRM code handle hotplug.
> The
> common place of code that appears the most suitable for hotplug
> handling is
> the bridge-connector, which is by now the recommended way to handle
> connector instantiation after a bridge chain.
> 
> So I'm in the process of extending the bridge-connector to be the
> central
> point to handle bridge hotplug. Turns out the need to call
> drm_connector_attach_encoder() after drm_bridge_connector_init() has
> returned is adding big headaches to such work. So I'm send this long
> but
> simple series to both simplify bridge-connector usage and remove one
> obstacle from the bridge hotplug work. This series is relevant by
> itself
> anyway.
> 
> [1]
> https://lore.kernel.org/lkml/20250206-hotplug-drm-bridge-v6-26-9d6f2c9c3058@bootlin.com/
> 
> == Grand plan
> 
> This is part of the work to support hotplug of DRM bridges. The grand
> plan
> was discussed in [0].

Just see the bridge hotplugging thing, is it possible for DRM drivers
to declare bridges attached to themselves after this?

Loongson 7A1000 PCH can only output DPI signals, so nearly all products
with it are shipping with some kind of external bridges, but currently
drm/loongson does not support them (all display connectors are now seen
as DPI ones, and connectors behind non-transparent bridges won't work).

The bridges are going to be accessed by the DDC I2C busses of 7A1000,
and are not declared with device tree (systems with 7A1000 never ship
with device trees, and Linux currently matches a built-in device tree).
(Bridges being on the DDC I2C also introduces some dependency for them
to depend on the drm/loongson driver.)

Loongson have defined some kind of VBIOS declaring what bridge is
behind, and their non-mainline driver just contains driver codes for
all possible bridges. (Sui Jingfeng previously tried to mainline such
practice, and of course it's rejected because of code duplicity.)

Thanks,
Icenowy

> 
> 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 (v7.2)
>        7. … of_drm_find_bridge
>           a. ✔ add of_drm_get_bridge() (v7.0),
> 	       convert basic direct users (v7.0-v7.1)
> 	  b. ✔ convert direct of_drm_get_bridge() users, part 2
> (v7.0)
> 	  c. ✔ convert direct of_drm_get_bridge() users, part 3
> (v7.0)
> 	  d. ✔ convert direct of_drm_get_bridge() users, part 4
> (v7.1-v7.2)
> 	  e. … 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_bridge_enter/exit() to protect device resources
> (v7.0)
>     B. … protect private_obj removal from list
>     C. ✔ Add drm_bridge_clear_and_put() (v7.1)
>  3. … DSI host-device driver interaction
>  4. ✔ removing the need for the "always-disconnected" connector
>  5. ✔ Migrate i.MX LCDIF driver to bridge-connector (v7.2)
>  6. ➜ DRM bridge hotplug
>     A. ➜ Bridge hotplug management in the DRM core
>        1. ➜ bridge-connector: attach encoder to the connector
>     B.   Device tree description
> 
> [0]
> https://lore.kernel.org/lkml/20250206-hotplug-drm-bridge-v6-0-9d6f2c9c3058@bootlin.com/#t
> 
> Signed-off-by: Luca Ceresoli <luca.ceresoli at bootlin.com>
> ---
> Changes in v2:
> - patch 1: update kdoc
> - patch 41: fix by rewriting it fully
> - update cover letter
> - Link to v1:
> https://patch.msgid.link/20260417-drm-bridge-connector-attach_encoder-v1-0-67b8b8fb872a@bootlin.com
> 
> To: Andrzej Hajda <andrzej.hajda at intel.com>
> To: Neil Armstrong <neil.armstrong at linaro.org>
> To: Robert Foss <rfoss at kernel.org>
> To: Laurent Pinchart <Laurent.pinchart at ideasonboard.com>
> To: Jonas Karlman <jonas at kwiboo.se>
> To: Jernej Skrabec <jernej.skrabec at gmail.com>
> To: Maarten Lankhorst <maarten.lankhorst at linux.intel.com>
> To: Maxime Ripard <mripard at kernel.org>
> To: Thomas Zimmermann <tzimmermann at suse.de>
> To: David Airlie <airlied at gmail.com>
> To: Simona Vetter <simona at ffwll.ch>
> To: Sasha Finkelstein <fnkl.kernel at gmail.com>
> To: Janne Grunau <j at jannau.net>
> To: Liu Ying <victor.liu at nxp.com>
> To: Douglas Anderson <dianders at chromium.org>
> To: Laurentiu Palcu <laurentiu.palcu at oss.nxp.com>
> To: Lucas Stach <l.stach at pengutronix.de>
> To: Frank Li <Frank.Li at nxp.com>
> To: Sascha Hauer <s.hauer at pengutronix.de>
> To: Pengutronix Kernel Team <kernel at pengutronix.de>
> To: Fabio Estevam <festevam at gmail.com>
> To: Philipp Zabel <p.zabel at pengutronix.de>
> To: Paul Cercueil <paul at crapouillou.net>
> To: Anitha Chrisanthus <anitha.chrisanthus at intel.com>
> To: Chun-Kuang Hu <chunkuang.hu at kernel.org>
> To: Matthias Brugger <matthias.bgg at gmail.com>
> To: AngeloGioacchino Del Regno
> <angelogioacchino.delregno at collabora.com>
> To: Kevin Hilman <khilman at baylibre.com>
> To: Jerome Brunet <jbrunet at baylibre.com>
> To: Martin Blumenstingl <martin.blumenstingl at googlemail.com>
> To: Rob Clark <robin.clark at oss.qualcomm.com>
> To: Dmitry Baryshkov <lumag at kernel.org>
> To: Abhinav Kumar <abhinav.kumar at linux.dev>
> To: Jessica Zhang <jesszhan0024 at gmail.com>
> To: Sean Paul <sean at poorly.run>
> To: Marijn Suijten <marijn.suijten at somainline.org>
> To: Tomi Valkeinen <tomi.valkeinen at ideasonboard.com>
> To: Sandy Huang <hjc at rock-chips.com>
> To: Heiko Stübner <heiko at sntech.de>
> To: Andy Yan <andy.yan at rock-chips.com>
> To: Thierry Reding <thierry.reding at gmail.com>
> To: Mikko Perttunen <mperttunen at nvidia.com>
> To: Jonathan Hunter <jonathanh at nvidia.com>
> To: Icenowy Zheng <zhengxingda at iscas.ac.cn>
> To: Jingoo Han <jingoohan1 at gmail.com>
> To: Inki Dae <inki.dae at samsung.com>
> To: Seung-Woo Kim <sw0312.kim at samsung.com>
> To: Kyungmin Park <kyungmin.park at samsung.com>
> To: Krzysztof Kozlowski <krzk at kernel.org>
> To: Alim Akhtar <alim.akhtar at samsung.com>
> To: Laurent Pinchart <laurent.pinchart+renesas at ideasonboard.com>
> To: Tomi Valkeinen <tomi.valkeinen+renesas at ideasonboard.com>
> To: Kieran Bingham <kieran.bingham+renesas at ideasonboard.com>
> To: Geert Uytterhoeven <geert+renesas at glider.be>
> To: Magnus Damm <magnus.damm at gmail.com>
> To: Biju Das <biju.das.jz at bp.renesas.com>
> To: Marek Vasut <marex at denx.de>
> To: Stefan Agner <stefan at agner.ch>
> To: Jyri Sarha <jyri.sarha at iki.fi>
> To: Michal Simek <michal.simek at amd.com>
> Cc: Hui Pu <Hui.Pu at gehealthcare.com>
> Cc: Ian Ray <ian.ray at gehealthcare.com>
> Cc: Thomas Petazzoni <thomas.petazzoni at bootlin.com>
> Cc: dri-devel at lists.freedesktop.org
> Cc: linux-kernel at vger.kernel.org
> Cc: asahi at lists.linux.dev
> Cc: imx at lists.linux.dev
> Cc: linux-arm-kernel at lists.infradead.org
> Cc: linux-mips at vger.kernel.org
> Cc: linux-mediatek at lists.infradead.org
> Cc: linux-amlogic at lists.infradead.org
> Cc: linux-arm-msm at vger.kernel.org
> Cc: freedreno at lists.freedesktop.org
> Cc: linux-rockchip at lists.infradead.org
> Cc: linux-tegra at vger.kernel.org
> Cc: linux-samsung-soc at vger.kernel.org
> Cc: linux-renesas-soc at vger.kernel.org
> 
> ---
> Luca Ceresoli (41):
>       drm/display: bridge-connector: attach the encoder to the
> created connector
>       drm: adp: remove now-redundant call to
> drm_connector_attach_encoder()
>       drm/bridge: adv7511: remove now-redundant call to
> drm_connector_attach_encoder()
>       drm/bridge: ite-it6263: remove now-redundant call to
> drm_connector_attach_encoder()
>       drm/bridge: ti-sn65dsi86: remove now-redundant call to
> drm_connector_attach_encoder()
>       drm/imx/dcss: remove now-redundant call to
> drm_connector_attach_encoder()
>       drm/imx: ldb: remove now-redundant call to
> drm_connector_attach_encoder()
>       drm/imx: parallel-display: remove now-redundant call to
> drm_connector_attach_encoder()
>       drm/imx/lcdc: remove now-redundant call to
> drm_connector_attach_encoder()
>       drm/ingenic: remove now-redundant call to
> drm_connector_attach_encoder()
>       drm/kmb/dsi: remove now-redundant call to
> drm_connector_attach_encoder()
>       drm/mediatek: mtk_dpi: remove now-redundant call to
> drm_connector_attach_encoder()
>       drm/mediatek: mtk_dsi: remove now-redundant call to
> drm_connector_attach_encoder()
>       drm/meson: encoder_cvbs: remove now-redundant call to
> drm_connector_attach_encoder()
>       drm/meson: encoder_hdmi: remove now-redundant call to
> drm_connector_attach_encoder()
>       drm/msm/dp: remove now-redundant call to
> drm_connector_attach_encoder()
>       drm/msm/hdmi: remove now-redundant call to
> drm_connector_attach_encoder()
>       drm/omapdrm: remove now-redundant call to
> drm_connector_attach_encoder()
>       rm/rockchip: cdn-dp: remove now-redundant call to
> drm_connector_attach_encoder()
>       drm/rockchip: rk3066_hdmi: remove now-redundant call to
> drm_connector_attach_encoder()
>       drm/tegra: hdmi: remove now-redundant call to
> drm_connector_attach_encoder()
>       drm/tegra: rgb: remove now-redundant call to
> drm_connector_attach_encoder()
>       drm/tests: bridge: remove now-redundant call to
> drm_connector_attach_encoder()
>       drm: verisilicon: remove now-redundant call to
> drm_connector_attach_encoder()
>       drm/exynos: exynos_dp: remove now-redundant call to
> drm_connector_attach_encoder()
>       drm: rcar-du: encoder: remove now-redundant call to
> drm_connector_attach_encoder()
>       drm: renesas: rz-du: rzg2l_du_encoder: remove now-redundant
> call to drm_connector_attach_encoder()
>       drm/rockchip: analogix_dp: remove now-redundant call to
> drm_connector_attach_encoder()
>       drm/rockchip: dw_dp: remove now-redundant call to
> drm_connector_attach_encoder()
>       drm/rockchip: dw_hdmi_qp: remove now-redundant call to
> drm_connector_attach_encoder()
>       drm/rockchip: inno-hdmi: remove now-redundant call to
> drm_connector_attach_encoder()
>       drm/msm/mdp4: remove now-redundant call to
> drm_connector_attach_encoder()
>       drm/msm/dsi: remove now-redundant call to
> drm_connector_attach_encoder()
>       drm/mxsfb/lcdif: remove now-redundant call to
> drm_connector_attach_encoder()
>       drm/rockchip: lvds: remove now-redundant call to
> drm_connector_attach_encoder()
>       drm/tidss: remove now-redundant call to
> drm_connector_attach_encoder()
>       drm/tilcdc: remove now-redundant call to
> drm_connector_attach_encoder()
>       drm: zynqmp_kms: remove now-redundant call to
> drm_connector_attach_encoder()
>       drm/imx: remove now-redundant call to
> drm_connector_attach_encoder()
>       drm/rockchip: rgb: remove now-redundant call to
> drm_connector_attach_encoder()
>       drm: renesas: shmobile: remove now-redundant call to
> drm_connector_attach_encoder()
> 
>  drivers/gpu/drm/adp/adp_drv.c                     |  2 --
>  drivers/gpu/drm/bridge/adv7511/adv7511_drv.c      |  2 --
>  drivers/gpu/drm/bridge/ite-it6263.c               |  2 --
>  drivers/gpu/drm/bridge/ti-sn65dsi86.c             |  2 --
>  drivers/gpu/drm/display/drm_bridge_connector.c    | 11 +++++++++--
>  drivers/gpu/drm/exynos/exynos_dp.c                |  2 +-
>  drivers/gpu/drm/imx/dc/dc-kms.c                   |  8 +-------
>  drivers/gpu/drm/imx/dcss/dcss-kms.c               |  2 --
>  drivers/gpu/drm/imx/ipuv3/imx-ldb.c               |  2 --
>  drivers/gpu/drm/imx/ipuv3/parallel-display.c      |  2 --
>  drivers/gpu/drm/imx/lcdc/imx-lcdc.c               |  2 --
>  drivers/gpu/drm/ingenic/ingenic-drm-drv.c         |  2 --
>  drivers/gpu/drm/kmb/kmb_dsi.c                     |  2 +-
>  drivers/gpu/drm/mediatek/mtk_dpi.c                |  1 -
>  drivers/gpu/drm/mediatek/mtk_dsi.c                |  1 -
>  drivers/gpu/drm/meson/meson_encoder_cvbs.c        |  2 --
>  drivers/gpu/drm/meson/meson_encoder_hdmi.c        |  2 --
>  drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c          |  7 -------
>  drivers/gpu/drm/msm/dp/dp_drm.c                   |  2 --
>  drivers/gpu/drm/msm/dsi/dsi_manager.c             |  4 ----
>  drivers/gpu/drm/msm/hdmi/hdmi.c                   |  2 --
>  drivers/gpu/drm/mxsfb/lcdif_drv.c                 |  6 ------
>  drivers/gpu/drm/omapdrm/omap_drv.c                |  2 --
>  drivers/gpu/drm/renesas/rcar-du/rcar_du_encoder.c |  2 +-
>  drivers/gpu/drm/renesas/rz-du/rzg2l_du_encoder.c  |  2 +-
>  drivers/gpu/drm/renesas/shmobile/shmob_drm_crtc.c | 16 +++++++------
> ---
>  drivers/gpu/drm/rockchip/analogix_dp-rockchip.c   |  2 +-
>  drivers/gpu/drm/rockchip/cdn-dp-core.c            |  2 --
>  drivers/gpu/drm/rockchip/dw_dp-rockchip.c         |  2 +-
>  drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c    |  2 +-
>  drivers/gpu/drm/rockchip/inno_hdmi-rockchip.c     |  2 +-
>  drivers/gpu/drm/rockchip/rk3066_hdmi.c            |  2 --
>  drivers/gpu/drm/rockchip/rockchip_lvds.c          |  6 ------
>  drivers/gpu/drm/rockchip/rockchip_rgb.c           |  9 ---------
>  drivers/gpu/drm/tegra/hdmi.c                      |  2 --
>  drivers/gpu/drm/tegra/rgb.c                       |  2 --
>  drivers/gpu/drm/tests/drm_bridge_test.c           |  2 --
>  drivers/gpu/drm/tidss/tidss_encoder.c             |  6 ------
>  drivers/gpu/drm/tilcdc/tilcdc_encoder.c           |  6 ------
>  drivers/gpu/drm/verisilicon/vs_bridge.c           |  1 -
>  drivers/gpu/drm/xlnx/zynqmp_kms.c                 |  6 ------
>  41 files changed, 25 insertions(+), 117 deletions(-)
> ---
> base-commit: 77fec37c895fcbdefbcec97cefd6d1f5cfdf1e3a
> change-id: 20260416-drm-bridge-connector-attach_encoder-c651ac05705f
> 
> Best regards,
> --  
> Luca Ceresoli <luca.ceresoli at bootlin.com>




More information about the Linux-mediatek mailing list