drm/i915/dp: Remove min/max link config limits

Remove the min/max rate and lane count fields from struct
link_config_limits after all state computation is converted to use the
configuration filter.

A simple min/max range cannot fully describe the valid configuration
set once individual configurations are disabled (for example by
fallback), as it may allow combinations that are not actually valid.
The configuration filter, on the other hand, always represents a
consistent set of valid configurations.

Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
Signed-off-by: Imre Deak <imre.deak@intel.com>
Link: https://patch.msgid.link/20260701153204.4124150-23-imre.deak@intel.com
This commit is contained in:
Imre Deak 2026-07-01 18:31:51 +03:00
parent b66fe0e1bc
commit 77265110e0
5 changed files with 2 additions and 119 deletions

View File

@ -354,44 +354,6 @@ static int intel_dp_get_max_common_lane_count(struct intel_dp *intel_dp)
return min3(source_max, sink_max, lane_max);
}
static int intel_dp_max_lane_count(struct intel_dp *intel_dp)
{
struct intel_dp_link_caps *link_caps = intel_dp->link.caps;
struct intel_dp_link_config max_link_limits;
struct intel_dp_link_config forced_params;
int lane_count;
intel_dp_link_caps_get_max_limits(link_caps, &max_link_limits);
intel_dp_link_caps_get_forced_params(link_caps, &forced_params);
if (forced_params.lane_count)
lane_count = forced_params.lane_count;
else
lane_count = max_link_limits.lane_count;
switch (lane_count) {
case 1:
case 2:
case 4:
return lane_count;
default:
MISSING_CASE(lane_count);
return 1;
}
}
static int intel_dp_min_lane_count(struct intel_dp *intel_dp)
{
struct intel_dp_link_config forced_params;
intel_dp_link_caps_get_forced_params(intel_dp->link.caps, &forced_params);
if (forced_params.lane_count)
return forced_params.lane_count;
return 1;
}
int intel_dp_link_bw_overhead(int link_clock, int lane_count, int hdisplay,
int dsc_slice_count, int bpp_x16, unsigned long flags)
{
@ -1540,39 +1502,6 @@ static void intel_dp_print_rates(struct intel_dp *intel_dp)
intel_dp_link_caps_print_common_rates(intel_dp->link.caps);
}
static int
intel_dp_max_link_rate(struct intel_dp *intel_dp)
{
struct intel_dp_link_caps *link_caps = intel_dp->link.caps;
struct intel_dp_link_config max_link_limits;
struct intel_dp_link_config forced_params;
int len;
intel_dp_link_caps_get_forced_params(link_caps, &forced_params);
if (forced_params.rate)
return forced_params.rate;
intel_dp_link_caps_get_max_limits(link_caps, &max_link_limits);
len = intel_dp_common_len_rate_limit(link_caps, max_link_limits.rate);
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);
if (forced_params.rate)
return forced_params.rate;
return intel_dp_common_rate(link_caps, 0);
}
int intel_dp_rate_select(struct intel_dp *intel_dp, int rate)
{
struct intel_display *display = to_intel_display(intel_dp);
@ -2672,18 +2601,6 @@ intel_dp_compute_config_limits(struct intel_dp *intel_dp,
struct intel_connector *connector =
to_intel_connector(conn_state->connector);
/*
* TODO: Remove the following min/max rate and lane count setup, once
* all users are converted to use link_config_mask instead.
*/
limits->min_rate = intel_dp_min_link_rate(intel_dp);
limits->max_rate = intel_dp_max_link_rate(intel_dp);
limits->min_rate = min(limits->min_rate, limits->max_rate);
limits->min_lane_count = intel_dp_min_lane_count(intel_dp);
limits->max_lane_count = intel_dp_max_lane_count(intel_dp);
limits->link_config_filter = INTEL_DP_LINK_CAPS_FILTER_ALL;
limits->pipe.min_bpp = intel_dp_min_bpp(crtc_state->output_format);
@ -2763,9 +2680,6 @@ intel_dp_compute_config_limits(struct intel_dp *intel_dp,
* configuration, and typically on older panels these
* values correspond to the native resolution of the panel.
*/
limits->min_lane_count = limits->max_lane_count;
limits->min_rate = limits->max_rate;
if (!intel_dp_get_connector_max_link_config(connector, limits, &max_config))
return false;

View File

@ -28,12 +28,6 @@ struct intel_dp_link_config;
struct intel_encoder;
struct link_config_limits {
/*
* TODO: Remove the following min/max rate and lane count limits
* once all users are converted to use link_config_mask instead.
*/
int min_rate, max_rate;
int min_lane_count, max_lane_count;
struct intel_dp_link_caps_filter link_config_filter;
struct {
/* Uncompressed DSC input or link output bpp in 1 bpp units */

View File

@ -242,8 +242,8 @@ intel_dp_link_caps_connector_fallback_order(bool is_mst)
}
/* Get length of common rates array potentially limited by max_rate. */
int intel_dp_common_len_rate_limit(struct intel_dp_link_caps *link_caps,
int max_rate)
static int intel_dp_common_len_rate_limit(struct intel_dp_link_caps *link_caps,
int max_rate)
{
return intel_dp_rate_limit_len(link_caps->rates,
link_caps->num_rates, max_rate);

View File

@ -119,8 +119,6 @@ intel_dp_link_caps_connector_compute_order(struct intel_connector *connector);
struct intel_dp_link_caps_order
intel_dp_link_caps_connector_fallback_order(bool is_mst);
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_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_link_caps *link_caps);

View File

@ -114,7 +114,6 @@ bool intel_dp_test_compute_config(struct intel_connector *connector,
struct link_config_limits *limits)
{
struct intel_dp *intel_dp = intel_attached_dp(connector);
struct intel_dp_link_caps *link_caps = intel_dp->link.caps;
struct intel_display *display = to_intel_display(intel_dp);
/* For DP Compliance we override the computed bpp for the pipe */
@ -130,28 +129,6 @@ bool intel_dp_test_compute_config(struct intel_connector *connector,
/* Use values requested by Compliance Test Request */
if (intel_dp->compliance.test_type == DP_TEST_LINK_TRAINING) {
int index;
/*
* TODO: Remove the following min/max link limit setup
* after converting to use the link configuration filter
* instead in limits.
*/
/* Validate the compliance test data since max values
* might have changed due to link train fallback.
*/
if (intel_dp_link_params_valid(intel_dp, intel_dp->compliance.test_link_rate,
intel_dp->compliance.test_lane_count)) {
index = intel_dp_link_caps_common_rate_idx(link_caps,
intel_dp->compliance.test_link_rate);
if (index >= 0) {
limits->min_rate = intel_dp->compliance.test_link_rate;
limits->max_rate = intel_dp->compliance.test_link_rate;
}
limits->min_lane_count = intel_dp->compliance.test_lane_count;
limits->max_lane_count = intel_dp->compliance.test_lane_count;
}
if (!set_filter_for_link_params(connector,
intel_dp->compliance.test_link_rate,
intel_dp->compliance.test_lane_count,