Intel-GFX Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Imre Deak <imre.deak@intel.com>
To: Gustavo Sousa <gustavo.sousa@intel.com>
Cc: intel-xe@lists.freedesktop.org, intel-gfx@lists.freedesktop.org,
	"Ankit Nautiyal" <ankit.k.nautiyal@intel.com>,
	"Dnyaneshwar Bhadane" <dnyaneshwar.bhadane@intel.com>,
	"Jouni Högander" <jouni.hogander@intel.com>,
	"Juha-pekka Heikkila" <juha-pekka.heikkila@intel.com>,
	"Luca Coelho" <luciano.coelho@intel.com>,
	"Lucas De Marchi" <lucas.demarchi@intel.com>,
	"Matt Atwood" <matthew.s.atwood@intel.com>,
	"Matt Roper" <matthew.d.roper@intel.com>,
	"Ravi Kumar Vodapalli" <ravi.kumar.vodapalli@intel.com>,
	"Shekhar Chauhan" <shekhar.chauhan@intel.com>,
	"Vinod Govindapillai" <vinod.govindapillai@intel.com>,
	"Jani Nikula" <jani.nikula@linux.intel.com>
Subject: Re: [PATCH v5 3/8] drm/i915/display: Handle dedicated external ports in intel_encoder_is_tc()
Date: Wed, 19 Nov 2025 15:36:41 +0200	[thread overview]
Message-ID: <aR3H6ZvLdGnbD6T-@ideak-desk> (raw)
In-Reply-To: <20251114-xe3p_lpd-basic-enabling-v5-3-c183388367f4@intel.com>

On Fri, Nov 14, 2025 at 05:52:10PM -0300, Gustavo Sousa wrote:
> Starting with Xe3p_LPD, the VBT has a new field, called in the driver
> "dedicated_external", which tells that a Type-C capable port is
> physically connected to a PHY outside of the Type-C subsystem.  When
> that's the case, the driver must not do the extra Type-C programming for
> that port.  Update intel_encoder_is_tc() to check for that case.
> 
> While at it, add a note to intel_phy_is_tc() to remind us that it is
> about whether the respective port is a Type-C capable port rather than
> the PHY itself.
> 
> (Maybe it would be a nice idea to rename intel_phy_is_tc()?)
> 
> Note that this was handled with a new bool member added to struct
> intel_digital_port instead of having querying the VBT directly because
> VBT memory is freed (intel_bios_driver_remove) before encoder cleanup
> (intel_ddi_encoder_destroy), which would cause an oops to happen when
> the latter calls intel_encoder_is_tc().  This could be fixed by keeping
> VBT data around longer, but that's left for a follow-up work, if deemed
> necessary.
> 
> v2:
>   - Drop printing info about dedicated external, now that we are doing
>     it when parsing the VBT. (Jani)
>   - Add a FIXME comment on the code explaining why we need to store
>     dedicated_external in struct intel_digital_port. (Jani)
> v3:
>   - Simplify the code by using NULL check for dig_port to avoid using
>     intel_encoder_is_dig_port(). (Imre)
> 
> Cc: Imre Deak <imre.deak@intel.com>
> Cc: Jani Nikula <jani.nikula@linux.intel.com>
> Cc: Shekhar Chauhan <shekhar.chauhan@intel.com>
> Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>

Reviewed-by: Imre Deak <imre.deak@intel.com>

