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