On Tue, 2026-06-23 at 15:42 +0300, Imre Deak wrote:
> On Tue, Jun 23, 2026 at 01:22:41PM +0300, Luca Coelho wrote:
> > On Tue, 2026-06-16 at 23:08 +0300, Imre Deak wrote:
> > > Move the helpers handling forced link parameters to intel_dp_link_caps.c.
> > > Their functionality is part of the link capability logic and will be
> > > updated to use the link capability state in follow-up changes.
> > > 
> > > Return the forced link rate and lane count through a
> > > struct intel_dp_link_config, which is the canonical way the rest of the
> > > link capability API will also accept and return link configurations.
> > > 
> > > Signed-off-by: Imre Deak <[email protected]>
> > > ---
> > >  drivers/gpu/drm/i915/display/intel_dp.c       | 39 ++++++++++---------
> > >  .../gpu/drm/i915/display/intel_dp_link_caps.c | 22 +++++++++++
> > >  .../gpu/drm/i915/display/intel_dp_link_caps.h |  5 +++
> > >  3 files changed, 47 insertions(+), 19 deletions(-)
> > > 
> > > diff --git a/drivers/gpu/drm/i915/display/intel_dp.c 
> > > b/drivers/gpu/drm/i915/display/intel_dp.c
> > > index a34d3704a5667..7643fe079e15b 100644
> > > --- a/drivers/gpu/drm/i915/display/intel_dp.c
> > > +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> > > @@ -364,17 +364,16 @@ int intel_dp_max_common_lane_count(struct intel_dp 
> > > *intel_dp)
> > >   return intel_dp->max_common_lane_count;
> > >  }
> > >  
> > > -static int forced_lane_count(struct intel_dp *intel_dp)
> > > -{
> > > - return clamp(intel_dp->link.force_lane_count, 1, 
> > > intel_dp_max_common_lane_count(intel_dp));
> > > -}
> > > -
> > >  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 forced_params;
> > >   int lane_count;
> > >  
> > > + intel_dp_link_caps_get_forced_params(link_caps, &forced_params);
> > > +
> > >   if (intel_dp->link.force_lane_count)
> > > -         lane_count = forced_lane_count(intel_dp);
> > > +         lane_count = forced_params.lane_count;
> > >   else
> > >           lane_count = intel_dp->link.max_lane_count;
> > >  
> > > @@ -391,8 +390,12 @@ int intel_dp_max_lane_count(struct intel_dp 
> > > *intel_dp)
> > >  
> > >  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 (intel_dp->link.force_lane_count)
> > > -         return forced_lane_count(intel_dp);
> > > +         return forced_params.lane_count;
> > >  
> > >   return 1;
> > >  }
> > > @@ -1655,23 +1658,17 @@ static void intel_dp_print_rates(struct intel_dp 
> > > *intel_dp)
> > >   drm_dbg_kms(display->drm, "common rates: %s\n", seq_buf_str(&s));
> > >  }
> > >  
> > > -static int forced_link_rate(struct intel_dp *intel_dp)
> > > -{
> > > - int len = intel_dp_common_len_rate_limit(intel_dp, 
> > > intel_dp->link.force_rate);
> > > -
> > > - if (len == 0)
> > > -         return intel_dp_common_rate(intel_dp, 0);
> > > -
> > > - return intel_dp_common_rate(intel_dp, len - 1);
> > > -}
> > > -
> > >  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 forced_params;
> > >   int len;
> > >  
> > > + intel_dp_link_caps_get_forced_params(link_caps, &forced_params);
> > > +
> > >   if (intel_dp->link.force_rate)
> > > -         return forced_link_rate(intel_dp);
> > > +         return forced_params.rate;
> > >  
> > >   len = intel_dp_common_len_rate_limit(intel_dp, intel_dp->link.max_rate);
> > >  
> > > @@ -1681,8 +1678,12 @@ intel_dp_max_link_rate(struct intel_dp *intel_dp)
> > >  static int
> > >  intel_dp_min_link_rate(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 (intel_dp->link.force_rate)
> > > -         return forced_link_rate(intel_dp);
> > > +         return forced_params.rate;
> > >  
> > >   return intel_dp_common_rate(intel_dp, 0);
> > >  }
> > > 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 37ffd714c6a42..1d3a3ff007a03 100644
> > > --- a/drivers/gpu/drm/i915/display/intel_dp_link_caps.c
> > > +++ b/drivers/gpu/drm/i915/display/intel_dp_link_caps.c
> > > @@ -41,6 +41,28 @@ int intel_dp_max_common_rate(struct intel_dp *intel_dp)
> > >   return intel_dp_common_rate(intel_dp, intel_dp->num_common_rates - 1);
> > >  }
> > >  
> > > +static int forced_lane_count(struct intel_dp *intel_dp)
> > > +{
> > > + return clamp(intel_dp->link.force_lane_count, 1, 
> > > intel_dp_max_common_lane_count(intel_dp));
> > > +}
> > > +
> > > +static int forced_link_rate(struct intel_dp *intel_dp)
> > > +{
> > > + int len = intel_dp_common_len_rate_limit(intel_dp, 
> > > intel_dp->link.force_rate);
> > > +
> > > + if (len == 0)
> > > +         return intel_dp_common_rate(intel_dp, 0);
> > > +
> > > + return intel_dp_common_rate(intel_dp, len - 1);
> > > +}
> > > +
> > > +void intel_dp_link_caps_get_forced_params(struct intel_dp_link_caps 
> > > *link_caps,
> > > +                                   struct intel_dp_link_config 
> > > *forced_params)
> > 
> > Is this really _get_? Usually "get" in the function name in my head
> > returns something (which in this case would be the forced_params), but
> > here we're actually setting them.
> 
> The function really just returns the forced params tracked in link_caps
> and the returning happens via the forced_params struct pointer passed to
> the function; so get is the proper name for the function. "set" would
> set the forced params in link_caps.

