On Wed, Jan 21, 2026 at 09:23:25AM +0530, Ankit Nautiyal wrote:
> Move the joiner-dependent portion of mst_stream_compute_config() into
> mst_stream_compute_link_for_joined_pipes(), which computes the MST link
> configuration for a specific num_joined_pipes.
> 
> Signed-off-by: Ankit Nautiyal <[email protected]>

Reviewed-by: Imre Deak <[email protected]>

> ---
>  drivers/gpu/drm/i915/display/intel_dp_mst.c | 72 ++++++++++++++-------
>  1 file changed, 47 insertions(+), 25 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c 
> b/drivers/gpu/drm/i915/display/intel_dp_mst.c
> index 3b1825161d18..e9cfce00efcc 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
> @@ -602,40 +602,19 @@ mst_stream_compute_config_limits(struct intel_dp 
> *intel_dp,
>                                                           dsc);
>  }
>  
> -static int mst_stream_compute_config(struct intel_encoder *encoder,
> -                                  struct intel_crtc_state *pipe_config,
> -                                  struct drm_connector_state *conn_state)
> +static int mst_stream_compute_link_for_joined_pipes(struct intel_encoder 
> *encoder,
> +                                                 struct intel_crtc_state 
> *pipe_config,
> +                                                 struct drm_connector_state 
> *conn_state,
> +                                                 int num_joined_pipes)
>  {
>       struct intel_display *display = to_intel_display(encoder);
> -     struct intel_atomic_state *state = 
> to_intel_atomic_state(conn_state->state);
> -     struct intel_crtc *crtc = to_intel_crtc(pipe_config->uapi.crtc);
>       struct intel_dp *intel_dp = to_primary_dp(encoder);
>       struct intel_connector *connector =
>               to_intel_connector(conn_state->connector);
> -     const struct drm_display_mode *adjusted_mode =
> -             &pipe_config->hw.adjusted_mode;
>       struct link_config_limits limits;
>       bool dsc_needed, joiner_needs_dsc;
> -     int num_joined_pipes;
>       int ret = 0;
>  
> -     if (pipe_config->fec_enable &&
> -         !intel_dp_supports_fec(intel_dp, connector, pipe_config))
> -             return -EINVAL;
> -
> -     if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN)
> -             return -EINVAL;
> -
> -     pipe_config->sink_format = INTEL_OUTPUT_FORMAT_RGB;
> -     pipe_config->output_format = INTEL_OUTPUT_FORMAT_RGB;
> -     pipe_config->has_pch_encoder = false;
> -
> -     num_joined_pipes = intel_dp_num_joined_pipes(intel_dp, connector,
> -                                                  
> adjusted_mode->crtc_hdisplay,
> -                                                  adjusted_mode->crtc_clock);
> -     if (num_joined_pipes > 1)
> -             pipe_config->joiner_pipes = GENMASK(crtc->pipe + 
> num_joined_pipes - 1, crtc->pipe);
> -
>       joiner_needs_dsc = intel_dp_joiner_needs_dsc(display, num_joined_pipes);
>  
>       dsc_needed = joiner_needs_dsc || intel_dp->force_dsc_en ||
> @@ -699,6 +678,49 @@ static int mst_stream_compute_config(struct 
> intel_encoder *encoder,
>       if (ret)
>               return ret;
>  
> +     return 0;
> +}
> +
> +static int mst_stream_compute_config(struct intel_encoder *encoder,
> +                                  struct intel_crtc_state *pipe_config,
> +                                  struct drm_connector_state *conn_state)
> +{
> +     struct intel_display *display = to_intel_display(encoder);
> +     struct intel_atomic_state *state = 
> to_intel_atomic_state(conn_state->state);
> +     struct intel_crtc *crtc = to_intel_crtc(pipe_config->uapi.crtc);
> +     struct intel_dp *intel_dp = to_primary_dp(encoder);
> +     struct intel_connector *connector =
> +             to_intel_connector(conn_state->connector);
> +     const struct drm_display_mode *adjusted_mode =
> +             &pipe_config->hw.adjusted_mode;
> +     int num_joined_pipes;
> +     int ret = 0;
> +
> +     if (pipe_config->fec_enable &&
> +         !intel_dp_supports_fec(intel_dp, connector, pipe_config))
> +             return -EINVAL;
> +
> +     if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN)
> +             return -EINVAL;
> +
> +     pipe_config->sink_format = INTEL_OUTPUT_FORMAT_RGB;
> +     pipe_config->output_format = INTEL_OUTPUT_FORMAT_RGB;
> +     pipe_config->has_pch_encoder = false;
> +
> +     num_joined_pipes = intel_dp_num_joined_pipes(intel_dp, connector,
> +                                                  
> adjusted_mode->crtc_hdisplay,
> +                                                  adjusted_mode->crtc_clock);
> +
> +     if (num_joined_pipes > 1)
> +             pipe_config->joiner_pipes = GENMASK(crtc->pipe + 
> num_joined_pipes - 1, crtc->pipe);
> +
> +     ret = mst_stream_compute_link_for_joined_pipes(encoder,
> +                                                    pipe_config,
> +                                                    conn_state,
> +                                                    num_joined_pipes);
> +     if (ret)
> +             return ret;
> +
>       pipe_config->limited_color_range =
>               intel_dp_limited_color_range(pipe_config, conn_state);
>  
> -- 
> 2.45.2
> 

Reply via email to