diff mbox series

drm/i915/display: Implement Wa_14015648006

Message ID 20221221132118.1822697-1-jouni.hogander@intel.com (mailing list archive)
State New, archived
Headers show
Series drm/i915/display: Implement Wa_14015648006 | expand

Commit Message

Hogander, Jouni Dec. 21, 2022, 1:21 p.m. UTC
Add 4th pipe and extend TGL Wa_16013835468 to support ADLP, MTL and
DG2 and all TGL steppings.

BSpec: 54369, 55378, 66624

Cc: Matt Roper <matthew.d.roper@intel.com>
Cc: José Roberto de Souza <jose.souza@intel.com>
Cc: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>

Signed-off-by: Mika Kahola <mika.kahola@intel.com>
Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
---
 drivers/gpu/drm/i915/display/intel_psr.c | 20 ++++++++++++++------
 drivers/gpu/drm/i915/i915_reg.h          |  1 +
 2 files changed, 15 insertions(+), 6 deletions(-)

Comments

Matt Roper Jan. 4, 2023, 12:40 a.m. UTC | #1
On Wed, Dec 21, 2022 at 03:21:18PM +0200, Jouni Högander wrote:
> Add 4th pipe and extend TGL Wa_16013835468 to support ADLP, MTL and
> DG2 and all TGL steppings.
> 
> BSpec: 54369, 55378, 66624
> 
> Cc: Matt Roper <matthew.d.roper@intel.com>
> Cc: José Roberto de Souza <jose.souza@intel.com>
> Cc: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
> 
> Signed-off-by: Mika Kahola <mika.kahola@intel.com>
> Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_psr.c | 20 ++++++++++++++------
>  drivers/gpu/drm/i915/i915_reg.h          |  1 +
>  2 files changed, 15 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c
> index 9820e5fdd087..0d01b8a7a75d 100644
> --- a/drivers/gpu/drm/i915/display/intel_psr.c
> +++ b/drivers/gpu/drm/i915/display/intel_psr.c
> @@ -1112,6 +1112,8 @@ static u32 wa_16013835468_bit_get(struct intel_dp *intel_dp)
>  		return LATENCY_REPORTING_REMOVED_PIPE_B;
>  	case PIPE_C:
>  		return LATENCY_REPORTING_REMOVED_PIPE_C;
> +	case PIPE_D:
> +		return LATENCY_REPORTING_REMOVED_PIPE_D;
>  	default:
>  		MISSING_CASE(intel_dp->psr.pipe);
>  		return 0;
> @@ -1197,9 +1199,12 @@ static void intel_psr_enable_source(struct intel_dp *intel_dp,
>  			intel_de_rmw(dev_priv, CLKGATE_DIS_MISC, 0,
>  				     CLKGATE_DIS_MISC_DMASC_GATING_DIS);
>  
> -		/* Wa_16013835468:tgl[b0+], dg1 */
> -		if (IS_TGL_DISPLAY_STEP(dev_priv, STEP_B0, STEP_FOREVER) ||
> -		    IS_DG1(dev_priv)) {
> +		/*
> +		 * Wa_16013835468:tgl[b0+], dg1,
> +		 * Wa_14015648006:adlp[a0+], mtl[a0], dg2, tgl[a0+]
> +		 */
> +		if (IS_MTL_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0) ||
> +		    IS_DISPLAY_VER(dev_priv, 12, 13)) {

There's another thread where we're discussing possibly dropping all of
the platform/stepping information from workaround comments, but this is
a great supporting example for why the detailed comments are causing
more confusion than they're worth.  The code condition includes RKL and
ADL-S, whereas the comment does not mention them.  In this case the code
is correct and the comment is incomplete.

If we move forward with Lucas' patch, this should just turn into

        /*
         * Wa_16013835468
         * Wa_14015648006
         */

and let the code speak for itself about which platform(s) it covers.


As for the workaround itself here, the existing implementation of
Wa_16013835468 is in a 'if (intel_dp->psr.psr2_enabled)' but it looks
like the description of the new Wa_14015648006 is also supposed to apply
to PSR1 as well.  Do we need to lift these out of that conditional
block?


Matt

>  			u16 vtotal, vblank;
>  
>  			vtotal = crtc_state->uapi.adjusted_mode.crtc_vtotal -
> @@ -1378,9 +1383,12 @@ static void intel_psr_disable_locked(struct intel_dp *intel_dp)
>  			intel_de_rmw(dev_priv, CLKGATE_DIS_MISC,
>  				     CLKGATE_DIS_MISC_DMASC_GATING_DIS, 0);
>  
> -		/* Wa_16013835468:tgl[b0+], dg1 */
> -		if (IS_TGL_DISPLAY_STEP(dev_priv, STEP_B0, STEP_FOREVER) ||
> -		    IS_DG1(dev_priv))
> +		/*
> +		 * Wa_16013835468:tgl[b0+], dg1,
> +		 * Wa_14015648006:adlp[a0+], mtl[a0], dg2, tgl[a0+]
> +		 */
> +		if (IS_MTL_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0) ||
> +		    IS_DISPLAY_VER(dev_priv, 12, 13))
>  			intel_de_rmw(dev_priv, GEN8_CHICKEN_DCPR_1,
>  				     wa_16013835468_bit_get(intel_dp), 0);
>  	}
> diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
> index cef9418beec0..a70a1b6e6a15 100644
> --- a/drivers/gpu/drm/i915/i915_reg.h
> +++ b/drivers/gpu/drm/i915/i915_reg.h
> @@ -5737,6 +5737,7 @@
>  #define  RESET_PCH_HANDSHAKE_ENABLE	REG_BIT(4)
>  
>  #define GEN8_CHICKEN_DCPR_1			_MMIO(0x46430)
> +#define   LATENCY_REPORTING_REMOVED_PIPE_D	REG_BIT(31)
>  #define   SKL_SELECT_ALTERNATE_DC_EXIT		REG_BIT(30)
>  #define   LATENCY_REPORTING_REMOVED_PIPE_C	REG_BIT(25)
>  #define   LATENCY_REPORTING_REMOVED_PIPE_B	REG_BIT(24)
> -- 
> 2.34.1
>
Hogander, Jouni Jan. 4, 2023, 9:05 a.m. UTC | #2
On Tue, 2023-01-03 at 16:40 -0800, Matt Roper wrote:
> On Wed, Dec 21, 2022 at 03:21:18PM +0200, Jouni Högander wrote:
> > Add 4th pipe and extend TGL Wa_16013835468 to support ADLP, MTL and
> > DG2 and all TGL steppings.
> > 
> > BSpec: 54369, 55378, 66624
> > 
> > Cc: Matt Roper <matthew.d.roper@intel.com>
> > Cc: José Roberto de Souza <jose.souza@intel.com>
> > Cc: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
> > 
> > Signed-off-by: Mika Kahola <mika.kahola@intel.com>
> > Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
> > ---
> >  drivers/gpu/drm/i915/display/intel_psr.c | 20 ++++++++++++++------
> >  drivers/gpu/drm/i915/i915_reg.h          |  1 +
> >  2 files changed, 15 insertions(+), 6 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/display/intel_psr.c
> > b/drivers/gpu/drm/i915/display/intel_psr.c
> > index 9820e5fdd087..0d01b8a7a75d 100644
> > --- a/drivers/gpu/drm/i915/display/intel_psr.c
> > +++ b/drivers/gpu/drm/i915/display/intel_psr.c
> > @@ -1112,6 +1112,8 @@ static u32 wa_16013835468_bit_get(struct
> > intel_dp *intel_dp)
> >                 return LATENCY_REPORTING_REMOVED_PIPE_B;
> >         case PIPE_C:
> >                 return LATENCY_REPORTING_REMOVED_PIPE_C;
> > +       case PIPE_D:
> > +               return LATENCY_REPORTING_REMOVED_PIPE_D;
> >         default:
> >                 MISSING_CASE(intel_dp->psr.pipe);
> >                 return 0;
> > @@ -1197,9 +1199,12 @@ static void intel_psr_enable_source(struct
> > intel_dp *intel_dp,
> >                         intel_de_rmw(dev_priv, CLKGATE_DIS_MISC, 0,
> >                                     
> > CLKGATE_DIS_MISC_DMASC_GATING_DIS);
> >  
> > -               /* Wa_16013835468:tgl[b0+], dg1 */
> > -               if (IS_TGL_DISPLAY_STEP(dev_priv, STEP_B0,
> > STEP_FOREVER) ||
> > -                   IS_DG1(dev_priv)) {
> > +               /*
> > +                * Wa_16013835468:tgl[b0+], dg1,
> > +                * Wa_14015648006:adlp[a0+], mtl[a0], dg2, tgl[a0+]
> > +                */
> > +               if (IS_MTL_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0)
> > ||
> > +                   IS_DISPLAY_VER(dev_priv, 12, 13)) {
> 
> There's another thread where we're discussing possibly dropping all
> of
> the platform/stepping information from workaround comments, but this
> is
> a great supporting example for why the detailed comments are causing
> more confusion than they're worth.  The code condition includes RKL
> and
> ADL-S, whereas the comment does not mention them.  In this case the
> code
> is correct and the comment is incomplete.
> 
> If we move forward with Lucas' patch, this should just turn into
> 
>         /*
>          * Wa_16013835468
>          * Wa_14015648006
>          */
> 
> and let the code speak for itself about which platform(s) it covers.
> 
> 
> As for the workaround itself here, the existing implementation of
> Wa_16013835468 is in a 'if (intel_dp->psr.psr2_enabled)' but it looks
> like the description of the new Wa_14015648006 is also supposed to
> apply
> to PSR1 as well.  Do we need to lift these out of that conditional
> block?

You are right. It should be applied for PSR1 as well.

Thank you for all your comments. Addressed all of them in new version.
Please check.

> 
> 
> Matt
> 
> >                         u16 vtotal, vblank;
> >  
> >                         vtotal = crtc_state-
> > >uapi.adjusted_mode.crtc_vtotal -
> > @@ -1378,9 +1383,12 @@ static void intel_psr_disable_locked(struct
> > intel_dp *intel_dp)
> >                         intel_de_rmw(dev_priv, CLKGATE_DIS_MISC,
> >                                     
> > CLKGATE_DIS_MISC_DMASC_GATING_DIS, 0);
> >  
> > -               /* Wa_16013835468:tgl[b0+], dg1 */
> > -               if (IS_TGL_DISPLAY_STEP(dev_priv, STEP_B0,
> > STEP_FOREVER) ||
> > -                   IS_DG1(dev_priv))
> > +               /*
> > +                * Wa_16013835468:tgl[b0+], dg1,
> > +                * Wa_14015648006:adlp[a0+], mtl[a0], dg2, tgl[a0+]
> > +                */
> > +               if (IS_MTL_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0)
> > ||
> > +                   IS_DISPLAY_VER(dev_priv, 12, 13))
> >                         intel_de_rmw(dev_priv, GEN8_CHICKEN_DCPR_1,
> >                                     
> > wa_16013835468_bit_get(intel_dp), 0);
> >         }
> > diff --git a/drivers/gpu/drm/i915/i915_reg.h
> > b/drivers/gpu/drm/i915/i915_reg.h
> > index cef9418beec0..a70a1b6e6a15 100644
> > --- a/drivers/gpu/drm/i915/i915_reg.h
> > +++ b/drivers/gpu/drm/i915/i915_reg.h
> > @@ -5737,6 +5737,7 @@
> >  #define  RESET_PCH_HANDSHAKE_ENABLE    REG_BIT(4)
> >  
> >  #define GEN8_CHICKEN_DCPR_1                    _MMIO(0x46430)
> > +#define   LATENCY_REPORTING_REMOVED_PIPE_D     REG_BIT(31)
> >  #define   SKL_SELECT_ALTERNATE_DC_EXIT         REG_BIT(30)
> >  #define   LATENCY_REPORTING_REMOVED_PIPE_C     REG_BIT(25)
> >  #define   LATENCY_REPORTING_REMOVED_PIPE_B     REG_BIT(24)
> > -- 
> > 2.34.1
> > 
>
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 9820e5fdd087..0d01b8a7a75d 100644
--- a/drivers/gpu/drm/i915/display/intel_psr.c
+++ b/drivers/gpu/drm/i915/display/intel_psr.c
@@ -1112,6 +1112,8 @@  static u32 wa_16013835468_bit_get(struct intel_dp *intel_dp)
 		return LATENCY_REPORTING_REMOVED_PIPE_B;
 	case PIPE_C:
 		return LATENCY_REPORTING_REMOVED_PIPE_C;
