summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorImre Deak <imre.deak@intel.com>2026-06-16 23:08:31 +0300
committerImre Deak <imre.deak@intel.com>2026-06-24 19:44:02 +0300
commit67cd7367fd2d07ab6f56fceabbd15e2bc4bc24ed (patch)
tree4c719b157a502f4d631a069169f5d79194b791dd /drivers
parentb9d985949e32010c90727edae74da4334ff82e89 (diff)
downloadlinux-next-67cd7367fd2d07ab6f56fceabbd15e2bc4bc24ed.tar.gz
linux-next-67cd7367fd2d07ab6f56fceabbd15e2bc4bc24ed.zip
drm/i915/dp_link_caps: Move link config tracking to link_caps
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. Reviewed-by: Mika Kahola <mika.kahola@intel.com> Reviewed-by: Luca Coelho <luciano.coelho@intel.com> Signed-off-by: Imre Deak <imre.deak@intel.com> Link: https://patch.msgid.link/20260616200849.3534628-12-imre.deak@intel.com
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/drm/i915/display/intel_display_types.h12
-rw-r--r--drivers/gpu/drm/i915/display/intel_dp_link_caps.c36
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 e1f56fc6c7a5..dcf21aa34eb7 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -1843,18 +1843,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 6a37ba8c35e2..05ec933c7440 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)