diff mbox

drm/i915: implement WADPOClockGatingDisable for LPT

Message ID 1366233349-18956-1-git-send-email-przanoni@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Paulo Zanoni April 17, 2013, 9:15 p.m. UTC
From: Paulo Zanoni <paulo.r.zanoni@intel.com>

This should prevent mode set failures on LPT.

Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
---
 drivers/gpu/drm/i915/intel_pm.c |    5 +++++
 1 file changed, 5 insertions(+)

Comments

Paulo Zanoni May 6, 2013, 8:23 p.m. UTC | #1
2013/4/17 Paulo Zanoni <przanoni@gmail.com>:
> From: Paulo Zanoni <paulo.r.zanoni@intel.com>
>
> This should prevent mode set failures on LPT.
>

Ping?

> Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_pm.c |    5 +++++
>  1 file changed, 5 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
> index 413877d..15ff0ac 100644
> --- a/drivers/gpu/drm/i915/intel_pm.c
> +++ b/drivers/gpu/drm/i915/intel_pm.c
> @@ -3758,6 +3758,11 @@ static void lpt_init_clock_gating(struct drm_device *dev)
>                 I915_WRITE(SOUTH_DSPCLK_GATE_D,
>                            I915_READ(SOUTH_DSPCLK_GATE_D) |
>                            PCH_LP_PARTITION_LEVEL_DISABLE);
> +
> +       /* WADPOClockGatingDisable */
> +       I915_WRITE(_TRANSA_CHICKEN1,
> +                  I915_READ(_TRANSA_CHICKEN1) |
> +                  TRANS_CHICKEN1_DP0UNIT_GC_DISABLE);
>  }
>
>  static void haswell_init_clock_gating(struct drm_device *dev)
> --
> 1.7.10.4
>
Lespiau, Damien May 7, 2013, 1:10 p.m. UTC | #2
On Wed, Apr 17, 2013 at 06:15:49PM -0300, Paulo Zanoni wrote:
> From: Paulo Zanoni <paulo.r.zanoni@intel.com>
> 
> This should prevent mode set failures on LPT.
> 
> Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_pm.c |    5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
> index 413877d..15ff0ac 100644
> --- a/drivers/gpu/drm/i915/intel_pm.c
> +++ b/drivers/gpu/drm/i915/intel_pm.c
> @@ -3758,6 +3758,11 @@ static void lpt_init_clock_gating(struct drm_device *dev)
>  		I915_WRITE(SOUTH_DSPCLK_GATE_D,
>  			   I915_READ(SOUTH_DSPCLK_GATE_D) |
>  			   PCH_LP_PARTITION_LEVEL_DISABLE);
> +
> +	/* WADPOClockGatingDisable */
> +	I915_WRITE(_TRANSA_CHICKEN1,
> +		   I915_READ(_TRANSA_CHICKEN1) |
> +		   TRANS_CHICKEN1_DP0UNIT_GC_DISABLE);

Don't you need to do that for each pipe? (like the cpt_ version does)?
Lespiau, Damien May 7, 2013, 1:30 p.m. UTC | #3
On Tue, May 07, 2013 at 02:10:05PM +0100, Damien Lespiau wrote:
> On Wed, Apr 17, 2013 at 06:15:49PM -0300, Paulo Zanoni wrote:
> > From: Paulo Zanoni <paulo.r.zanoni@intel.com>
> > 
> > This should prevent mode set failures on LPT.
> > 
> > Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
> > ---
> >  drivers/gpu/drm/i915/intel_pm.c |    5 +++++
> >  1 file changed, 5 insertions(+)
> > 
> > diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
> > index 413877d..15ff0ac 100644
> > --- a/drivers/gpu/drm/i915/intel_pm.c
> > +++ b/drivers/gpu/drm/i915/intel_pm.c
> > @@ -3758,6 +3758,11 @@ static void lpt_init_clock_gating(struct drm_device *dev)
> >  		I915_WRITE(SOUTH_DSPCLK_GATE_D,
> >  			   I915_READ(SOUTH_DSPCLK_GATE_D) |
> >  			   PCH_LP_PARTITION_LEVEL_DISABLE);
> > +
> > +	/* WADPOClockGatingDisable */
> > +	I915_WRITE(_TRANSA_CHICKEN1,
> > +		   I915_READ(_TRANSA_CHICKEN1) |
> > +		   TRANS_CHICKEN1_DP0UNIT_GC_DISABLE);
> 
> Don't you need to do that for each pipe? (like the cpt_ version does)?

