From: Thomas Zimmermann <tzimmermann@suse.de>
To: Maxime Ripard <mripard@kernel.org>,
Andrzej Hajda <andrzej.hajda@intel.com>,
Neil Armstrong <neil.armstrong@linaro.org>,
Robert Foss <rfoss@kernel.org>,
Laurent Pinchart <Laurent.pinchart@ideasonboard.com>,
Jonas Karlman <jonas@kwiboo.se>,
Jernej Skrabec <jernej.skrabec@gmail.com>,
Luca Ceresoli <luca.ceresoli@bootlin.com>,
Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
David Airlie <airlied@gmail.com>, Simona Vetter <simona@ffwll.ch>
Cc: Dmitry Baryshkov <lumag@kernel.org>, dri-devel@lists.freedesktop.org
Subject: Re: [PATCH 04/76] drm/bridge: Add new atomic_create_state callback
Date: Tue, 2 Jun 2026 09:24:29 +0200 [thread overview]
Message-ID: <d640577b-ea48-43ce-ad2f-c0e92b6f1248@suse.de> (raw)
In-Reply-To: <20260530-drm-no-more-bridge-reset-v1-4-875d828d31bc@kernel.org>
Hi
Am 30.05.26 um 15:59 schrieb Maxime Ripard:
> Commit 47b5ac7daa46 ("drm/atomic: Add new atomic_create_state callback
> to drm_private_obj") introduced a new pattern for allocating drm object
> states: atomic_create_state, a dedicated hook that allocates and
> initializes a pristine state without any side effect.
>
> The bridge atomic_reset callback is already fallible and in practice
> only allocates and initializes state without touching hardware.
> However, the reset name does not make this contract clear: callers
> and implementers cannot tell from the name alone whether the hardware
> will be affected or when the hook is safe to call.
>
> Add an atomic_create_state callback to drm_bridge_funcs to make the
> contract explicit: allocate a pristine state, initialize it, no side
> effects. The core calls it when available, falling back to
> atomic_reset otherwise.
>
> Signed-off-by: Maxime Ripard <mripard@kernel.org>
> ---
> drivers/gpu/drm/drm_bridge.c | 8 ++++++--
> include/drm/drm_bridge.h | 33 +++++++++++----------------------
> 2 files changed, 17 insertions(+), 24 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c
> index 687b36eea0c7..ef06c1aa509a 100644
> --- a/drivers/gpu/drm/drm_bridge.c
> +++ b/drivers/gpu/drm/drm_bridge.c
> @@ -498,11 +498,14 @@ static struct drm_private_state *
> drm_bridge_atomic_create_priv_state(struct drm_private_obj *obj)
> {
> struct drm_bridge *bridge = drm_priv_to_bridge(obj);
> struct drm_bridge_state *state;
>
> - state = bridge->funcs->atomic_reset(bridge);
> + if (bridge->funcs->atomic_create_state)
> + state = bridge->funcs->atomic_create_state(bridge);
> + else
> + state = bridge->funcs->atomic_reset(bridge);
> if (IS_ERR(state))
> return ERR_CAST(state);
>
> return &state->base;
> }
> @@ -513,11 +516,12 @@ static const struct drm_private_state_funcs drm_bridge_priv_state_funcs = {
> .atomic_destroy_state = drm_bridge_atomic_destroy_priv_state,
> };
>
> static bool drm_bridge_is_atomic(struct drm_bridge *bridge)
> {
> - return bridge->funcs->atomic_reset != NULL;
> + return (bridge->funcs->atomic_create_state ||
> + bridge->funcs->atomic_reset);
> }
>
> /**
> * drm_bridge_attach - attach the bridge to an encoder's chain
> *
> diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h
> index 4ba3a5deef9a..a6c07d339afa 100644
> --- a/include/drm/drm_bridge.h
> +++ b/include/drm/drm_bridge.h
> @@ -502,35 +502,24 @@ struct drm_bridge_funcs {
> struct drm_bridge_state *bridge_state,
> struct drm_crtc_state *crtc_state,
> struct drm_connector_state *conn_state);
>
> /**
> - * @atomic_reset:
> + * @atomic_create_state:
> *
> - * Reset the bridge to a predefined state (or retrieve its current
> - * state) and return a &drm_bridge_state object matching this state.
> - * This function is called at attach time.
> - *
> - * The atomic_reset hook is mandatory if the bridge implements any of
> - * the atomic hooks, and should be left unassigned otherwise. For
> - * bridges that don't subclass &drm_bridge_state, the
> - * drm_atomic_helper_bridge_reset() helper function shall be used to
> - * implement this hook.
> - *
> - * Note that the atomic_reset() semantics is not exactly matching the
> - * reset() semantics found on other components (connector, plane, ...).
> - *
> - * 1. The reset operation happens when the bridge is attached, not when
> - * drm_mode_config_reset() is called
> - * 2. It's meant to be used exclusively on bridges that have been
> - * converted to the ATOMIC API
> + * Allocate a pristine, initialized, state for the bridge
> + * object and return it. This callback must have no side
> + * effects: in particular, the returned state must not be
> + * assigned to the object's state pointer and it must not affect
> + * the hardware state.
> *
> * RETURNS:
> - * A valid drm_bridge_state object in case of success, an ERR_PTR()
> - * giving the reason of the failure otherwise.
> + *
> + * A new, pristine, bridge state instance or an error pointer
> + * on failure.
> */
> - struct drm_bridge_state *(*atomic_reset)(struct drm_bridge *bridge);
This needs to remain for now, right?
Best regards
Thomas
> + struct drm_bridge_state *(*atomic_create_state)(struct drm_bridge *bridge);
>
> /**
> * @detect:
> *
> * Check if anything is attached to the bridge output.
> @@ -1369,11 +1358,11 @@ drm_bridge_get_current_state(struct drm_bridge *bridge)
> /*
> * Only atomic bridges will have bridge->base initialized by
> * drm_atomic_private_obj_init(), so we need to make sure we're
> * working with one before we try to use the lock.
> */
> - if (!bridge->funcs || !bridge->funcs->atomic_reset)
> + if (!bridge->funcs || !bridge->funcs->atomic_create_state)
> return NULL;
>
> drm_modeset_lock_assert_held(&bridge->base.lock);
>
> if (!bridge->base.state)
>
--
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstr. 146, 90461 Nürnberg, Germany, www.suse.com
GF: Jochen Jaser, Andrew McDonald, Werner Knoblich, (HRB 36809, AG Nürnberg)
next prev parent reply other threads:[~2026-06-02 7:24 UTC|newest]
Thread overview: 118+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-30 13:59 [PATCH 00/76] drm/bridge: Convert all reset users to create_state Maxime Ripard
2026-05-30 13:59 ` [PATCH 01/76] drm/atomic-state-helper: Rename __drm_atomic_helper_bridge_reset() Maxime Ripard
2026-06-02 7:03 ` Thomas Zimmermann
2026-06-03 14:07 ` Luca Ceresoli
2026-06-04 5:45 ` Claude review: " Claude Code Review Bot
2026-05-30 13:59 ` [PATCH 02/76] drm/atomic-state-helper: Reorder __drm_atomic_helper_bridge_state_init() arguments Maxime Ripard
2026-06-02 7:03 ` Thomas Zimmermann
2026-06-04 5:45 ` Claude review: " Claude Code Review Bot
2026-05-30 13:59 ` [PATCH 03/76] drm/atomic-state-helper: Drop memset from __drm_atomic_helper_bridge_state_init() Maxime Ripard
2026-06-02 7:06 ` Thomas Zimmermann
2026-06-03 14:07 ` Luca Ceresoli
2026-06-04 5:45 ` Claude review: " Claude Code Review Bot
2026-05-30 13:59 ` [PATCH 04/76] drm/bridge: Add new atomic_create_state callback Maxime Ripard
2026-05-31 3:15 ` Liu Ying
2026-06-02 7:24 ` Thomas Zimmermann [this message]
2026-06-02 7:26 ` Maxime Ripard
2026-06-04 5:45 ` Claude review: " Claude Code Review Bot
2026-05-30 13:59 ` [PATCH 05/76] drm/atomic-state-helper: Add drm_atomic_helper_bridge_create_state() Maxime Ripard
2026-06-02 7:35 ` Thomas Zimmermann
2026-06-03 14:07 ` Luca Ceresoli
2026-06-04 5:45 ` Claude review: " Claude Code Review Bot
2026-05-30 13:59 ` [PATCH 06/76] drm/bridge: adv7511: Switch to atomic_create_state Maxime Ripard
2026-05-30 13:59 ` [PATCH 07/76] drm/bridge: analogix_dp: " Maxime Ripard
2026-05-30 13:59 ` [PATCH 08/76] drm/bridge: anx7625: " Maxime Ripard
2026-05-30 13:59 ` [PATCH 09/76] drm/bridge: chipone-icn6211: " Maxime Ripard
2026-05-30 13:59 ` [PATCH 10/76] drm/bridge: display-connector: " Maxime Ripard
2026-06-03 14:07 ` Luca Ceresoli
2026-05-30 13:59 ` [PATCH 11/76] drm/bridge: fsl-ldb: " Maxime Ripard
2026-06-03 14:07 ` Luca Ceresoli
2026-05-30 13:59 ` [PATCH 12/76] drm/bridge: imx8mp-hdmi-pvi: " Maxime Ripard
2026-06-03 14:07 ` Luca Ceresoli
2026-05-30 13:59 ` [PATCH 13/76] drm/bridge: imx8qm-ldb: " Maxime Ripard
2026-06-03 14:07 ` Luca Ceresoli
2026-05-30 13:59 ` [PATCH 14/76] drm/bridge: imx8qxp-ldb: " Maxime Ripard
2026-05-30 13:59 ` [PATCH 15/76] drm/bridge: imx8qxp-pixel-combiner: " Maxime Ripard
2026-05-30 13:59 ` [PATCH 16/76] drm/bridge: imx8qxp-pixel-link: " Maxime Ripard
2026-05-30 13:59 ` [PATCH 17/76] drm/bridge: imx8qxp-pxl2dpi: " Maxime Ripard
2026-05-30 13:59 ` [PATCH 18/76] drm/bridge: inno-hdmi: " Maxime Ripard
2026-05-30 13:59 ` [PATCH 19/76] drm/bridge: ite-it6263: " Maxime Ripard
2026-05-30 13:59 ` [PATCH 20/76] drm/bridge: ite-it6505: " Maxime Ripard
2026-05-30 13:59 ` [PATCH 21/76] drm/bridge: ite-it66121: " Maxime Ripard
2026-05-30 13:59 ` [PATCH 22/76] drm/bridge: lontium-lt9211: " Maxime Ripard
2026-05-30 13:59 ` [PATCH 23/76] drm/bridge: lontium-lt9611: " Maxime Ripard
2026-05-30 13:59 ` [PATCH 24/76] drm/bridge: lvds-codec: " Maxime Ripard
2026-05-30 13:59 ` [PATCH 25/76] drm/bridge: nwl-dsi: " Maxime Ripard
2026-05-30 13:59 ` [PATCH 26/76] drm/bridge: panel: " Maxime Ripard
2026-06-03 14:07 ` Luca Ceresoli
2026-05-30 13:59 ` [PATCH 27/76] drm/bridge: parade-ps8640: " Maxime Ripard
2026-06-02 0:20 ` Doug Anderson
2026-05-30 13:59 ` [PATCH 28/76] drm/bridge: samsung-dsim: " Maxime Ripard
2026-06-03 14:07 ` Luca Ceresoli
2026-05-30 13:59 ` [PATCH 29/76] drm/bridge: sii902x: " Maxime Ripard
2026-05-30 13:59 ` [PATCH 30/76] drm/bridge: ssd2825: " Maxime Ripard
2026-05-30 13:59 ` [PATCH 31/76] drm/bridge: dw-dp: " Maxime Ripard
2026-05-30 13:59 ` [PATCH 32/76] drm/bridge: dw-hdmi-qp: " Maxime Ripard
2026-05-30 13:59 ` [PATCH 33/76] drm/bridge: dw-hdmi: " Maxime Ripard
2026-05-30 13:59 ` [PATCH 34/76] drm/bridge: dw-mipi-dsi: " Maxime Ripard
2026-05-30 13:59 ` [PATCH 35/76] drm/bridge: dw-mipi-dsi2: " Maxime Ripard
2026-05-30 13:59 ` [PATCH 36/76] drm/bridge: tc358762: " Maxime Ripard
2026-05-30 13:59 ` [PATCH 37/76] drm/bridge: tc358767: " Maxime Ripard
2026-05-30 13:59 ` [PATCH 38/76] drm/bridge: tc358768: " Maxime Ripard
2026-05-30 13:59 ` [PATCH 39/76] drm/bridge: tc358775: " Maxime Ripard
2026-05-30 13:59 ` [PATCH 40/76] drm/bridge: ti-dlpc3433: " Maxime Ripard
2026-05-30 13:59 ` [PATCH 41/76] drm/bridge: ti-sn65dsi83: " Maxime Ripard
2026-06-03 14:07 ` Luca Ceresoli
2026-05-30 13:59 ` [PATCH 42/76] drm/bridge: ti-sn65dsi86: " Maxime Ripard
2026-06-02 0:19 ` Doug Anderson
2026-06-03 14:07 ` Luca Ceresoli
2026-05-30 13:59 ` [PATCH 43/76] drm/bridge: ti-tdp158: " Maxime Ripard
2026-05-30 13:59 ` [PATCH 44/76] drm/bridge: ti-tfp410: " Maxime Ripard
2026-05-30 13:59 ` [PATCH 45/76] drm/imx: parallel-display: " Maxime Ripard
2026-05-30 13:59 ` [PATCH 46/76] drm/ingenic: " Maxime Ripard
2026-05-30 13:59 ` [PATCH 47/76] drm/mediatek: dp: " Maxime Ripard
2026-05-30 13:59 ` [PATCH 48/76] drm/mediatek: dpi: " Maxime Ripard
2026-05-30 13:59 ` [PATCH 49/76] drm/mediatek: dsi: " Maxime Ripard
2026-05-30 13:59 ` [PATCH 50/76] drm/mediatek: hdmi: " Maxime Ripard
2026-05-30 13:59 ` [PATCH 51/76] drm/mediatek: hdmi_v2: " Maxime Ripard
2026-05-30 13:59 ` [PATCH 52/76] drm/meson: encoder_cvbs: " Maxime Ripard
2026-05-30 13:59 ` [PATCH 53/76] drm/meson: encoder_dsi: " Maxime Ripard
2026-05-30 13:59 ` [PATCH 54/76] drm/meson: encoder_hdmi: " Maxime Ripard
2026-05-30 14:00 ` [PATCH 55/76] drm/msm: dp: " Maxime Ripard
2026-05-30 14:00 ` [PATCH 56/76] drm/msm: hdmi: " Maxime Ripard
2026-05-30 14:00 ` [PATCH 57/76] drm/omap: hdmi4: " Maxime Ripard
2026-05-30 14:00 ` [PATCH 58/76] drm/omap: hdmi5: " Maxime Ripard
2026-05-30 14:00 ` [PATCH 59/76] drm/renesas: rcar-du: lvds: " Maxime Ripard
2026-05-30 14:00 ` [PATCH 60/76] drm/renesas: rcar-du: mipi_dsi: " Maxime Ripard
2026-05-30 14:00 ` [PATCH 61/76] drm/renesas: rz-du: " Maxime Ripard
2026-05-30 14:00 ` [PATCH 62/76] drm/rockchip: cdn-dp: " Maxime Ripard
2026-06-02 15:02 ` Heiko Stuebner
2026-05-30 14:00 ` [PATCH 63/76] drm/rockchip: rk3066_hdmi: " Maxime Ripard
2026-06-02 15:02 ` Heiko Stuebner
2026-05-30 14:00 ` [PATCH 64/76] drm/rockchip: lvds: " Maxime Ripard
2026-06-02 15:03 ` Heiko Stuebner
2026-05-30 14:00 ` [PATCH 65/76] drm/stm: " Maxime Ripard
2026-05-30 14:00 ` [PATCH 66/76] drm/tests: bridge: " Maxime Ripard
2026-05-30 14:00 ` [PATCH 67/76] drm/tidss: encoder: " Maxime Ripard
2026-05-30 14:00 ` [PATCH 68/76] drm/tidss: oldi: " Maxime Ripard
2026-05-30 14:00 ` [PATCH 69/76] drm/vc4: dsi: " Maxime Ripard
2026-06-01 14:32 ` Maíra Canal
2026-06-01 14:59 ` Dave Stevenson
2026-05-30 14:00 ` [PATCH 70/76] drm/verisilicon: " Maxime Ripard
2026-05-31 10:08 ` Icenowy Zheng
2026-05-30 14:00 ` [PATCH 71/76] drm/xlnx: zynqmp_dp: " Maxime Ripard
2026-06-03 14:07 ` Luca Ceresoli
2026-05-30 14:00 ` [PATCH 72/76] drm/atomic-state-helper: Remove drm_atomic_helper_bridge_reset() Maxime Ripard
2026-06-02 7:36 ` Thomas Zimmermann
2026-06-04 5:45 ` Claude review: " Claude Code Review Bot
2026-05-30 14:00 ` [PATCH 73/76] drm/bridge: cdns-dsi: Use __drm_atomic_helper_bridge_state_init() Maxime Ripard
2026-06-04 5:45 ` Claude review: " Claude Code Review Bot
2026-05-30 14:00 ` [PATCH 74/76] drm/bridge: cdns-dsi: Switch to atomic_create_state Maxime Ripard
2026-06-02 7:39 ` Thomas Zimmermann
2026-06-04 5:45 ` Claude review: " Claude Code Review Bot
2026-05-30 14:00 ` [PATCH 75/76] drm/bridge: cdns-mhdp8546: " Maxime Ripard
2026-06-02 8:00 ` Thomas Zimmermann
2026-06-04 5:45 ` Claude review: " Claude Code Review Bot
2026-05-30 14:00 ` [PATCH 76/76] drm/bridge: Remove atomic_reset support Maxime Ripard
2026-06-04 5:45 ` Claude review: " Claude Code Review Bot
2026-06-04 5:45 ` Claude review: drm/bridge: Convert all reset users to create_state Claude Code Review Bot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=d640577b-ea48-43ce-ad2f-c0e92b6f1248@suse.de \
--to=tzimmermann@suse.de \
--cc=Laurent.pinchart@ideasonboard.com \
--cc=airlied@gmail.com \
--cc=andrzej.hajda@intel.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=jernej.skrabec@gmail.com \
--cc=jonas@kwiboo.se \
--cc=luca.ceresoli@bootlin.com \
--cc=lumag@kernel.org \
--cc=maarten.lankhorst@linux.intel.com \
--cc=mripard@kernel.org \
--cc=neil.armstrong@linaro.org \
--cc=rfoss@kernel.org \
--cc=simona@ffwll.ch \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox