diff mbox series

[v5,4/5] drm/i915/psr: Add IO buffer wake times for LunarLake and beyond

Message ID 20240308110039.3900838-5-jouni.hogander@intel.com (mailing list archive)
State New, archived
Headers show
Series IO and fast wake lines calculation and increase fw sync length | expand

Commit Message

Hogander, Jouni March 8, 2024, 11 a.m. UTC
IO buffer wake time used for IO wake calculation is dependent on port clock
on LunarLake and beyond. Take this into account in get_io_buffer_wake_time.

Bspec: 65450

v2: add own io_wake_time helper for LunarLake

Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
---
 drivers/gpu/drm/i915/display/intel_psr.c | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

Comments

Ville Syrjälä March 8, 2024, 2:39 p.m. UTC | #1
On Fri, Mar 08, 2024 at 01:00:38PM +0200, Jouni Högander wrote:
> IO buffer wake time used for IO wake calculation is dependent on port clock
> on LunarLake and beyond. Take this into account in get_io_buffer_wake_time.
> 
> Bspec: 65450
> 
> v2: add own io_wake_time helper for LunarLake
> 
> Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_psr.c | 14 +++++++++++++-
>  1 file changed, 13 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c
> index 747761efa4be..e3daaf05d640 100644
> --- a/drivers/gpu/drm/i915/display/intel_psr.c
> +++ b/drivers/gpu/drm/i915/display/intel_psr.c
> @@ -1165,11 +1165,23 @@ static int tgl_io_buffer_wake_time(void)
>  	return 10;
>  }
>  
> +static int lnl_io_buffer_wake_time(int port_clock)
> +{
> +	if (port_clock > 270000)
> +		return 10;
> +	else if (port_clock > 162000)
> +		return 11;
> +	else
> +		return 15;
> +}

These numbers are only listed in the MTL section of bspec. There
is nothing like this in the LNL PHY power section AFAICS.

