Re: [PATCH 2/2] drm/i915: Explain the magic numbers for AUX SYNC/precharge length

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 2023-03-30 at 07:22 +0000, Hogander, Jouni wrote:
> On Wed, 2023-03-29 at 20:24 +0300, Ville Syrjala wrote:
> > From: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx>
> > 
> > Replace the hardcoded final numbers in the AUX SYNC/precharge
> > setup, and derive those from numbers from the (e)DP specs.
> > 
> > The new functions can serve as the single point of truth for
> > the number of SYNC pulses we use.
> > 
> > Cc: Jouni Högander <jouni.hogander@xxxxxxxxx>
> > Signed-off-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx>

Let's take care of that io/fast wake calculation separately. I think we
want to have these in as currently fast wake SYNC pulse count is not
according to spec.

Reviewed-by: Jouni Högander <jouni.hogander@xxxxxxxxx>

> > ---
> >  drivers/gpu/drm/i915/display/intel_dp_aux.c | 32
> > +++++++++++++++++++--
> >  1 file changed, 29 insertions(+), 3 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/display/intel_dp_aux.c
> > b/drivers/gpu/drm/i915/display/intel_dp_aux.c
> > index ad0aac707219..374492293392 100644
> > --- a/drivers/gpu/drm/i915/display/intel_dp_aux.c
> > +++ b/drivers/gpu/drm/i915/display/intel_dp_aux.c
> > @@ -118,6 +118,32 @@ static u32 skl_get_aux_clock_divider(struct
> > intel_dp *intel_dp, int index)
> >         return index ? 0 : 1;
> >  }
> >  
> > +static int intel_dp_aux_sync_len(void)
> > +{
> > +       int precharge = 16; /* 10-16 */
> > +       int preamble = 16;
> > +
> > +       return precharge + preamble;
> > +}
> > +
> > +static int intel_dp_aux_fw_sync_len(void)
> > +{
> > +       int precharge = 16; /* 10-16 */
> > +       int preamble = 8;
> > +
> > +       return precharge + preamble;
> > +}
> 
> What do you think if we move this into intel_dp_aux.h and use that to
> calculate io wake time and fast wake time in
> intel_psr.c:_compute_psr2_wake_time.
> 
> > +
> > +static int g4x_dp_aux_precharge_len(void)
> > +{
> > +       int precharge_min = 10;
> > +       int preamble = 16;
> > +
> > +       /* HW wants the length of the extra precharge in 2us units
> > */
> > +       return (intel_dp_aux_sync_len() -
> > +               precharge_min - preamble) / 2;
> > +}
> > +
> >  static u32 g4x_get_aux_send_ctl(struct intel_dp *intel_dp,
> >                                 int send_bytes,
> >                                 u32 aux_clock_divider)
> > @@ -140,7 +166,7 @@ static u32 g4x_get_aux_send_ctl(struct intel_dp
> > *intel_dp,
> >                timeout |
> >                DP_AUX_CH_CTL_RECEIVE_ERROR |
> >                (send_bytes << DP_AUX_CH_CTL_MESSAGE_SIZE_SHIFT) |
> > -              (3 << DP_AUX_CH_CTL_PRECHARGE_2US_SHIFT) |
> > +              (g4x_dp_aux_precharge_len() <<
> > DP_AUX_CH_CTL_PRECHARGE_2US_SHIFT) |
> >                (aux_clock_divider <<
> > DP_AUX_CH_CTL_BIT_CLOCK_2X_SHIFT);
> >  }
> >  
> > @@ -164,8 +190,8 @@ static u32 skl_get_aux_send_ctl(struct intel_dp
> > *intel_dp,
> >               DP_AUX_CH_CTL_TIME_OUT_MAX |
> >               DP_AUX_CH_CTL_RECEIVE_ERROR |
> >               (send_bytes << DP_AUX_CH_CTL_MESSAGE_SIZE_SHIFT) |
> > -             DP_AUX_CH_CTL_FW_SYNC_PULSE_SKL(24) |
> > -             DP_AUX_CH_CTL_SYNC_PULSE_SKL(32);
> > +            
> > DP_AUX_CH_CTL_FW_SYNC_PULSE_SKL(intel_dp_aux_fw_sync_len()) |
> > +            
> > DP_AUX_CH_CTL_SYNC_PULSE_SKL(intel_dp_aux_sync_len());
> >  
> >         if (intel_tc_port_in_tbt_alt_mode(dig_port))
> >                 ret |= DP_AUX_CH_CTL_TBT_IO;
> 





[Index of Archives]     [AMD Graphics]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux