> -----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