> +
>  static int io_buffer_wake_time(const struct intel_crtc_state *crtc_state)
>  {
>  	struct drm_i915_private *i915 = to_i915(crtc_state->uapi.crtc->dev);
>  
> -	if (DISPLAY_VER(i915) >= 12)
> +	if (DISPLAY_VER(i915) >= 20)
> +		return lnl_io_buffer_wake_time(crtc_state->port_clock);
> +	else if (DISPLAY_VER(i915) >= 12)
>  		return tgl_io_buffer_wake_time();
>  	else
>  		return skl_io_buffer_wake_time();
> -- 
> 2.34.1
Ville Syrjälä March 8, 2024, 2:56 p.m. UTC | #2
On Fri, Mar 08, 2024 at 04:39:55PM +0200, Ville Syrjälä wrote:
> On Fri, Mar 08, 2024 at 01:00:38PM +0200, Jouni Högander wrote:
> > IO buffer wake time used for IO wake calculation is dependent on port clock
> > on LunarLake and beyond. Take this into account in get_io_buffer_wake_time.
> > 
> > Bspec: 65450
> > 
> > v2: add own io_wake_time helper for LunarLake
> > 
> > Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
> > ---
> >  drivers/gpu/drm/i915/display/intel_psr.c | 14 +++++++++++++-
> >  1 file changed, 13 insertions(+), 1 deletion(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c
> > index 747761efa4be..e3daaf05d640 100644
> > --- a/drivers/gpu/drm/i915/display/intel_psr.c
> > +++ b/drivers/gpu/drm/i915/display/intel_psr.c
> > @@ -1165,11 +1165,23 @@ static int tgl_io_buffer_wake_time(void)
> >  	return 10;
> >  }
> >  
> > +static int lnl_io_buffer_wake_time(int port_clock)
> > +{
> > +	if (port_clock > 270000)
> > +		return 10;
> > +	else if (port_clock > 162000)
> > +		return 11;
> > +	else
> > +		return 15;
> > +}
> 
> These numbers are only listed in the MTL section of bspec. There
> is nothing like this in the LNL PHY power section AFAICS.

Windows appears to use fixed 12us here.

> 
> > +
> >  static int io_buffer_wake_time(const struct intel_crtc_state *crtc_state)
> >  {
> >  	struct drm_i915_private *i915 = to_i915(crtc_state->uapi.crtc->dev);
> >  
> > -	if (DISPLAY_VER(i915) >= 12)
> > +	if (DISPLAY_VER(i915) >= 20)
> > +		return lnl_io_buffer_wake_time(crtc_state->port_clock);
> > +	else if (DISPLAY_VER(i915) >= 12)
> >  		return tgl_io_buffer_wake_time();
> >  	else
> >  		return skl_io_buffer_wake_time();
> > -- 
> > 2.34.1
> 
> -- 
> Ville Syrjälä
> Intel
Hogander, Jouni March 12, 2024, 11:30 a.m. UTC | #3
On Fri, 2024-03-08 at 16:56 +0200, Ville Syrjälä wrote:
> On Fri, Mar 08, 2024 at 04:39:55PM +0200, Ville Syrjälä wrote:
> > On Fri, Mar 08, 2024 at 01:00:38PM +0200, Jouni Högander wrote:
> > > IO buffer wake time used for IO wake calculation is dependent on
> > > port clock
> > > on LunarLake and beyond. Take this into account in
> > > get_io_buffer_wake_time.
> > > 
> > > Bspec: 65450
> > > 
> > > v2: add own io_wake_time helper for LunarLake
> > > 
> > > Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
> > > ---
> > >  drivers/gpu/drm/i915/display/intel_psr.c | 14 +++++++++++++-
> > >  1 file changed, 13 insertions(+), 1 deletion(-)
> > > 
> > > diff --git a/drivers/gpu/drm/i915/display/intel_psr.c
> > > b/drivers/gpu/drm/i915/display/intel_psr.c
> > > index 747761efa4be..e3daaf05d640 100644
> > > --- a/drivers/gpu/drm/i915/display/intel_psr.c
> > > +++ b/drivers/gpu/drm/i915/display/intel_psr.c
> > > @@ -1165,11 +1165,23 @@ static int tgl_io_buffer_wake_time(void)
> > >         return 10;
> > >  }
> > >  
> > > +static int lnl_io_buffer_wake_time(int port_clock)
> > > +{
> > > +       if (port_clock > 270000)
> > > +               return 10;
> > > +       else if (port_clock > 162000)
> > > +               return 11;
> > > +       else
> > > +               return 15;
> > > +}
> > 
> > These numbers are only listed in the MTL section of bspec. There
> > is nothing like this in the LNL PHY power section AFAICS.
> 
> Windows appears to use fixed 12us here.

Referring our offline discussion with HW folks: It seems 10 us is ok
for LNL as well. What do you think if we just drop this patch as it
seems to be incorrect?

Can you also provide you rb to patch 5 in this set?

BR,

Jouni Högander

> 
> > 
> > > +
> > >  static int io_buffer_wake_time(const struct intel_crtc_state
> > > *crtc_state)
> > >  {
> > >         struct drm_i915_private *i915 = to_i915(crtc_state-
> > > >uapi.crtc->dev);
> > >  
> > > -       if (DISPLAY_VER(i915) >= 12)
> > > +       if (DISPLAY_VER(i915) >= 20)
> > > +               return lnl_io_buffer_wake_time(crtc_state-
> > > >port_clock);
> > > +       else if (DISPLAY_VER(i915) >= 12)
> > >                 return tgl_io_buffer_wake_time();
> > >         else
> > >                 return skl_io_buffer_wake_time();
> > > -- 
> > > 2.34.1
> > 
> > -- 
> > Ville Syrjälä
> > Intel
>
diff mbox series

Patch

diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c
index 747761efa4be..e3daaf05d640 100644
--- a/drivers/gpu/drm/i915/display/intel_psr.c
+++ b/drivers/gpu/drm/i915/display/intel_psr.c
@@ -1165,11 +1165,23 @@  static int tgl_io_buffer_wake_time(void)
 	return 10;
 }
 
+static int lnl_io_buffer_wake_time(int port_clock)
+{
+	if (port_clock > 270000)
+		return 10;
+	else if (port_clock > 162000)
+		return 11;
+	else
+		return 15;
+}
+
 static int io_buffer_wake_time(const struct intel_crtc_state *crtc_state)
 {
 	struct drm_i915_private *i915 = to_i915(crtc_state->uapi.crtc->dev);
 
-	if (DISPLAY_VER(i915) >= 12)
+	if (DISPLAY_VER(i915) >= 20)
+		return lnl_io_buffer_wake_time(crtc_state->port_clock);
+	else if (DISPLAY_VER(i915) >= 12)
 		return tgl_io_buffer_wake_time();
 	else
 		return skl_io_buffer_wake_time();