All of lore.kernel.org
 help / color / mirror / Atom feed
From: Imre Deak <imre.deak@intel.com>
To: "Nautiyal, Ankit K" <ankit.k.nautiyal@intel.com>
Cc: <intel-gfx@lists.freedesktop.org>,
	<intel-xe@lists.freedesktop.org>, <jani.nikula@linux.intel.com>
Subject: Re: [PATCH 2/2] drm/i915/dp: Restore the missing check for intel_dp_has_joiner
Date: Thu, 5 Feb 2026 14:53:05 +0200	[thread overview]
Message-ID: <aYSSsZXAl1AkTglZ@ideak-desk.lan> (raw)
In-Reply-To: <db09f0bf-c782-4d9f-9e9f-0dacbbc77cfb@intel.com>

On Thu, Feb 05, 2026 at 06:07:44PM +0530, Nautiyal, Ankit K wrote:
> 
> On 2/5/2026 3:11 PM, Imre Deak wrote:
> > On Thu, Feb 05, 2026 at 02:06:23PM +0530, Ankit Nautiyal wrote:
> > > Commit ad121a62d566 ("drm/i915/dp: Rework pipe joiner logic in mode_valid")
> > > replaced intel_dp_num_joined_pipes() with an explicit joiner candidate
> > > iteration. The previous code implicitly checked for DP joiner capability
> > > via intel_dp_has_joiner(), but this check was lost during the refactor.
> > > 
> > > Restore the missing intel_dp_has_joiner() check in intel_dp_can_join() so
> > > that DP specific joiner conditions are taken into account.
> > > 
> > > This change also requires propagating struct intel_dp * from the callers
> > > down to the new check.
> > > 
> > > Fixes: ad121a62d566 ("drm/i915/dp: Rework pipe joiner logic in mode_valid")
> > > Cc: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
> > > Cc: Imre Deak <imre.deak@intel.com>
> > > Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
> > > ---
> > >   drivers/gpu/drm/i915/display/intel_dp.c     | 16 +++++++++++-----
> > >   drivers/gpu/drm/i915/display/intel_dp.h     |  7 ++++---
> > >   drivers/gpu/drm/i915/display/intel_dp_mst.c |  4 ++--
> > >   3 files changed, 17 insertions(+), 10 deletions(-)
> > > 
> > > diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
> > > index 4f5b89f80e55..3021c64d0f85 100644
> > > --- a/drivers/gpu/drm/i915/display/intel_dp.c
> > > +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> > > @@ -1397,9 +1397,14 @@ bool intel_dp_has_dsc(const struct intel_connector *connector)
> > >   }
> > >   static
> > > -bool intel_dp_can_join(struct intel_display *display,
> > > +bool intel_dp_can_join(struct intel_dp *intel_dp,
> > >   		       int num_joined_pipes)
> > >   {
> > > +	struct intel_display *display = to_intel_display(intel_dp);
> > > +
> > > +	if (num_joined_pipes > 1 && !intel_dp_has_joiner(intel_dp))
> > > +		return false;
> > > +
> > >   	switch (num_joined_pipes) {
> > >   	case 1:
> > >   		return true;
> > > @@ -1496,7 +1501,7 @@ intel_dp_mode_valid(struct drm_connector *_connector,
> > >   	 * over candidate pipe counts and evaluate each combination.
> > >   	 */
> > >   	status = MODE_CLOCK_HIGH;
> > > -	for_each_joiner_candidate(connector, mode, num_joined_pipes) {
> > > +	for_each_joiner_candidate(intel_dp, connector, mode, num_joined_pipes) {
> > >   		int dsc_slice_count = 0;
> > >   		status = intel_pfit_mode_valid(display, mode, output_format, num_joined_pipes);
> > > @@ -2895,7 +2900,7 @@ intel_dp_compute_link_config(struct intel_encoder *encoder,
> > >   	    !intel_dp_supports_fec(intel_dp, connector, crtc_state))
> > >   		return -EINVAL;
> > > -	for_each_joiner_candidate(connector, adjusted_mode, num_joined_pipes) {
> > > +	for_each_joiner_candidate(intel_dp, connector, adjusted_mode, num_joined_pipes) {
> > >   		/*
> > >   		 * NOTE:
> > >   		 * The crtc_state->joiner_pipes should have been set at the end
> > > @@ -7213,13 +7218,14 @@ int intel_dp_sdp_min_guardband(const struct intel_crtc_state *crtc_state,
> > >   	return sdp_guardband;
> > >   }
> > > -bool intel_dp_joiner_candidate_valid(struct intel_connector *connector,
> > > +bool intel_dp_joiner_candidate_valid(struct intel_dp *intel_dp,
> > > +				     struct intel_connector *connector,
> > >   				     int hdisplay,
> > >   				     int num_joined_pipes)
> > intel_dp can be always deducted from the connector, via
> > intel_attached_dp(), so no need to pass intel_dp separately.
> 
> Since this function is called from the iterator macro for DP MST also, I was
> wondering if for MST case we need to get it via encoder/dig_port.

No, intel_attached_dp() works for MST connectors as well.

> Regards,
> 
> Ankit
> 
> 
> > 
> > >   {
> > >   	struct intel_display *display = to_intel_display(connector);
> > > -	if (!intel_dp_can_join(display, num_joined_pipes))
> > > +	if (!intel_dp_can_join(intel_dp, num_joined_pipes))
> > >   		return false;
> > >   	if (hdisplay > num_joined_pipes * intel_dp_max_hdisplay_per_pipe(display))
> > > diff --git a/drivers/gpu/drm/i915/display/intel_dp.h b/drivers/gpu/drm/i915/display/intel_dp.h
> > > index cbd7fcd3789f..37302ebe1cf9 100644
> > > --- a/drivers/gpu/drm/i915/display/intel_dp.h
> > > +++ b/drivers/gpu/drm/i915/display/intel_dp.h
> > > @@ -227,12 +227,13 @@ bool intel_dp_dotclk_valid(struct intel_display *display,
> > >   			   int htotal,
> > >   			   int dsc_slice_count,
> > >   			   int num_joined_pipes);
> > > -bool intel_dp_joiner_candidate_valid(struct intel_connector *connector,
> > > +bool intel_dp_joiner_candidate_valid(struct intel_dp *intel_dp,
> > > +				     struct intel_connector *connector,
> > >   				     int hdisplay,
> > >   				     int num_joined_pipes);
> > > -#define for_each_joiner_candidate(__connector, __mode, __num_joined_pipes) \
> > > +#define for_each_joiner_candidate(__intel_dp, __connector, __mode, __num_joined_pipes) \
> > >   	for ((__num_joined_pipes) = 1; (__num_joined_pipes) <= (I915_MAX_PIPES); (__num_joined_pipes)++) \
> > > -		for_each_if(intel_dp_joiner_candidate_valid(__connector, (__mode)->hdisplay, __num_joined_pipes))
> > > +		for_each_if(intel_dp_joiner_candidate_valid(__intel_dp, __connector, (__mode)->hdisplay, __num_joined_pipes))
> > >   #endif /* __INTEL_DP_H__ */
> > > diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c b/drivers/gpu/drm/i915/display/intel_dp_mst.c
> > > index 29713075e413..b2d3f35edd78 100644
> > > --- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
> > > +++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
> > > @@ -720,7 +720,7 @@ static int mst_stream_compute_config(struct intel_encoder *encoder,
> > >   	pipe_config->output_format = INTEL_OUTPUT_FORMAT_RGB;
> > >   	pipe_config->has_pch_encoder = false;
> > > -	for_each_joiner_candidate(connector, adjusted_mode, num_joined_pipes) {
> > > +	for_each_joiner_candidate(intel_dp, connector, adjusted_mode, num_joined_pipes) {
> > >   		if (num_joined_pipes > 1)
> > >   			pipe_config->joiner_pipes = GENMASK(crtc->pipe + num_joined_pipes - 1,
> > >   							    crtc->pipe);
> > > @@ -1524,7 +1524,7 @@ mst_connector_mode_valid_ctx(struct drm_connector *_connector,
> > >   	}
> > >   	*status = MODE_CLOCK_HIGH;
> > > -	for_each_joiner_candidate(connector, mode, num_joined_pipes) {
> > > +	for_each_joiner_candidate(intel_dp, connector, mode, num_joined_pipes) {
> > >   		int dsc_slice_count = 0;
> > >   		if (intel_dp_has_dsc(connector) &&
> > > -- 
> > > 2.45.2
> > > 

  reply	other threads:[~2026-02-05 12:53 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-02-05  8:36 [PATCH 0/2] drm/i915/dp: Joiner cleanups and fix Ankit Nautiyal
2026-02-05  8:36 ` [PATCH 1/2] drm/i915/dp: Make intel_dp_can_join() static Ankit Nautiyal
2026-02-05  9:44   ` Imre Deak
2026-02-05  8:36 ` [PATCH 2/2] drm/i915/dp: Restore the missing check for intel_dp_has_joiner Ankit Nautiyal
2026-02-05  9:41   ` Imre Deak
2026-02-05 12:37     ` Nautiyal, Ankit K
2026-02-05 12:53       ` Imre Deak [this message]
2026-02-05 14:20         ` Nautiyal, Ankit K
2026-02-06  4:47   ` Ankit Nautiyal
2026-02-06 10:33     ` Imre Deak
2026-02-05  9:37 ` ✗ CI.checkpatch: warning for drm/i915/dp: Joiner cleanups and fix Patchwork
2026-02-05  9:38 ` ✓ CI.KUnit: success " Patchwork
2026-02-05 10:16 ` ✓ Xe.CI.BAT: " Patchwork
2026-02-05 12:30 ` ✓ i915.CI.BAT: " Patchwork
2026-02-06  4:58 ` ✗ i915.CI.Full: failure " Patchwork
2026-02-06  5:10 ` ✓ CI.KUnit: success for drm/i915/dp: Joiner cleanups and fix (rev2) Patchwork
2026-02-06  5:25 ` ✗ CI.checksparse: warning " Patchwork
2026-02-06  5:48 ` ✗ Xe.CI.FULL: failure for drm/i915/dp: Joiner cleanups and fix Patchwork
2026-02-06  5:51 ` ✓ Xe.CI.BAT: success for drm/i915/dp: Joiner cleanups and fix (rev2) Patchwork
2026-02-06  6:06 ` ✓ i915.CI.BAT: " Patchwork
2026-02-07  4:20 ` ✗ i915.CI.Full: failure " Patchwork
2026-02-07  8:06 ` ✓ Xe.CI.FULL: success " Patchwork
2026-02-09  5:47 ` ✓ i915.CI.Full: " Patchwork

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=aYSSsZXAl1AkTglZ@ideak-desk.lan \
    --to=imre.deak@intel.com \
    --cc=ankit.k.nautiyal@intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=intel-xe@lists.freedesktop.org \
    --cc=jani.nikula@linux.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 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.