public inbox for drm-ai-reviews@public-inbox.freedesktop.org
 help / color / mirror / Atom feed
From: Maxime Ripard <mripard@kernel.org>
To: 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>,
	Thomas Zimmermann <tzimmermann@suse.de>,
	David Airlie <airlied@gmail.com>, Simona Vetter <simona@ffwll.ch>
Cc: Dmitry Baryshkov <lumag@kernel.org>,
	dri-devel@lists.freedesktop.org,
	Maxime Ripard <mripard@kernel.org>
Subject: [PATCH 04/76] drm/bridge: Add new atomic_create_state callback
Date: Sat, 30 May 2026 15:59:09 +0200	[thread overview]
Message-ID: <20260530-drm-no-more-bridge-reset-v1-4-875d828d31bc@kernel.org> (raw)
In-Reply-To: <20260530-drm-no-more-bridge-reset-v1-0-875d828d31bc@kernel.org>

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);
+	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)

-- 
2.54.0


  parent reply	other threads:[~2026-05-30 14:00 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 ` Maxime Ripard [this message]
2026-05-31  3:15   ` [PATCH 04/76] drm/bridge: Add new atomic_create_state callback Liu Ying
2026-06-02  7:24   ` Thomas Zimmermann
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=20260530-drm-no-more-bridge-reset-v1-4-875d828d31bc@kernel.org \
    --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