Move tracking of the link configurations from struct intel_dp to struct intel_dp_link_caps.
Previous changes moved the helpers operating on configurations to the link caps module, so the state can now be kept internal to that module. Signed-off-by: Imre Deak <[email protected]> --- .../drm/i915/display/intel_display_types.h | 12 ------- .../gpu/drm/i915/display/intel_dp_link_caps.c | 36 ++++++++++++++----- 2 files changed, 27 insertions(+), 21 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h index c84ef29529373..443bb3b5e9fa3 100644 --- a/drivers/gpu/drm/i915/display/intel_display_types.h +++ b/drivers/gpu/drm/i915/display/intel_display_types.h @@ -1841,18 +1841,6 @@ struct intel_dp { struct { /* TODO: move the rest of link specific fields to here */ bool active; - /* common rate,lane_count configs in bw order */ - int num_configs; -#define INTEL_DP_MAX_LANE_COUNT 4 -#define INTEL_DP_MAX_SUPPORTED_LANE_CONFIGS (ilog2(INTEL_DP_MAX_LANE_COUNT) + 1) -#define INTEL_DP_LANE_COUNT_EXP_BITS order_base_2(INTEL_DP_MAX_SUPPORTED_LANE_CONFIGS) -#define INTEL_DP_LINK_RATE_IDX_BITS (BITS_PER_TYPE(u8) - INTEL_DP_LANE_COUNT_EXP_BITS) -#define INTEL_DP_MAX_LINK_CONFIGS (DP_MAX_SUPPORTED_RATES * \ - INTEL_DP_MAX_SUPPORTED_LANE_CONFIGS) - struct intel_dp_link_config_entry { - 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]; /* Max lane count for the current link */ int max_lane_count; /* Max rate for the current link */ 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 6a37ba8c35e27..05ec933c74407 100644 --- a/drivers/gpu/drm/i915/display/intel_dp_link_caps.c +++ b/drivers/gpu/drm/i915/display/intel_dp_link_caps.c @@ -3,10 +3,12 @@ * Copyright © 2026 Intel Corporation */ +#include <linux/bitops.h> #include <linux/debugfs.h> #include <linux/log2.h> #include <linux/slab.h> #include <linux/sort.h> +#include <linux/types.h> #include <drm/drm_print.h> @@ -18,6 +20,19 @@ struct intel_dp_link_caps { struct intel_dp *dp; + /* common rate,lane_count configs in bw order */ + int num_configs; +#define INTEL_DP_MAX_LANE_COUNT 4 +#define INTEL_DP_MAX_SUPPORTED_LANE_CONFIGS (ilog2(INTEL_DP_MAX_LANE_COUNT) + 1) +#define INTEL_DP_LANE_COUNT_EXP_BITS order_base_2(INTEL_DP_MAX_SUPPORTED_LANE_CONFIGS) +#define INTEL_DP_LINK_RATE_IDX_BITS (BITS_PER_TYPE(u8) - INTEL_DP_LANE_COUNT_EXP_BITS) +#define INTEL_DP_MAX_LINK_CONFIGS (DP_MAX_SUPPORTED_RATES * \ + INTEL_DP_MAX_SUPPORTED_LANE_CONFIGS) + struct intel_dp_link_config_entry { + 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]; + /* * Forced parameters requested via debugfs. Remains set across sink * disconnects. @@ -118,6 +133,7 @@ static int link_config_cmp_by_bw(const void *a, const void *b, const void *p) void intel_dp_link_config_init(struct intel_dp *intel_dp) { + struct intel_dp_link_caps *link_caps = intel_dp->link.caps; struct intel_display *display = to_intel_display(intel_dp); struct intel_dp_link_config_entry *lc; int num_common_lane_configs; @@ -130,12 +146,12 @@ void intel_dp_link_config_init(struct intel_dp *intel_dp) num_common_lane_configs = ilog2(intel_dp_max_common_lane_count(intel_dp)) + 1; if (drm_WARN_ON(display->drm, intel_dp->num_common_rates * num_common_lane_configs > - ARRAY_SIZE(intel_dp->link.configs))) + ARRAY_SIZE(link_caps->configs))) return; - intel_dp->link.num_configs = intel_dp->num_common_rates * num_common_lane_configs; + link_caps->num_configs = intel_dp->num_common_rates * num_common_lane_configs; - lc = &intel_dp->link.configs[0]; + lc = &link_caps->configs[0]; for (i = 0; i < intel_dp->num_common_rates; i++) { for (j = 0; j < num_common_lane_configs; j++) { lc->lane_count_exp = j; @@ -145,21 +161,22 @@ void intel_dp_link_config_init(struct intel_dp *intel_dp) } } - sort_r(intel_dp->link.configs, intel_dp->link.num_configs, - sizeof(intel_dp->link.configs[0]), + sort_r(link_caps->configs, link_caps->num_configs, + sizeof(link_caps->configs[0]), link_config_cmp_by_bw, NULL, intel_dp); } void intel_dp_link_config_get(struct intel_dp *intel_dp, int idx, int *link_rate, int *lane_count) { + struct intel_dp_link_caps *link_caps = intel_dp->link.caps; struct intel_display *display = to_intel_display(intel_dp); const struct intel_dp_link_config_entry *lc; - if (drm_WARN_ON(display->drm, idx < 0 || idx >= intel_dp->link.num_configs)) + if (drm_WARN_ON(display->drm, idx < 0 || idx >= link_caps->num_configs)) idx = 0; - lc = &intel_dp->link.configs[idx]; + lc = &link_caps->configs[idx]; *link_rate = intel_dp_link_config_rate(intel_dp, lc); *lane_count = intel_dp_link_config_lane_count(lc); @@ -167,13 +184,14 @@ 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, link_rate); int lane_count_exp = ilog2(lane_count); int i; - for (i = 0; i < intel_dp->link.num_configs; i++) { - const struct intel_dp_link_config_entry *lc = &intel_dp->link.configs[i]; + for (i = 0; i < link_caps->num_configs; i++) { + const struct intel_dp_link_config_entry *lc = &link_caps->configs[i]; if (lc->lane_count_exp == lane_count_exp && lc->link_rate_idx == link_rate_idx) -- 2.49.1