Okay, fair enough.  This looks a bit clumsy at first, but in any case:

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

--
Cheers,
Luca.


> 
> > 
> > Should it be _set_, or maybe "parse"?
> > 
> > 
> > > +{
> > > + forced_params->rate = forced_link_rate(link_caps->dp);
> > > + forced_params->lane_count = forced_lane_count(link_caps->dp);
> > > +}
> > > +
> > >  struct intel_dp_link_caps *intel_dp_link_caps_init(struct intel_dp 
> > > *intel_dp)
> > >  {
> > >   struct intel_dp_link_caps *link_caps;
> > > diff --git a/drivers/gpu/drm/i915/display/intel_dp_link_caps.h 
> > > b/drivers/gpu/drm/i915/display/intel_dp_link_caps.h
> > > index 3248777d1287f..61dbce86ee3d0 100644
> > > --- a/drivers/gpu/drm/i915/display/intel_dp_link_caps.h
> > > +++ b/drivers/gpu/drm/i915/display/intel_dp_link_caps.h
> > > @@ -5,12 +5,17 @@
> > >  #define __INTEL_DP_LINK_CAPS_H__
> > >  
> > >  struct intel_dp;
> > > +struct intel_dp_link_caps;
> > > +struct intel_dp_link_config;
> > >  
> > >  int intel_dp_common_len_rate_limit(const struct intel_dp *intel_dp,
> > >                              int max_rate);
> > >  int intel_dp_common_rate(struct intel_dp *intel_dp, int index);
> > >  int intel_dp_max_common_rate(struct intel_dp *intel_dp);
> > >  
> > > +void intel_dp_link_caps_get_forced_params(struct intel_dp_link_caps 
> > > *link_caps,
> > > +                                   struct intel_dp_link_config 
> > > *forced_params);
> > > +
> > >  struct intel_dp_link_caps *intel_dp_link_caps_init(struct intel_dp 
> > > *intel_dp);
> > >  void intel_dp_link_caps_cleanup(struct intel_dp_link_caps *link_caps);
> > >  
> > 
> > --
> > Cheers,
> > Luca.

Reply via email to