Also it's DP0 (zero), not DPO.
Paulo Zanoni May 7, 2013, 1:46 p.m. UTC | #4
2013/5/7 Damien Lespiau <damien.lespiau@intel.com>:
> On Tue, May 07, 2013 at 02:10:05PM +0100, Damien Lespiau wrote:
>> On Wed, Apr 17, 2013 at 06:15:49PM -0300, Paulo Zanoni wrote:
>> > From: Paulo Zanoni <paulo.r.zanoni@intel.com>
>> >
>> > This should prevent mode set failures on LPT.
>> >
>> > Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
>> > ---
>> >  drivers/gpu/drm/i915/intel_pm.c |    5 +++++
>> >  1 file changed, 5 insertions(+)
>> >
>> > diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
>> > index 413877d..15ff0ac 100644
>> > --- a/drivers/gpu/drm/i915/intel_pm.c
>> > +++ b/drivers/gpu/drm/i915/intel_pm.c
>> > @@ -3758,6 +3758,11 @@ static void lpt_init_clock_gating(struct drm_device *dev)
>> >             I915_WRITE(SOUTH_DSPCLK_GATE_D,
>> >                        I915_READ(SOUTH_DSPCLK_GATE_D) |
>> >                        PCH_LP_PARTITION_LEVEL_DISABLE);
>> > +
>> > +   /* WADPOClockGatingDisable */
>> > +   I915_WRITE(_TRANSA_CHICKEN1,
>> > +              I915_READ(_TRANSA_CHICKEN1) |
>> > +              TRANS_CHICKEN1_DP0UNIT_GC_DISABLE);
>>
>> Don't you need to do that for each pipe? (like the cpt_ version does)?

It's once per PCH transcoder, but there's just one PCH transcoder on
LPT, so we do it once.

>
> Also it's DP0 (zero), not DPO.

Our documentation is a little inconsistent regarding this, but I guess
the correct name probably has the letter O instead of Zero. The
description inside the LPT TRANS_CHICKEN1 register uses
WADPOClockGatingDisable and the register bit is called "dpounit Gating
Disable". The "BUN" email I got consistently says DPO instead of DP0.
On the CPT/PPT documentation you'll see WADP0ClockGatingDisable but
even the register bit is called "dpounit" and not "dp0unit". So the
only place where I see Zero is on the WA name written inside the CPT
documentation, all the other places use the letter O.

>
> --
> Damien
Lespiau, Damien May 7, 2013, 2:40 p.m. UTC | #5
On Tue, May 07, 2013 at 10:46:01AM -0300, Paulo Zanoni wrote:
> 2013/5/7 Damien Lespiau <damien.lespiau@intel.com>:
> > On Tue, May 07, 2013 at 02:10:05PM +0100, Damien Lespiau wrote:
> >> On Wed, Apr 17, 2013 at 06:15:49PM -0300, Paulo Zanoni wrote:
> >> > From: Paulo Zanoni <paulo.r.zanoni@intel.com>
> >> >
> >> > This should prevent mode set failures on LPT.
> >> >
> >> > Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
> >> > ---
> >> >  drivers/gpu/drm/i915/intel_pm.c |    5 +++++
> >> >  1 file changed, 5 insertions(+)
> >> >
> >> > diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
> >> > index 413877d..15ff0ac 100644
> >> > --- a/drivers/gpu/drm/i915/intel_pm.c
> >> > +++ b/drivers/gpu/drm/i915/intel_pm.c
> >> > @@ -3758,6 +3758,11 @@ static void lpt_init_clock_gating(struct drm_device *dev)
> >> >             I915_WRITE(SOUTH_DSPCLK_GATE_D,
> >> >                        I915_READ(SOUTH_DSPCLK_GATE_D) |
> >> >                        PCH_LP_PARTITION_LEVEL_DISABLE);
> >> > +
> >> > +   /* WADPOClockGatingDisable */
> >> > +   I915_WRITE(_TRANSA_CHICKEN1,
> >> > +              I915_READ(_TRANSA_CHICKEN1) |
> >> > +              TRANS_CHICKEN1_DP0UNIT_GC_DISABLE);
> >>
> >> Don't you need to do that for each pipe? (like the cpt_ version does)?
> 
> It's once per PCH transcoder, but there's just one PCH transcoder on
> LPT, so we do it once.

Of course, I was looking at the wrong doc.

> 
> >
> > Also it's DP0 (zero), not DPO.
> 
> Our documentation is a little inconsistent regarding this, but I guess
> the correct name probably has the letter O instead of Zero. The
> description inside the LPT TRANS_CHICKEN1 register uses
> WADPOClockGatingDisable and the register bit is called "dpounit Gating
> Disable". The "BUN" email I got consistently says DPO instead of DP0.
> On the CPT/PPT documentation you'll see WADP0ClockGatingDisable but
> even the register bit is called "dpounit" and not "dp0unit". So the
> only place where I see Zero is on the WA name written inside the CPT
> documentation, all the other places use the letter O.

Conviced (but then we should rename the cpt_ comment for consistency)

