> -----Original Message-----
> From: Intel-gfx <[email protected]> On Behalf Of Imre 
> Deak
> Sent: Tuesday, 16 June 2026 23.09
> To: [email protected]; [email protected]
> Subject: [PATCH v2 22/28] drm/i915/dp_link_caps: Add helpers to set max link 
> limits
> 
> Add intel_dp_link_caps_set_max_limits() to set the current maximum link
> limits (max bound over all allowed configurations) through the link caps
> API instead of direct accesses.
> 
> This allows tracking the state internally within the link caps module.
> 

Reviewed-by: Mika Kahola <[email protected]>

> Signed-off-by: Imre Deak <[email protected]>
> ---
>  .../gpu/drm/i915/display/intel_dp_link_caps.c | 35 +++++++++++++++++++
>  .../gpu/drm/i915/display/intel_dp_link_caps.h |  2 ++
>  .../drm/i915/display/intel_dp_link_training.c |  9 +++--
>  3 files changed, 44 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_dp_link_caps.c 
> b/drivers/gpu/drm/i915/display/intel_dp_link_caps.c
> index fa7dabc94ddf1..e568f00720d31 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp_link_caps.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp_link_caps.c
> @@ -151,6 +151,15 @@ static int intel_dp_link_config_lane_count(const struct 
> intel_dp_link_config_ent
>       return 1 << lc->lane_count_exp;
>  }
> 
> +static void set_max_link_limits_no_update(struct intel_dp_link_caps 
> *link_caps,
> +                                       const struct intel_dp_link_config 
> *max_link_limits)
> +{
> +     struct intel_dp *intel_dp = link_caps->dp;
> +
> +     intel_dp->link.max_rate = max_link_limits->rate;
> +     intel_dp->link.max_lane_count = max_link_limits->lane_count;
> +}
> +
>  /**
>   * intel_dp_link_caps_get_max_limits - get the current maximum link limits
>   * @link_caps: link capabilities state
> @@ -181,6 +190,32 @@ void intel_dp_link_caps_get_max_limits(struct 
> intel_dp_link_caps *link_caps,
>       max_link_limits->lane_count = intel_dp->link.max_lane_count;
>  }
> 
> +/**
> + * intel_dp_link_caps_set_max_limits - set the current maximum link limits
> + * @link_caps: link capabilities state
> + * @max_link_limits: new maximum link limits
> + *
> + * Set the current maximum rate and lane count limits to @max_link_limits,
> + * constraining the set of allowed configurations.
> + *
> + * Unlike intel_dp_link_caps_get_max_limits(), the caller must serialize
> + * this call against concurrent queries and updates to @link_caps, in line
> + * with the rest of the API.
> + *
> + * Return:
> + * - %true  if the @link_caps cached max limits value got updated with
> + *          @max_link_limits.
> + * - %false if @max_link_limits is invalid.
> + */
> +bool intel_dp_link_caps_set_max_limits(struct intel_dp_link_caps *link_caps,
> +                                    const struct intel_dp_link_config 
> *max_link_limits)
> +{
> +     set_max_link_limits_no_update(link_caps, max_link_limits);
> +
> +     /* TODO: validate max_link_limits */
> +     return true;
> +}
> +
>  static int intel_dp_link_config_bw(struct intel_dp *intel_dp,
>                                  const struct intel_dp_link_config_entry *lc)
>  {
> diff --git a/drivers/gpu/drm/i915/display/intel_dp_link_caps.h 
> b/drivers/gpu/drm/i915/display/intel_dp_link_caps.h
> index 376dbd9bd5aba..c6c60b7888874 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp_link_caps.h
> +++ b/drivers/gpu/drm/i915/display/intel_dp_link_caps.h
> @@ -29,6 +29,8 @@ void intel_dp_link_config_get(struct intel_dp *intel_dp, 
> int idx, int *link_rate
> 
>  void intel_dp_link_caps_get_max_limits(struct intel_dp_link_caps *link_caps,
>                                      struct intel_dp_link_config 
> *max_link_limits);
> +bool intel_dp_link_caps_set_max_limits(struct intel_dp_link_caps *link_caps,
> +                                    const struct intel_dp_link_config 
> *max_link_limits);
> 
>  bool intel_dp_link_caps_update(struct intel_dp *intel_dp,
>                              const int *rates, int num_rates, int 
> max_lane_count);
> diff --git a/drivers/gpu/drm/i915/display/intel_dp_link_training.c 
> b/drivers/gpu/drm/i915/display/intel_dp_link_training.c
> index 7145f2d0ad6d3..9d9911ebad439 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp_link_training.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp_link_training.c
> @@ -1958,6 +1958,8 @@ static bool reduce_link_params(struct intel_dp 
> *intel_dp, const struct intel_crt
>  static int intel_dp_get_link_train_fallback_values(struct intel_dp *intel_dp,
>                                                  const struct 
> intel_crtc_state *crtc_state)
>  {
> +     struct intel_dp_link_caps *link_caps = intel_dp->link.caps;
> +     struct intel_dp_link_config max_link_limits;
>       int new_link_rate;
>       int new_lane_count;
> 
> @@ -1983,8 +1985,11 @@ static int 
> intel_dp_get_link_train_fallback_values(struct intel_dp *intel_dp,
>              crtc_state->lane_count, crtc_state->port_clock,
>              new_lane_count, new_link_rate);
> 
> -     intel_dp->link.max_rate = new_link_rate;
> -     intel_dp->link.max_lane_count = new_lane_count;
> +     max_link_limits.rate = new_link_rate;
> +     max_link_limits.lane_count = new_lane_count;
> +
> +     /* TODO: handle an update failure */
> +     intel_dp_link_caps_set_max_limits(link_caps, &max_link_limits);
> 
>       return 0;
>  }
> --
> 2.49.1

Reply via email to