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