On Wed, 6 Mar 2013 20:28:07 +0200
Ville Syrjälä <[email protected]> wrote:

> On Fri, Mar 01, 2013 at 02:08:31PM -0800, Jesse Barnes wrote:
> > We could split this out into a separate routine at some point as an
> > optimization.
> 
> BTW did anyone try to gang wakeup thing instead?

Not afaik.

> 
> > 
> > Signed-off-by: Jesse Barnes <[email protected]>
> > ---
> >  drivers/gpu/drm/i915/i915_reg.h |    2 ++
> >  drivers/gpu/drm/i915/intel_pm.c |   11 ++++++++---
> >  2 files changed, 10 insertions(+), 3 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/i915_reg.h 
> > b/drivers/gpu/drm/i915/i915_reg.h
> > index 1c6e066..558c6d1 100644
> > --- a/drivers/gpu/drm/i915/i915_reg.h
> > +++ b/drivers/gpu/drm/i915/i915_reg.h
> > @@ -4271,6 +4271,8 @@
> >  #define  FORCEWAKE                         0xA18C
> >  #define  FORCEWAKE_VLV                             0x1300b0
> >  #define  FORCEWAKE_ACK_VLV                 0x1300b4
> > +#define  FORCEWAKE_MEDIA_VLV                       0x1300b8
> > +#define  FORCEWAKE_ACK_MEDIA_VLV           0x1300bc
> >  #define  FORCEWAKE_ACK_HSW                 0x130044
> >  #define  FORCEWAKE_ACK                             0x130090
> >  #define  VLV_GTLC_WAKE_CTRL                        0x130090
> > diff --git a/drivers/gpu/drm/i915/intel_pm.c 
> > b/drivers/gpu/drm/i915/intel_pm.c
> > index 3e976f4..e3947cb 100644
> > --- a/drivers/gpu/drm/i915/intel_pm.c
> > +++ b/drivers/gpu/drm/i915/intel_pm.c
> > @@ -4423,10 +4423,15 @@ static void vlv_force_wake_get(struct 
> > drm_i915_private *dev_priv)
> >             DRM_ERROR("Timed out waiting for forcewake old ack to 
> > clear.\n");
> >  
> >     I915_WRITE_NOTRACE(FORCEWAKE_VLV, _MASKED_BIT_ENABLE(FORCEWAKE_KERNEL));
> > +   I915_WRITE_NOTRACE(FORCEWAKE_MEDIA_VLV, 
> > _MASKED_BIT_ENABLE(FORCEWAKE_KERNEL));
> >  
> >     if (wait_for_atomic((I915_READ_NOTRACE(FORCEWAKE_ACK_VLV) & 1),
> >                         FORCEWAKE_ACK_TIMEOUT_MS))
> > -           DRM_ERROR("Timed out waiting for forcewake to ack request.\n");
> > +           DRM_ERROR("Timed out waiting for GT to ack forcewake 
> > request.\n");
> > +
> > +   if (wait_for_atomic((I915_READ_NOTRACE(FORCEWAKE_ACK_MEDIA_VLV) & 1),
> > +                       FORCEWAKE_ACK_TIMEOUT_MS))
> > +           DRM_ERROR("Timed out waiting for media to ack forcewake 
> > request.\n");
> 
> Based on some of my recent patches the '& 1's should be
> '& FORCEWAKE_KERNEL'.

And that was based on my misunderstanding of MT forcewake.  I thought
it was so the BIOS or AMT could do forcewake, but it's actually meant
for multiple kernel thread accesses.  Since we don't do that, simply
using the lowest bit all the time is fine.

> >     __gen6_gt_wait_for_thread_c0(dev_priv);
> >  }
> > @@ -4434,8 +4439,8 @@ static void vlv_force_wake_get(struct 
> > drm_i915_private *dev_priv)
> >  static void vlv_force_wake_put(struct drm_i915_private *dev_priv)
> >  {
> >     I915_WRITE_NOTRACE(FORCEWAKE_VLV, 
> > _MASKED_BIT_DISABLE(FORCEWAKE_KERNEL));
> > -   /* something from same cacheline, but !FORCEWAKE_VLV */
> > -   POSTING_READ(FORCEWAKE_ACK_VLV);
> > +   I915_WRITE_NOTRACE(FORCEWAKE_MEDIA_VLV, 
> > _MASKED_BIT_DISABLE(FORCEWAKE_KERNEL));
> > +   /* The below doubles as a POSTING_READ */
> 
> Are we sure? ;)
> 
> >     gen6_gt_check_fifodbg(dev_priv);

Well it does a read first thing so I think so.

-- 
Jesse Barnes, Intel Open Source Technology Center
_______________________________________________
Intel-gfx mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to