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