From: Maxime Ripard <mripard@kernel.org>
To: Thomas Zimmermann <tzimmermann@suse.de>
Cc: 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>,
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:26:53 +0200 [thread overview]
Message-ID: <20260602-burrowing-fox-of-expression-e0ac77@houat> (raw)
In-Reply-To: <d640577b-ea48-43ce-ad2f-c0e92b6f1248@suse.de>
[-- Attachment #1: Type: text/plain, Size: 4789 bytes --]
On Tue, Jun 02, 2026 at 09:24:29AM +0200, Thomas Zimmermann wrote:
> 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?
Yeah, Liu Ying pointed it out too, it's a screwup. I'll keep
atomic_reset until all drivers are converted.
Thanks for your review!
Maxime
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 273 bytes --]
next prev parent reply other threads:[~2026-06-02 7:26 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
2026-06-02 7:26 ` Maxime Ripard [this message]
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=20260602-burrowing-fox-of-expression-e0ac77@houat \
--to=mripard@kernel.org \
--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=neil.armstrong@linaro.org \
--cc=rfoss@kernel.org \
--cc=simona@ffwll.ch \
--cc=tzimmermann@suse.de \
/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