On Tue, 2026-06-16 at 23:08 +0300, Imre Deak wrote:
> 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]>
> ---

Reviewed-by: Luca Coelho <[email protected]>

--
Cheers,
Luca.



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

Reply via email to