+	case PIPE_D:
+		return LATENCY_REPORTING_REMOVED_PIPE_D;
 	default:
 		MISSING_CASE(intel_dp->psr.pipe);
 		return 0;
@@ -1197,9 +1199,12 @@  static void intel_psr_enable_source(struct intel_dp *intel_dp,
 			intel_de_rmw(dev_priv, CLKGATE_DIS_MISC, 0,
 				     CLKGATE_DIS_MISC_DMASC_GATING_DIS);
 
-		/* Wa_16013835468:tgl[b0+], dg1 */
-		if (IS_TGL_DISPLAY_STEP(dev_priv, STEP_B0, STEP_FOREVER) ||
-		    IS_DG1(dev_priv)) {
+		/*
+		 * Wa_16013835468:tgl[b0+], dg1,
+		 * Wa_14015648006:adlp[a0+], mtl[a0], dg2, tgl[a0+]
+		 */
+		if (IS_MTL_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0) ||
+		    IS_DISPLAY_VER(dev_priv, 12, 13)) {
 			u16 vtotal, vblank;
 
 			vtotal = crtc_state->uapi.adjusted_mode.crtc_vtotal -
@@ -1378,9 +1383,12 @@  static void intel_psr_disable_locked(struct intel_dp *intel_dp)
 			intel_de_rmw(dev_priv, CLKGATE_DIS_MISC,
 				     CLKGATE_DIS_MISC_DMASC_GATING_DIS, 0);
 
-		/* Wa_16013835468:tgl[b0+], dg1 */
-		if (IS_TGL_DISPLAY_STEP(dev_priv, STEP_B0, STEP_FOREVER) ||
-		    IS_DG1(dev_priv))
+		/*
+		 * Wa_16013835468:tgl[b0+], dg1,
+		 * Wa_14015648006:adlp[a0+], mtl[a0], dg2, tgl[a0+]
+		 */
+		if (IS_MTL_DISPLAY_STEP(dev_priv, STEP_A0, STEP_B0) ||
+		    IS_DISPLAY_VER(dev_priv, 12, 13))
 			intel_de_rmw(dev_priv, GEN8_CHICKEN_DCPR_1,
 				     wa_16013835468_bit_get(intel_dp), 0);
 	}
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index cef9418beec0..a70a1b6e6a15 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -5737,6 +5737,7 @@ 
 #define  RESET_PCH_HANDSHAKE_ENABLE	REG_BIT(4)
 
 #define GEN8_CHICKEN_DCPR_1			_MMIO(0x46430)
+#define   LATENCY_REPORTING_REMOVED_PIPE_D	REG_BIT(31)
 #define   SKL_SELECT_ALTERNATE_DC_EXIT		REG_BIT(30)
 #define   LATENCY_REPORTING_REMOVED_PIPE_C	REG_BIT(25)
 #define   LATENCY_REPORTING_REMOVED_PIPE_B	REG_BIT(24)