All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Svyatoslav Ryhel" <clamor95@gmail.com>
Cc: dri-devel@lists.freedesktop.org
Subject: Re: [PATCH v1] drm/bridge: ssd2825: Fix panel enable sequence
Date: Sun, 25 Oct 2026 13:48:21 +0000	[thread overview]
Message-ID: <sashiko-outbox-184230@kernel.org> (raw)
In-Reply-To: <20261025133636.253505-1-clamor95@gmail.com>

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] drm/bridge: ssd2825: duplicate atomic_enable() call on next_bridge
--

commit 1c5e404afec7538a0e06a870cc1167b8db336814
Author: Svyatoslav Ryhel <clamor95@gmail.com>

drm/bridge: ssd2825: Fix panel enable sequence

This commit invokes the next bridge's atomic_enable() callback directly at
the end of ssd2825_bridge_atomic_pre_enable() to restore panel output after
commit 554d36acf5e0 removed direct panel handling.

> diff --git a/drivers/gpu/drm/bridge/ssd2825.c b/drivers/gpu/drm/bridge/ssd2825.c
> index 71877699dfab6..9216cee09115f 100644
> --- a/drivers/gpu/drm/bridge/ssd2825.c
> +++ b/drivers/gpu/drm/bridge/ssd2825.c
> @@ -475,6 +475,7 @@ static void ssd2825_bridge_atomic_pre_enable(struct drm_bridge *bridge,
>  					     struct drm_atomic_commit *state)
>  {
>  	struct ssd2825_priv *priv = bridge_to_ssd2825(bridge);
> +	struct drm_bridge *next_bridge = priv->output.bridge;
>  	struct mipi_dsi_device *dsi_dev = priv->output.dev;
>  	const struct drm_crtc_state *crtc_state;
>  	const struct drm_display_mode *mode;
> @@ -569,6 +570,14 @@ static void ssd2825_bridge_atomic_pre_enable(struct drm_bridge *bridge,
>  	/* Initial DSI configuration register set */
>  	ssd2825_write_reg(priv, SSD2825_CONFIGURATION_REG, config);
>  	ssd2825_write_reg(priv, SSD2825_VC_CTRL_REG, 0);
> +
> +	/*
> +	 * The SSD2825 requires that the next bridge be enabled first;
> +	 * otherwise, the SSD2825 cannot complete its configuration and
> +	 * there will be no output.
> +	 */
> +	if (next_bridge->funcs && next_bridge->funcs->atomic_enable)
> +		next_bridge->funcs->atomic_enable(next_bridge, state);

[Severity: Medium]
Does calling next_bridge->funcs->atomic_enable() directly in
ssd2825_bridge_atomic_pre_enable() cause next_bridge->funcs->atomic_enable()
to be invoked twice on every modeset enable?

In drivers/gpu/drm/bridge/ssd2825.c, ssd2825_bridge_attach() attaches
priv->output.bridge to the encoder's bridge chain:

	return drm_bridge_attach(bridge->encoder, priv->output.bridge, bridge,
				 flags);

During an atomic modeset enable, drm_atomic_helper_commit_modeset_enables()
runs drm_atomic_bridge_chain_pre_enable(), which calls
ssd2825_bridge_atomic_pre_enable() and now invokes
next_bridge->funcs->atomic_enable() for the first time.

Immediately afterwards, drm_atomic_helper_commit_encoder_bridge_enable()
calls drm_atomic_bridge_chain_enable() in drivers/gpu/drm/drm_bridge.c:

	drm_for_each_bridge_in_chain_from(first_bridge, bridge)
		if (bridge->funcs->atomic_enable)
			bridge->funcs->atomic_enable(bridge, state);

This calls next_bridge->funcs->atomic_enable() a second time while
drm_atomic_bridge_chain_disable() only calls atomic_disable() once.

When next_bridge is a panel bridge, panel_bridge_atomic_enable() calls
drm_panel_enable() in drivers/gpu/drm/drm_panel.c, where the second call hits
the already-enabled check and emits a warning on every modeset:

	if (panel->enabled) {
		dev_warn(panel->dev, "Skipping enable of already enabled panel\n");
		return;
	}

When next_bridge is a non-panel drm_bridge, there is no enabled-state guard
in the DRM bridge core, so next_bridge->funcs->atomic_enable() runs twice
without a matching second disable.

Additionally, if next_bridge sets pre_enable_prev_first,
drm_atomic_bridge_chain_pre_enable() runs ssd2825_bridge_atomic_pre_enable()
before next_bridge->funcs->atomic_pre_enable(), which would cause
next_bridge->funcs->atomic_enable() to run before next_bridge has been
prepared in atomic_pre_enable().

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20261025133636.253505-1-clamor95@gmail.com?part=1

      reply	other threads:[~2026-10-25 13:48 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-25 13:36 [PATCH v1] drm/bridge: ssd2825: Fix panel enable sequence Svyatoslav Ryhel
2026-10-25 13:48 ` sashiko-bot [this message]

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=sashiko-outbox-184230@kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=clamor95@gmail.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=sashiko-reviews@lists.linux.dev \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.