> -----Original Message-----
> From: Intel-xe <[email protected]> On Behalf Of Imre Deak
> Sent: Tuesday, 16 June 2026 23.09
> To: [email protected]; [email protected]
> Subject: [PATCH v2 18/28] drm/i915/dp_link_caps: Move tracking of common 
> rates to link_caps struct
> 
> Now that all users access the supported link rates via helpers, move
> tracking of these rates from struct intel_dp to the link_caps state.
> 

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

> Signed-off-by: Imre Deak <[email protected]>
> ---
>  .../drm/i915/display/intel_display_types.h    |  3 --
>  .../gpu/drm/i915/display/intel_dp_link_caps.c | 51 +++++++++++--------
>  2 files changed, 29 insertions(+), 25 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h 
> b/drivers/gpu/drm/i915/display/intel_display_types.h
> index 443bb3b5e9fa3..dd43c7ee8f143 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_types.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_types.h
> @@ -1834,9 +1834,6 @@ struct intel_dp {
>       bool use_rate_select;
>       /* Max sink lane count as reported by DP_MAX_LANE_COUNT */
>       int max_sink_lane_count;
> -     /* intersection of source and sink rates */
> -     int num_common_rates;
> -     int common_rates[DP_MAX_SUPPORTED_RATES];
>       int max_common_lane_count;
>       struct {
>               /* TODO: move the rest of link specific fields to here */
> 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 84d9636f4adb4..e28f7308283ce 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp_link_caps.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp_link_caps.c
> @@ -22,6 +22,10 @@
>  struct intel_dp_link_caps {
>       struct intel_dp *dp;
> 
> +     /* Rate, lane count caps common to source and sink. */
> +     int num_rates;
> +     int rates[DP_MAX_SUPPORTED_RATES];
> +
>       /* common rate,lane_count configs in bw order */
>       int num_configs;
>  #define INTEL_DP_MAX_LANE_COUNT                      4
> @@ -31,6 +35,7 @@ struct intel_dp_link_caps {
>  #define INTEL_DP_MAX_LINK_CONFIGS            (DP_MAX_SUPPORTED_RATES * \
>                                                
> INTEL_DP_MAX_SUPPORTED_LANE_CONFIGS)
>       struct intel_dp_link_config_entry {
> +             /* index into rates[] */
>               u8 link_rate_idx:INTEL_DP_LINK_RATE_IDX_BITS;
>               u8 lane_count_exp:INTEL_DP_LANE_COUNT_EXP_BITS;
>       } configs[INTEL_DP_MAX_LINK_CONFIGS];
> @@ -46,50 +51,52 @@ struct intel_dp_link_caps {
>  int intel_dp_common_len_rate_limit(const struct intel_dp *intel_dp,
>                                  int max_rate)
>  {
> -     return intel_dp_rate_limit_len(intel_dp->common_rates,
> -                                    intel_dp->num_common_rates, max_rate);
> +     struct intel_dp_link_caps *link_caps = intel_dp->link.caps;
> +
> +     return intel_dp_rate_limit_len(link_caps->rates,
> +                                    link_caps->num_rates, max_rate);
>  }
> 
>  int intel_dp_common_rate(struct intel_dp *intel_dp, int index)
>  {
> +     struct intel_dp_link_caps *link_caps = intel_dp->link.caps;
>       struct intel_display *display = to_intel_display(intel_dp);
> 
>       if (drm_WARN_ON(display->drm,
> -                     index < 0 || index >= intel_dp->num_common_rates))
> +                     index < 0 || index >= link_caps->num_rates))
>               return 162000;
> 
> -     return intel_dp->common_rates[index];
> +     return link_caps->rates[index];
>  }
> 
>  int intel_dp_link_caps_common_rate_idx(struct intel_dp_link_caps *link_caps, 
> int rate)
>  {
> -     struct intel_dp *intel_dp = link_caps->dp;
> -
> -     return intel_dp_rate_index(intel_dp->common_rates,
> -                                intel_dp->num_common_rates,
> +     return intel_dp_rate_index(link_caps->rates,
> +                                link_caps->num_rates,
>                                  rate);
>  }
> 
>  /* Theoretical max between source and sink */
>  int intel_dp_max_common_rate(struct intel_dp *intel_dp)
>  {
> -     return intel_dp_common_rate(intel_dp, intel_dp->num_common_rates - 1);
> +     struct intel_dp_link_caps *link_caps = intel_dp->link.caps;
> +
> +     return intel_dp_common_rate(intel_dp, link_caps->num_rates - 1);
>  }
> 
>  int intel_dp_link_caps_num_common_rates(struct intel_dp_link_caps *link_caps)
>  {
> -     return link_caps->dp->num_common_rates;
> +     return link_caps->num_rates;
>  }
> 
>  void intel_dp_link_caps_print_common_rates(struct intel_dp_link_caps 
> *link_caps)
>  {
> -     struct intel_dp *intel_dp = link_caps->dp;
> -     struct intel_display *display = to_intel_display(intel_dp);
> +     struct intel_display *display = to_intel_display(link_caps->dp);
>       DECLARE_SEQ_BUF(s, 128);
>       int i;
> 
> -     for (i = 0; i < intel_dp->num_common_rates; i++)
> -             seq_buf_printf(&s, "%s%d", i ? ", " : "", 
> intel_dp->common_rates[i]);
> +     for (i = 0; i < link_caps->num_rates; i++)
> +             seq_buf_printf(&s, "%s%d", i ? ", " : "", link_caps->rates[i]);
> 
>       drm_dbg_kms(display->drm, "common rates: %s\n", seq_buf_str(&s));
>  }
> @@ -175,7 +182,7 @@ bool intel_dp_link_caps_update(struct intel_dp *intel_dp,
>       if (drm_WARN_ON(display->drm, 
> !is_power_of_2(intel_dp_max_common_lane_count(intel_dp))))
>               return false;
> 
> -     if (drm_WARN_ON(display->drm, num_rates > 
> ARRAY_SIZE(intel_dp->common_rates)))
> +     if (drm_WARN_ON(display->drm, num_rates > ARRAY_SIZE(link_caps->rates)))
>               return false;
> 
>       num_common_lane_configs = 
> ilog2(intel_dp_max_common_lane_count(intel_dp)) + 1;
> @@ -185,17 +192,17 @@ bool intel_dp_link_caps_update(struct intel_dp 
> *intel_dp,
>               return false;
> 
>       /* TODO: Add a struct containing both rates and number of rates. */
> -     static_assert(__same_type(rates[0], intel_dp->common_rates[0]));
> -     if (num_rates != intel_dp->num_common_rates ||
> -         memcmp(rates, intel_dp->common_rates, num_rates * sizeof(rates[0])))
> +     static_assert(__same_type(rates[0], link_caps->rates[0]));
> +     if (num_rates != link_caps->num_rates ||
> +         memcmp(rates, link_caps->rates, num_rates * sizeof(rates[0])))
>               link_params_changed = true;
> 
> -     memcpy(intel_dp->common_rates, rates, num_rates * sizeof(rates[0]));
> -     intel_dp->num_common_rates = num_rates;
> +     memcpy(link_caps->rates, rates, num_rates * sizeof(rates[0]));
> +     link_caps->num_rates = num_rates;
>       link_caps->num_configs = num_rates * num_common_lane_configs;
> 
>       lc = &link_caps->configs[0];
> -     for (i = 0; i < intel_dp->num_common_rates; i++) {
> +     for (i = 0; i < link_caps->num_rates; i++) {
>               for (j = 0; j < num_common_lane_configs; j++) {
>                       lc->lane_count_exp = j;
>                       lc->link_rate_idx = i;
> @@ -231,7 +238,7 @@ void intel_dp_link_config_get(struct intel_dp *intel_dp, 
> int idx, int *link_rate
>  int intel_dp_link_config_index(struct intel_dp *intel_dp, int link_rate, int 
> lane_count)
>  {
>       struct intel_dp_link_caps *link_caps = intel_dp->link.caps;
> -     int link_rate_idx = intel_dp_rate_index(intel_dp->common_rates, 
> intel_dp->num_common_rates,
> +     int link_rate_idx = intel_dp_rate_index(link_caps->rates, 
> link_caps->num_rates,
>                                               link_rate);
>       int lane_count_exp = ilog2(lane_count);
>       int i;
> --
> 2.49.1

Reply via email to