[PATCH v2 04/12] drm/i915/dp_mst: Update the total link slot count early

Luca Coelho luca at coelho.fi
Tue May 6 10:07:12 UTC 2025


On Mon, 2025-04-28 at 16:31 +0300, Imre Deak wrote:
> A follow up change will check a selected bpp's BW requirement in
> intel_dp_mtp_tu_compute_config(), however that requires the total link
> slot count to be up-to-date. The latter in turn depends on the channel
> encoding and hence the link rate used, so it can be set after the
> link rate used is selected.
> 
> This also allows simplifying mst_stream_update_slots(), do that as well,
> moving the function definition before its use.
> 
> Cc: Jani Nikula <jani.nikula at intel.com>
> Signed-off-by: Imre Deak <imre.deak at intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_dp_mst.c | 36 +++++++--------------
>  1 file changed, 11 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 8e1ed3b38217d..59afb550cd0cc 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
> @@ -261,6 +261,15 @@ static void intel_dp_mst_compute_min_hblank(struct intel_crtc_state *crtc_state,
>  	crtc_state->min_hblank = hblank;
>  }
>  
> +static void mst_stream_update_slots(const struct intel_crtc_state *crtc_state,
> +				    struct drm_dp_mst_topology_state *topology_state)
> +{
> +	u8 link_coding_cap = intel_dp_is_uhbr(crtc_state) ?
> +		DP_CAP_ANSI_128B132B : DP_CAP_ANSI_8B10B;
> +
> +	drm_dp_mst_update_slots(topology_state, link_coding_cap);
> +}
> +
>  int intel_dp_mtp_tu_compute_config(struct intel_dp *intel_dp,
>  				   struct intel_crtc_state *crtc_state,
>  				   struct drm_connector_state *conn_state,
> @@ -296,6 +305,8 @@ int intel_dp_mtp_tu_compute_config(struct intel_dp *intel_dp,
>  
>  		mst_state->pbn_div = drm_dp_get_vc_payload_bw(crtc_state->port_clock,
>  							      crtc_state->lane_count);
> +
> +		mst_stream_update_slots(crtc_state, mst_state);
>  	}
>  
>  	if (dsc) {
> @@ -513,27 +524,6 @@ static int mst_stream_dsc_compute_link_config(struct intel_dp *intel_dp,
>  					      fxp_q4_from_int(1), true);
>  }
>  
> -static int mst_stream_update_slots(struct intel_dp *intel_dp,
> -				   struct intel_crtc_state *crtc_state,
> -				   struct drm_connector_state *conn_state)
> -{
> -	struct intel_display *display = to_intel_display(intel_dp);
> -	struct drm_dp_mst_topology_mgr *mgr = &intel_dp->mst.mgr;
> -	struct drm_dp_mst_topology_state *topology_state;
> -	u8 link_coding_cap = intel_dp_is_uhbr(crtc_state) ?
> -		DP_CAP_ANSI_128B132B : DP_CAP_ANSI_8B10B;
> -
> -	topology_state = drm_atomic_get_mst_topology_state(conn_state->state, mgr);
> -	if (IS_ERR(topology_state)) {
> -		drm_dbg_kms(display->drm, "slot update failed\n");
> -		return PTR_ERR(topology_state);
> -	}
> -
> -	drm_dp_mst_update_slots(topology_state, link_coding_cap);
> -
> -	return 0;
> -}
> -
>  static int mode_hblank_period_ns(const struct drm_display_mode *mode)
>  {
>  	return DIV_ROUND_CLOSEST_ULL(mul_u32_u32(mode->htotal - mode->hdisplay,
> @@ -736,10 +726,6 @@ static int mst_stream_compute_config(struct intel_encoder *encoder,
>  						  pipe_config->dp_m_n.tu);
>  	}
>  
> -	if (ret)
> -		return ret;
> -
> -	ret = mst_stream_update_slots(intel_dp, pipe_config, conn_state);
>  	if (ret)
>  		return ret;
>  

Reviewed-by: Luca Coelho <luciano.coelho at intel.com>

--
Cheers,
Luca.


More information about the Intel-xe mailing list