Reviewed-by: Damien Lespiau <damien.lespiau@intel.com>
Lespiau, Damien May 8, 2013, 12:54 p.m. UTC | #6
On Tue, May 07, 2013 at 03:40:21PM +0100, Damien Lespiau wrote:
> On Tue, May 07, 2013 at 10:46:01AM -0300, Paulo Zanoni wrote:
> > 2013/5/7 Damien Lespiau <damien.lespiau@intel.com>:
> > > On Tue, May 07, 2013 at 02:10:05PM +0100, Damien Lespiau wrote:
> > >> On Wed, Apr 17, 2013 at 06:15:49PM -0300, Paulo Zanoni wrote:
> > >> > From: Paulo Zanoni <paulo.r.zanoni@intel.com>
> > >> >
> > >> > This should prevent mode set failures on LPT.
> > >> >
> > >> > Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
> > >> > ---
> > >> >  drivers/gpu/drm/i915/intel_pm.c |    5 +++++
> > >> >  1 file changed, 5 insertions(+)
> > >> >
> > >> > diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
> > >> > index 413877d..15ff0ac 100644
> > >> > --- a/drivers/gpu/drm/i915/intel_pm.c
> > >> > +++ b/drivers/gpu/drm/i915/intel_pm.c
> > >> > @@ -3758,6 +3758,11 @@ static void lpt_init_clock_gating(struct drm_device *dev)
> > >> >             I915_WRITE(SOUTH_DSPCLK_GATE_D,
> > >> >                        I915_READ(SOUTH_DSPCLK_GATE_D) |
> > >> >                        PCH_LP_PARTITION_LEVEL_DISABLE);
> > >> > +
> > >> > +   /* WADPOClockGatingDisable */
> > >> > +   I915_WRITE(_TRANSA_CHICKEN1,
> > >> > +              I915_READ(_TRANSA_CHICKEN1) |
> > >> > +              TRANS_CHICKEN1_DP0UNIT_GC_DISABLE);


Of course, It'd be good to add the :hsw at the end of
WADPOClockGatingDisable (ammending the patch when applying?) now that
the workaround documentation has been pushed.

(Still Reviewed-by: Damien Lespiau <damien.lespiau@intel.com> of course)
Daniel Vetter May 10, 2013, 7 p.m. UTC | #7
On Wed, May 08, 2013 at 01:54:17PM +0100, Damien Lespiau wrote:
> On Tue, May 07, 2013 at 03:40:21PM +0100, Damien Lespiau wrote:
> > On Tue, May 07, 2013 at 10:46:01AM -0300, Paulo Zanoni wrote:
> > > 2013/5/7 Damien Lespiau <damien.lespiau@intel.com>:
> > > > On Tue, May 07, 2013 at 02:10:05PM +0100, Damien Lespiau wrote:
> > > >> On Wed, Apr 17, 2013 at 06:15:49PM -0300, Paulo Zanoni wrote:
> > > >> > From: Paulo Zanoni <paulo.r.zanoni@intel.com>
> > > >> >
> > > >> > This should prevent mode set failures on LPT.
> > > >> >
> > > >> > Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
> > > >> > ---
> > > >> >  drivers/gpu/drm/i915/intel_pm.c |    5 +++++
> > > >> >  1 file changed, 5 insertions(+)
> > > >> >
> > > >> > diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
> > > >> > index 413877d..15ff0ac 100644
> > > >> > --- a/drivers/gpu/drm/i915/intel_pm.c
> > > >> > +++ b/drivers/gpu/drm/i915/intel_pm.c
> > > >> > @@ -3758,6 +3758,11 @@ static void lpt_init_clock_gating(struct drm_device *dev)
> > > >> >             I915_WRITE(SOUTH_DSPCLK_GATE_D,
> > > >> >                        I915_READ(SOUTH_DSPCLK_GATE_D) |
> > > >> >                        PCH_LP_PARTITION_LEVEL_DISABLE);
> > > >> > +
> > > >> > +   /* WADPOClockGatingDisable */
> > > >> > +   I915_WRITE(_TRANSA_CHICKEN1,
> > > >> > +              I915_READ(_TRANSA_CHICKEN1) |
> > > >> > +              TRANS_CHICKEN1_DP0UNIT_GC_DISABLE);
> 
> 
> Of course, It'd be good to add the :hsw at the end of
> WADPOClockGatingDisable (ammending the patch when applying?) now that
> the workaround documentation has been pushed.

Done and queued for -next, thanks for the patch.
-Daniel
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index 413877d..15ff0ac 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -3758,6 +3758,11 @@  static void lpt_init_clock_gating(struct drm_device *dev)
 		I915_WRITE(SOUTH_DSPCLK_GATE_D,
 			   I915_READ(SOUTH_DSPCLK_GATE_D) |
 			   PCH_LP_PARTITION_LEVEL_DISABLE);
+
+	/* WADPOClockGatingDisable */
+	I915_WRITE(_TRANSA_CHICKEN1,
+		   I915_READ(_TRANSA_CHICKEN1) |
+		   TRANS_CHICKEN1_DP0UNIT_GC_DISABLE);
 }
 
 static void haswell_init_clock_gating(struct drm_device *dev)