> -----Original Message-----
> From: Intel-xe <[email protected]> On Behalf Of Imre
> Deak
> Sent: Wednesday, June 17, 2026 1:39 AM
> To: [email protected]; [email protected]
> Subject: [PATCH v2 28/28] drm/i915/dp_link_caps: Pass link_caps to common
> rate helpers
>
> Pass the link_caps pointer to the common rate helpers in
> intel_dp_link_caps.c, as it holds the state with the relevant information.
>
> Signed-off-by: Imre Deak <[email protected]>
> ---
> drivers/gpu/drm/i915/display/intel_dp.c | 13 ++++++----
> .../gpu/drm/i915/display/intel_dp_link_caps.c | 26 +++++++------------
> .../gpu/drm/i915/display/intel_dp_link_caps.h | 6 ++---
> .../drm/i915/display/intel_dp_link_training.c | 5 ++--
> .../gpu/drm/i915/display/intel_dp_tunnel.c | 2 +-
> 5 files changed, 25 insertions(+), 27 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_dp.c
> b/drivers/gpu/drm/i915/display/intel_dp.c
> index 07266f4e6835b..66346b74b2c04 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -1551,14 +1551,15 @@ intel_dp_max_link_rate(struct intel_dp
> *intel_dp)
> return forced_params.rate;
>
> intel_dp_link_caps_get_max_limits(link_caps, &max_link_limits);
> - len = intel_dp_common_len_rate_limit(intel_dp,
> max_link_limits.rate);
> + len = intel_dp_common_len_rate_limit(link_caps,
> max_link_limits.rate);
>
> - return intel_dp_common_rate(intel_dp, len - 1);
> + return intel_dp_common_rate(link_caps, len - 1);
> }
>
> static int
> intel_dp_min_link_rate(struct intel_dp *intel_dp) {
> + struct intel_dp_link_caps *link_caps = intel_dp->link.caps;
> struct intel_dp_link_config forced_params;
>
> intel_dp_link_caps_get_forced_params(intel_dp->link.caps,
> &forced_params); @@ -1566,7 +1567,7 @@ intel_dp_min_link_rate(struct
> intel_dp *intel_dp)
> if (forced_params.rate)
> return forced_params.rate;
>
> - return intel_dp_common_rate(intel_dp, 0);
> + return intel_dp_common_rate(link_caps, 0);
> }
>
> int intel_dp_rate_select(struct intel_dp *intel_dp, int rate) @@ -1750,6
> +1751,7 @@ intel_dp_compute_link_config_wide(struct intel_dp *intel_dp,
> const struct drm_connector_state
> *conn_state,
> const struct link_config_limits *limits) {
> + struct intel_dp_link_caps *link_caps = intel_dp->link.caps;
> int bpp, i, lane_count, clock = intel_dp_mode_clock(pipe_config,
> conn_state);
> int link_rate, link_avail;
>
> @@ -1760,7 +1762,7 @@ intel_dp_compute_link_config_wide(struct intel_dp
> *intel_dp,
> intel_dp_output_format_link_bpp_x16(pipe_config-
> >output_format, bpp);
>
> for (i = 0; i <
> intel_dp_link_caps_num_common_rates(intel_dp->link.caps); i++) {
> - link_rate = intel_dp_common_rate(intel_dp, i);
> + link_rate = intel_dp_common_rate(link_caps, i);
> if (link_rate < limits->min_rate ||
> link_rate > limits->max_rate)
> continue;
> @@ -1984,12 +1986,13 @@ static int dsc_compute_link_config(struct
> intel_dp *intel_dp,
> const struct link_config_limits *limits,
> int dsc_bpp_x16)
> {
> + struct intel_dp_link_caps *link_caps = intel_dp->link.caps;
> const struct drm_display_mode *adjusted_mode = &pipe_config-
> >hw.adjusted_mode;
> int link_rate, lane_count;
> int i;
>
> for (i = 0; i < intel_dp_link_caps_num_common_rates(intel_dp-
> >link.caps); i++) {
> - link_rate = intel_dp_common_rate(intel_dp, i);
> + link_rate = intel_dp_common_rate(link_caps, i);
> if (link_rate < limits->min_rate || link_rate >
> limits->max_rate)
> continue;
>
> 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 c5701f02fbf69..0917e7f51a26d 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp_link_caps.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp_link_caps.c
> @@ -60,19 +60,16 @@ struct intel_dp_link_caps { };
>
> /* Get length of common rates array potentially limited by max_rate. */ -int
> intel_dp_common_len_rate_limit(const struct intel_dp *intel_dp,
> +int intel_dp_common_len_rate_limit(struct intel_dp_link_caps
> +*link_caps,
> int 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)
> +int intel_dp_common_rate(struct intel_dp_link_caps *link_caps, int
> +index)
> {
> - struct intel_dp_link_caps *link_caps = intel_dp->link.caps;
> - struct intel_display *display = to_intel_display(intel_dp);
> + struct intel_display *display = to_intel_display(link_caps->dp);
>
> if (drm_WARN_ON(display->drm,
> index < 0 || index >= link_caps->num_rates)) @@ -
> 89,11 +86,9 @@ int intel_dp_link_caps_common_rate_idx(struct
> intel_dp_link_caps *link_caps, int }
>
> /* Theoretical max between source and sink */ -int
> intel_dp_max_common_rate(struct intel_dp *intel_dp)
> +int intel_dp_max_common_rate(struct intel_dp_link_caps *link_caps)
> {
> - struct intel_dp_link_caps *link_caps = intel_dp->link.caps;
> -
> - return intel_dp_common_rate(intel_dp, link_caps->num_rates - 1);
> + return intel_dp_common_rate(link_caps, link_caps->num_rates - 1);
> }
>
> int intel_dp_link_caps_num_common_rates(struct intel_dp_link_caps
> *link_caps) @@ -129,17 +124,16 @@ static int forced_lane_count(struct
> intel_dp_link_caps *link_caps)
>
> static int forced_link_rate(struct intel_dp_link_caps *link_caps) {
> - struct intel_dp *intel_dp = link_caps->dp;
> int len;
>
> if (!link_caps->forced_params.rate)
> return 0;
>
> - len = intel_dp_common_len_rate_limit(intel_dp, link_caps-
> >forced_params.rate);
> + len = intel_dp_common_len_rate_limit(link_caps,
> +link_caps->forced_params.rate);
> if (len == 0)
> - return intel_dp_common_rate(intel_dp, 0);
> + return intel_dp_common_rate(link_caps, 0);
>
> - return intel_dp_common_rate(intel_dp, len - 1);
> + return intel_dp_common_rate(link_caps, len - 1);
> }
>
> void intel_dp_link_caps_get_forced_params(struct intel_dp_link_caps
> *link_caps, @@ -152,7 +146,7 @@ void
> intel_dp_link_caps_get_forced_params(struct intel_dp_link_caps *link_caps,
> static int intel_dp_link_config_rate(struct intel_dp_link_caps *link_caps,
> const struct intel_dp_link_config_entry
> *lc)
> {
> - return intel_dp_common_rate(link_caps->dp, lc->link_rate_idx);
> + return intel_dp_common_rate(link_caps, lc->link_rate_idx);
> }
>
> static int intel_dp_link_config_lane_count(const struct
> intel_dp_link_config_entry *lc) @@ -169,7 +163,7 @@ static void
> set_max_link_limits_no_update(struct intel_dp_link_caps *link_caps, static
> void reset_max_link_limits_no_update(struct intel_dp_link_caps *link_caps) {
> struct intel_dp_link_config max_link_limits = {
> - .rate = intel_dp_max_common_rate(link_caps->dp),
> + .rate = intel_dp_max_common_rate(link_caps),
> .lane_count =
> intel_dp_link_caps_max_common_lane_count(link_caps),
> };
>
> 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 9256f02fed11e..af9028e7cb987 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp_link_caps.h
> +++ b/drivers/gpu/drm/i915/display/intel_dp_link_caps.h
> @@ -11,11 +11,11 @@ struct intel_dp;
> struct intel_dp_link_caps;
> struct intel_dp_link_config;
>
> -int intel_dp_common_len_rate_limit(const struct intel_dp *intel_dp,
> +int intel_dp_common_len_rate_limit(struct intel_dp_link_caps
> +*link_caps,
> int max_rate);
> -int intel_dp_common_rate(struct intel_dp *intel_dp, int index);
> +int intel_dp_common_rate(struct intel_dp_link_caps *link_caps, int
> +index);
> int intel_dp_link_caps_common_rate_idx(struct intel_dp_link_caps
> *link_caps, int rate); -int intel_dp_max_common_rate(struct intel_dp
> *intel_dp);
> +int intel_dp_max_common_rate(struct intel_dp_link_caps *link_caps);
> int intel_dp_link_caps_num_common_rates(struct intel_dp_link_caps
> *link_caps); int intel_dp_link_caps_max_common_lane_count(struct
> intel_dp_link_caps *link_caps);
>
> 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 0d4a0bf1dac53..b521dd11b62a7 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp_link_training.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp_link_training.c
> @@ -1898,7 +1898,7 @@ static int reduce_link_rate(struct intel_dp *intel_dp,
> int current_rate)
> if (rate_index <= 0)
> return -1;
>
> - new_rate = intel_dp_common_rate(intel_dp, rate_index - 1);
> + new_rate = intel_dp_common_rate(link_caps, rate_index - 1);
>
> /* TODO: Make switching from UHBR to non-UHBR rates work. */
> if (drm_dp_is_uhbr_rate(current_rate) !=
> drm_dp_is_uhbr_rate(new_rate)) @@ -1925,6 +1925,7 @@ static bool
> reduce_link_params_in_rate_lane_order(struct intel_dp *intel_dp,
> const struct intel_crtc_state
> *crtc_state,
> int *new_link_rate, int
> *new_lane_count) {
> + struct intel_dp_link_caps *link_caps = intel_dp->link.caps;
> int link_rate;
> int lane_count;
>
> @@ -1932,7 +1933,7 @@ static bool
> reduce_link_params_in_rate_lane_order(struct intel_dp *intel_dp,
> link_rate = reduce_link_rate(intel_dp, crtc_state->port_clock);
> if (link_rate < 0) {
> lane_count = reduce_lane_count(intel_dp, crtc_state-
> >lane_count);
> - link_rate = intel_dp_max_common_rate(intel_dp);
> + link_rate = intel_dp_max_common_rate(link_caps);
> }
>
> if (lane_count < 0)
> diff --git a/drivers/gpu/drm/i915/display/intel_dp_tunnel.c
> b/drivers/gpu/drm/i915/display/intel_dp_tunnel.c
> index 9d9d8d04742bc..76e9753766b9f 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp_tunnel.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp_tunnel.c
> @@ -58,7 +58,7 @@ static int kbytes_to_mbits(int kbytes) static int
> get_current_link_bw(struct intel_dp *intel_dp) {
> struct intel_dp_link_caps *link_caps = intel_dp->link.caps;
> - int rate = intel_dp_max_common_rate(intel_dp);
> + int rate = intel_dp_max_common_rate(link_caps);
> int lane_count =
> intel_dp_link_caps_max_common_lane_count(link_caps);
>
> return intel_dp_max_link_data_rate(intel_dp, rate, lane_count);
> --
LGTM,
Reviewed-by: Nemesa Garg <[email protected]>
> 2.49.1