> -----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 19/28] drm/i915/dp_link_caps: Track max common lane count 
> in link_caps
> 
> Pass the maximum common lane count to intel_dp_link_caps_update() and
> track it together with the supported link rates. This prepares for
> converting all users of intel_dp_max_common_lane_count() to query the
> value from the link caps module instead.
> 

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

> Signed-off-by: Imre Deak <[email protected]>
> ---
>  drivers/gpu/drm/i915/display/intel_dp.c           | 14 +++++---------
>  drivers/gpu/drm/i915/display/intel_dp_link_caps.c | 13 +++++++++----
>  drivers/gpu/drm/i915/display/intel_dp_link_caps.h |  2 +-
>  3 files changed, 15 insertions(+), 14 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_dp.c 
> b/drivers/gpu/drm/i915/display/intel_dp.c
> index 84640c8394534..2873b2df29f84 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -339,23 +339,19 @@ int intel_dp_max_source_lane_count(struct 
> intel_digital_port *dig_port)
> 
>  /*
>   * Theoretical max between source and sink.
> - * Return %true if the max common lane count changed.
>   */
> -static bool intel_dp_set_max_common_lane_count(struct intel_dp *intel_dp)
> +static int intel_dp_get_max_common_lane_count(struct intel_dp *intel_dp)
>  {
>       struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
>       int source_max = intel_dp_max_source_lane_count(dig_port);
>       int sink_max = intel_dp->max_sink_lane_count;
>       int lane_max = intel_tc_port_max_lane_count(dig_port);
>       int lttpr_max = 
> drm_dp_lttpr_max_lane_count(intel_dp->lttpr_common_caps);
> -     int old_max_common_lane_count = intel_dp->max_common_lane_count;
> 
>       if (lttpr_max)
>               sink_max = min(sink_max, lttpr_max);
> 
> -     intel_dp->max_common_lane_count = min3(source_max, sink_max, lane_max);
> -
> -     return intel_dp->max_common_lane_count != old_max_common_lane_count;
> +     return min3(source_max, sink_max, lane_max);
>  }
> 
>  int intel_dp_max_common_lane_count(struct intel_dp *intel_dp)
> @@ -705,12 +701,12 @@ static bool intel_dp_set_common_link_params(struct 
> intel_dp *intel_dp)
>       int common_rates[DP_MAX_SUPPORTED_RATES];
>       bool params_changed = false;
> 
> -     if (intel_dp_set_max_common_lane_count(intel_dp))
> -             params_changed = true;
> +     intel_dp->max_common_lane_count = 
> intel_dp_get_max_common_lane_count(intel_dp);
> 
>       intel_dp_get_common_rates(intel_dp, common_rates, &num_common_rates);
>       if (intel_dp_link_caps_update(intel_dp,
> -                                   common_rates, num_common_rates))
> +                                   common_rates, num_common_rates,
> +                                   
> intel_dp_get_max_common_lane_count(intel_dp)))
>               params_changed = true;
> 
>       return params_changed;
> 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 e28f7308283ce..bb727bcf4de18 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp_link_caps.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp_link_caps.c
> @@ -25,6 +25,7 @@ struct intel_dp_link_caps {
>       /* Rate, lane count caps common to source and sink. */
>       int num_rates;
>       int rates[DP_MAX_SUPPORTED_RATES];
> +     int max_lane_count;
> 
>       /* common rate,lane_count configs in bw order */
>       int num_configs;
> @@ -169,7 +170,7 @@ static int link_config_cmp_by_bw(const void *a, const 
> void *b, const void *p)
> 
>  /* Return %true if the supported link parameters have changed. */
>  bool intel_dp_link_caps_update(struct intel_dp *intel_dp,
> -                            const int *rates, int num_rates)
> +                            const int *rates, int num_rates, int 
> max_lane_count)
>  {
>       struct intel_dp_link_caps *link_caps = intel_dp->link.caps;
>       struct intel_display *display = to_intel_display(intel_dp);
> @@ -179,13 +180,13 @@ bool intel_dp_link_caps_update(struct intel_dp 
> *intel_dp,
>       int i;
>       int j;
> 
> -     if (drm_WARN_ON(display->drm, 
> !is_power_of_2(intel_dp_max_common_lane_count(intel_dp))))
> +     if (drm_WARN_ON(display->drm, !is_power_of_2(max_lane_count)))
>               return false;
> 
>       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;
> +     num_common_lane_configs = ilog2(max_lane_count) + 1;
> 
>       if (drm_WARN_ON(display->drm, num_rates * num_common_lane_configs >
>                                   ARRAY_SIZE(link_caps->configs)))
> @@ -197,8 +198,13 @@ bool intel_dp_link_caps_update(struct intel_dp *intel_dp,
>           memcmp(rates, link_caps->rates, num_rates * sizeof(rates[0])))
>               link_params_changed = true;
> 
> +     if (max_lane_count != link_caps->max_lane_count)
> +             link_params_changed = true;
> +
>       memcpy(link_caps->rates, rates, num_rates * sizeof(rates[0]));
>       link_caps->num_rates = num_rates;
> +     link_caps->max_lane_count = max_lane_count;
> +
>       link_caps->num_configs = num_rates * num_common_lane_configs;
> 
>       lc = &link_caps->configs[0];
> @@ -216,7 +222,6 @@ bool intel_dp_link_caps_update(struct intel_dp *intel_dp,
>              link_config_cmp_by_bw, NULL,
>              intel_dp);
> 
> -     /* TODO: Also detect a change in the max lane count. */
>       return link_params_changed;
>  }
> 
> 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 7d7d3d11ba3fe..e2f53eb167a8e 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp_link_caps.h
> +++ b/drivers/gpu/drm/i915/display/intel_dp_link_caps.h
> @@ -27,7 +27,7 @@ int intel_dp_link_config_index(struct intel_dp *intel_dp, 
> int link_rate, int lan
>  void intel_dp_link_config_get(struct intel_dp *intel_dp, int idx, int 
> *link_rate, int *lane_count);
> 
>  bool intel_dp_link_caps_update(struct intel_dp *intel_dp,
> -                            const int *rates, int num_rates);
> +                            const int *rates, int num_rates, int 
> max_lane_count);
> 
>  void intel_dp_link_caps_debugfs_add(struct intel_connector *connector);
> 
> --
> 2.49.1

Reply via email to