All of lore.kernel.org
 help / color / mirror / Atom feed
From: Simona Vetter <simona.vetter@ffwll.ch>
To: Maxime Ripard <mripard@kernel.org>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
	Thomas Zimmermann <tzimmermann@suse.de>,
	David Airlie <airlied@gmail.com>, Simona Vetter <simona@ffwll.ch>,
	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>,
	Douglas Anderson <dianders@chromium.org>,
	dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v3 31/37] drm/bridge: Provide pointers to the connector and crtc in bridge state
Date: Mon, 17 Feb 2025 17:41:24 +0100	[thread overview]
Message-ID: <Z7NmtF83adILfasi@phenom.ffwll.local> (raw)
In-Reply-To: <20250213-bridge-connector-v3-31-e71598f49c8f@kernel.org>

On Thu, Feb 13, 2025 at 03:43:50PM +0100, Maxime Ripard wrote:
> Now that connectors are no longer necessarily created by the bridges
> drivers themselves but might be created by drm_bridge_connector, it's
> pretty hard for bridge drivers to retrieve pointers to the connector and
> CRTC they are attached to.
> 
> Indeed, the only way to retrieve the CRTC is to follow the drm_bridge
> encoder field, and then the drm_encoder crtc field, both of them being
> deprecated.

Eh, this isn't quite how this works. So unless bridges have become very
dynamic and gained flexible routing the bridge(->bridge->...)->encoder
chain is static. And the crtc for an encoder you find by walking the
connector states in a drm_atomic_state, finding the right one that points
at your encoder, and then return the ->crtc pointer from that connector
state.

It's a bit bonkers, but I think it's better to compute this than adding
more pointers that potentially diverge. Unless there's a grand plan here,
but then I think we want some safety checks that all the pointers never
get out of sync here.
-Sima

> 
> And for the connector, since we can have multiple connectors attached to
> a CRTC, we don't really have a reliable way to get it.
> 
> Let's provide both pointers in the drm_bridge_state structure so we
> don't have to follow deprecated, non-atomic, pointers, and be more
> consistent with the other KMS entities.
> 
> Signed-off-by: Maxime Ripard <mripard@kernel.org>
> ---
>  drivers/gpu/drm/drm_atomic_state_helper.c |  5 +++++
>  drivers/gpu/drm/drm_bridge.c              |  5 +++++
>  include/drm/drm_atomic.h                  | 14 ++++++++++++++
>  3 files changed, 24 insertions(+)
> 
> diff --git a/drivers/gpu/drm/drm_atomic_state_helper.c b/drivers/gpu/drm/drm_atomic_state_helper.c
> index 519228eb109533d2596e899a57b571fa0995824f..66661dca077215b78dffca7bc1712f56d35e3918 100644
> --- a/drivers/gpu/drm/drm_atomic_state_helper.c
> +++ b/drivers/gpu/drm/drm_atomic_state_helper.c
> @@ -777,10 +777,15 @@ EXPORT_SYMBOL(drm_atomic_helper_bridge_duplicate_state);
>   * that don't subclass the bridge state.
>   */
>  void drm_atomic_helper_bridge_destroy_state(struct drm_bridge *bridge,
>  					    struct drm_bridge_state *state)
>  {
> +	if (state->connector) {
> +		drm_connector_put(state->connector);
> +		state->connector = NULL;
> +	}
> +
>  	kfree(state);
>  }
>  EXPORT_SYMBOL(drm_atomic_helper_bridge_destroy_state);
>  
>  /**
> diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c
> index b6d24092674c8fa33d9b6ebab9ece0f91fb8f8ea..db2e9834939217d65720ab7a2f82a9ca3db796b0 100644
> --- a/drivers/gpu/drm/drm_bridge.c
> +++ b/drivers/gpu/drm/drm_bridge.c
> @@ -812,10 +812,15 @@ static int drm_atomic_bridge_check(struct drm_bridge *bridge,
>  		bridge_state = drm_atomic_get_new_bridge_state(crtc_state->state,
>  							       bridge);
>  		if (WARN_ON(!bridge_state))
>  			return -EINVAL;
>  
> +		bridge_state->crtc = crtc_state->crtc;
> +
> +		drm_connector_get(conn_state->connector);
> +		bridge_state->connector = conn_state->connector;
> +
>  		if (bridge->funcs->atomic_check) {
>  			ret = bridge->funcs->atomic_check(bridge, bridge_state,
>  							  crtc_state, conn_state);
>  			if (ret)
>  				return ret;
> diff --git a/include/drm/drm_atomic.h b/include/drm/drm_atomic.h
> index 4c673f0698fef6b60f77db980378d5e88e0e250e..293e2538a428bc14013d7fabea57a6b858ed7b47 100644
> --- a/include/drm/drm_atomic.h
> +++ b/include/drm/drm_atomic.h
> @@ -1216,10 +1216,24 @@ struct drm_bridge_state {
>  	/**
>  	 * @bridge: the bridge this state refers to
>  	 */
>  	struct drm_bridge *bridge;
>  
> +	/**
> +	 * @crtc: CRTC the bridge is connected to, NULL if disabled.
> +	 *
> +	 * Do not change this directly.
> +	 */
> +	struct drm_crtc *crtc;
> +
> +	/**
> +	 * @connector: The connector the bridge is connected to, NULL if disabled.
> +	 *
> +	 * Do not change this directly.
> +	 */
> +	struct drm_connector *connector;
> +
>  	/**
>  	 * @input_bus_cfg: input bus configuration
>  	 */
>  	struct drm_bus_cfg input_bus_cfg;
>  
> 
> -- 
> 2.48.0
> 