> ---
>  drivers/gpu/drm/i915/display/intel_ddi.c           | 11 +++++++++++
>  drivers/gpu/drm/i915/display/intel_display.c       | 16 +++++++++++++++-
>  drivers/gpu/drm/i915/display/intel_display_types.h |  1 +
>  3 files changed, 27 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
> index 002ccd47856d..11ceb9355b75 100644
> --- a/drivers/gpu/drm/i915/display/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/display/intel_ddi.c
> @@ -5372,6 +5372,17 @@ void intel_ddi_init(struct intel_display *display,
>  			goto err;
>  	}
>  
> +	/*
> +	 * FIXME: We currently need to store dedicated_external because devdata
> +	 * does not live long enough for when intel_encoder_is_tc() is called on
> +	 * the unbind path.  This needs to be fixed by making sure that the VBT
> +	 * data is kept long enough, so that
> +	 * intel_bios_encoder_is_dedicated_external() can be called directly
> +	 * from intel_encoder_is_tc().
> +	 */
> +	if (intel_bios_encoder_is_dedicated_external(devdata))
> +		dig_port->dedicated_external = true;
> +
>  	if (intel_encoder_is_tc(encoder)) {
>  		bool is_legacy =
>  			!intel_bios_encoder_supports_typec_usb(devdata) &&
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> index 069967114bd9..5071a0ae5235 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -1810,7 +1810,17 @@ bool intel_phy_is_combo(struct intel_display *display, enum phy phy)
>  		return false;
>  }
>  
> -/* Prefer intel_encoder_is_tc() */
> +/*
> + * This function returns true if the DDI port respective to the PHY enumeration
> + * is a Type-C capable port.
> + *
> + * Depending on the VBT, the port might be configured
> + * as a "dedicated external" port, meaning that actual physical PHY is outside
> + * of the Type-C subsystem and, as such, not really a "Type-C PHY".
> + *
> + * Prefer intel_encoder_is_tc(), especially if you really need to know if we
> + * are dealing with Type-C connections.
> + */
>  bool intel_phy_is_tc(struct intel_display *display, enum phy phy)
>  {
>  	/*
> @@ -1894,6 +1904,10 @@ bool intel_encoder_is_snps(struct intel_encoder *encoder)
>  bool intel_encoder_is_tc(struct intel_encoder *encoder)
>  {
>  	struct intel_display *display = to_intel_display(encoder);
> +	struct intel_digital_port *dig_port = enc_to_dig_port(encoder);
> +
> +	if (dig_port && dig_port->dedicated_external)
> +		return false;
>  
>  	return intel_phy_is_tc(display, intel_encoder_to_phy(encoder));
>  }
> diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
> index 38702a9e0f50..7b08d618776c 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_types.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_types.h
> @@ -1936,6 +1936,7 @@ struct intel_digital_port {
>  	bool lane_reversal;
>  	bool ddi_a_4_lanes;
>  	bool release_cl2_override;
> +	bool dedicated_external;
>  	u8 max_lanes;
>  	/* Used for DP and ICL+ TypeC/DP and TypeC/HDMI ports. */
>  	enum aux_ch aux_ch;
> 
> -- 
> 2.51.0
> 

  reply	other threads:[~2025-11-19 13:36 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-11-14 20:52 [PATCH v5 0/8] drm/i915/display: Add initial support for Xe3p_LPD Gustavo Sousa
2025-11-14 20:52 ` [PATCH v5 1/8] drm/i915/vbt: Add fields dedicated_external and dyn_port_over_tc Gustavo Sousa
2025-11-19 13:34   ` Imre Deak
2025-11-14 20:52 ` [PATCH v5 2/8] drm/i915/power: Use intel_encoder_is_tc() Gustavo Sousa
2025-11-19 13:35   ` Imre Deak
2025-11-14 20:52 ` [PATCH v5 3/8] drm/i915/display: Handle dedicated external ports in intel_encoder_is_tc() Gustavo Sousa
2025-11-19 13:36   ` Imre Deak [this message]
2025-11-14 20:52 ` [PATCH v5 4/8] drm/i915/xe3p_lpd: Handle underrun debug bits Gustavo Sousa
2025-11-19 19:06   ` Matt Roper
2025-11-21 23:20     ` Matt Atwood
2025-11-14 20:52 ` [PATCH v5 5/8] drm/i915/nvls: Add NVL-S display support Gustavo Sousa
2025-11-14 20:52 ` [PATCH v5 6/8] drm/i915/display: Use platform check in HAS_LT_PHY() Gustavo Sousa
2025-11-14 20:52 ` [PATCH v5 7/8] drm/i915/display: Move HAS_LT_PHY() to intel_display_device.h Gustavo Sousa
2025-11-14 20:52 ` [PATCH v5 8/8] drm/i915/display: Use HAS_LT_PHY() for LT PHY AUX power Gustavo Sousa

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=aR3H6ZvLdGnbD6T-@ideak-desk \
    --to=imre.deak@intel.com \
    --cc=ankit.k.nautiyal@intel.com \
    --cc=dnyaneshwar.bhadane@intel.com \
    --cc=gustavo.sousa@intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=intel-xe@lists.freedesktop.org \
    --cc=jani.nikula@linux.intel.com \
    --cc=jouni.hogander@intel.com \
    --cc=juha-pekka.heikkila@intel.com \
    --cc=lucas.demarchi@intel.com \
    --cc=luciano.coelho@intel.com \
    --cc=matthew.d.roper@intel.com \
    --cc=matthew.s.atwood@intel.com \
    --cc=ravi.kumar.vodapalli@intel.com \
    --cc=shekhar.chauhan@intel.com \
    --cc=vinod.govindapillai@intel.com \
    /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