-- 
Simona Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch

  parent reply	other threads:[~2025-02-17 16:41 UTC|newest]

Thread overview: 83+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-02-13 14:43 [PATCH v3 00/37] drm/bridge: Various quality of life improvements Maxime Ripard
2025-02-13 14:43 ` [PATCH v3 01/37] drm/atomic: Document history of drm_atomic_state Maxime Ripard
2025-02-17 16:33   ` Simona Vetter
2025-02-13 14:43 ` [PATCH v3 02/37] drm/bridge: Pass full state to atomic_pre_enable Maxime Ripard
2025-02-14 17:00   ` Doug Anderson
2025-02-13 14:43 ` [PATCH v3 03/37] drm/bridge: Pass full state to atomic_enable Maxime Ripard
2025-02-14 17:00   ` Doug Anderson
2025-02-13 14:43 ` [PATCH v3 04/37] drm/bridge: Pass full state to atomic_disable Maxime Ripard
2025-02-14 17:00   ` Doug Anderson
2025-02-13 14:43 ` [PATCH v3 05/37] drm/bridge: Pass full state to atomic_post_disable Maxime Ripard
2025-02-14 17:00   ` Doug Anderson
2025-02-13 14:43 ` [PATCH v3 06/37] drm/atomic-helper: Fix commit_tail state variable name Maxime Ripard
2025-02-13 14:43 ` [PATCH v3 07/37] drm/atomic-helper: Change parameter name of drm_atomic_helper_wait_for_dependencies() Maxime Ripard
2025-02-13 14:43 ` [PATCH v3 08/37] drm/atomic-helper: Change parameter name of drm_atomic_helper_commit_tail() Maxime Ripard
2025-02-13 14:43 ` [PATCH v3 09/37] drm/atomic-helper: Change parameter name of drm_atomic_helper_commit_tail_rpm() Maxime Ripard
2025-02-13 14:43 ` [PATCH v3 10/37] drm/atomic-helper: Change parameter name of drm_atomic_helper_modeset_disables() Maxime Ripard
2025-02-13 14:43 ` [PATCH v3 11/37] drm/atomic-helper: Change parameter name of disable_outputs() Maxime Ripard
2025-02-13 14:43 ` [PATCH v3 12/37] drm/bridge: Change parameter name of drm_atomic_bridge_chain_disable() Maxime Ripard
2025-02-13 14:43 ` [PATCH v3 13/37] drm/bridge: Change parameter name of drm_atomic_bridge_chain_post_disable() Maxime Ripard
2025-02-13 16:17   ` Dmitry Baryshkov
2025-02-13 14:43 ` [PATCH v3 14/37] drm/atomic-helper: Change parameter name of drm_atomic_helper_update_legacy_modeset_state() Maxime Ripard
2025-02-13 14:43 ` [PATCH v3 15/37] drm/atomic-helper: Change parameter name of crtc_set_mode() Maxime Ripard
2025-02-13 14:43 ` [PATCH v3 16/37] drm/atomic-helper: Change parameter name of drm_atomic_helper_commit_planes() Maxime Ripard
2025-02-13 16:18   ` Dmitry Baryshkov
2025-02-13 14:43 ` [PATCH v3 17/37] drm/atomic-helper: Change parameter name of drm_atomic_helper_commit_modeset_enables() Maxime Ripard
2025-02-13 16:40   ` Dmitry Baryshkov
2025-02-13 14:43 ` [PATCH v3 18/37] drm/bridge: Change parameter name of drm_atomic_bridge_chain_pre_enable() Maxime Ripard
2025-02-13 16:38   ` Dmitry Baryshkov
2025-02-13 14:43 ` [PATCH v3 19/37] drm/bridge: Change parameter name of drm_atomic_bridge_chain_enable() Maxime Ripard
2025-02-13 16:39   ` Dmitry Baryshkov
2025-02-13 14:43 ` [PATCH v3 20/37] drm/atomic-helper: Change parameter name of drm_atomic_helper_commit_writebacks() Maxime Ripard
2025-02-13 16:39   ` Dmitry Baryshkov
2025-02-13 14:43 ` [PATCH v3 21/37] drm/atomic-helper: Change parameter name of drm_atomic_helper_fake_vblank() Maxime Ripard
2025-02-13 16:40   ` Dmitry Baryshkov
2025-02-13 14:43 ` [PATCH v3 22/37] drm/atomic-helper: Change parameter name of drm_atomic_helper_commit_hw_done() Maxime Ripard
2025-02-13 16:40   ` Dmitry Baryshkov
2025-02-13 14:43 ` [PATCH v3 23/37] drm/atomic-helper: Change parameter name of drm_atomic_helper_wait_for_vblanks() Maxime Ripard
2025-02-13 16:40   ` Dmitry Baryshkov
2025-02-13 14:43 ` [PATCH v3 24/37] drm/atomic-helper: Change parameter name of drm_atomic_helper_cleanup_planes() Maxime Ripard
2025-02-13 16:40   ` Dmitry Baryshkov
2025-02-13 14:43 ` [PATCH v3 25/37] drm/atomic-helper: Change parameter name of drm_atomic_helper_commit_cleanup_done() Maxime Ripard
2025-02-13 16:41   ` Dmitry Baryshkov
2025-02-13 14:43 ` [PATCH v3 26/37] drm/atomic-helper: Change parameter name of drm_atomic_helper_wait_for_flip_done() Maxime Ripard
2025-02-13 16:41   ` Dmitry Baryshkov
2025-02-13 14:43 ` [PATCH v3 27/37] drm/bridge: Add encoder parameter to drm_bridge_funcs.attach Maxime Ripard
2025-02-14 17:00   ` Doug Anderson
2025-02-13 14:43 ` [PATCH v3 28/37] drm/bridge: Provide a helper to retrieve current bridge state Maxime Ripard
2025-02-13 16:24   ` Dmitry Baryshkov
2025-02-13 14:43 ` [PATCH v3 29/37] drm/bridge: Introduce drm_bridge_is_atomic() helper Maxime Ripard
2025-02-13 16:25   ` Dmitry Baryshkov
2025-02-13 14:43 ` [PATCH v3 30/37] drm/bridge: Assume that a bridge is atomic if it has atomic_reset Maxime Ripard
2025-02-13 16:29   ` Dmitry Baryshkov
2025-02-14 12:59     ` Maxime Ripard
2025-02-14 13:26       ` Dmitry Baryshkov
2025-02-13 14:43 ` [PATCH v3 31/37] drm/bridge: Provide pointers to the connector and crtc in bridge state Maxime Ripard
2025-02-13 16:32   ` Dmitry Baryshkov
2025-02-14 13:06     ` Maxime Ripard
2025-02-14 13:28       ` Dmitry Baryshkov
2025-02-17 16:41   ` Simona Vetter [this message]
2025-02-17 19:36     ` Dmitry Baryshkov
2025-02-19 13:37       ` Simona Vetter
2025-02-18 10:23     ` Maxime Ripard
2025-02-19 13:35       ` Simona Vetter
2025-02-19 15:56         ` Maxime Ripard
2025-02-20  9:49           ` Simona Vetter
2025-02-13 14:43 ` [PATCH v3 32/37] drm/bridge: Make encoder pointer deprecated Maxime Ripard
2025-02-13 16:35   ` Dmitry Baryshkov
2025-02-14 13:07     ` Maxime Ripard
2025-02-14 13:29       ` Dmitry Baryshkov
2025-02-17 16:38         ` Simona Vetter
2025-02-17 19:47           ` Dmitry Baryshkov
2025-02-25 16:37             ` Maxime Ripard
2025-02-13 14:43 ` [PATCH v3 33/37] drm/bridge: cdns-csi: Switch to atomic helpers Maxime Ripard
2025-02-13 16:38   ` Dmitry Baryshkov
2025-02-13 14:43 ` [PATCH v3 34/37] drm/bridge: tc358775: Switch to atomic commit Maxime Ripard
2025-02-13 16:38   ` Dmitry Baryshkov
2025-02-13 14:43 ` [PATCH v3 35/37] drm/bridge: tc358768: Stop disabling when failing to enable Maxime Ripard
2025-02-13 16:37   ` Dmitry Baryshkov
2025-02-13 14:43 ` [PATCH v3 36/37] drm/bridge: tc358768: Convert to atomic helpers Maxime Ripard
2025-02-13 16:37   ` Dmitry Baryshkov
2025-02-13 14:43 ` [PATCH v3 37/37] drm/bridge: ti-sn65dsi86: Use bridge_state crtc pointer Maxime Ripard
2025-02-14 16:38   ` Doug Anderson
2025-02-19 16:12 ` [PATCH v3 00/37] drm/bridge: Various quality of life improvements Maxime Ripard

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=Z7NmtF83adILfasi@phenom.ffwll.local \
    --to=simona.vetter@ffwll.ch \
    --cc=Laurent.pinchart@ideasonboard.com \
    --cc=airlied@gmail.com \
    --cc=andrzej.hajda@intel.com \
    --cc=dianders@chromium.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=jernej.skrabec@gmail.com \
    --cc=jonas@kwiboo.se \
    --cc=linux-kernel@vger.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 \
    --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 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.