[Intel-gfx] [PATCH 1/2] drm/i915: align vlv forcewake with common lore

Daniel Vetter daniel at ffwll.ch
Mon Sep 3 09:30:59 CEST 2012


On Sun, Sep 02, 2012 at 03:43:39PM -0700, Ben Widawsky wrote:
> On Fri, 24 Aug 2012 17:26:20 +0200
> Daniel Vetter <daniel.vetter at ffwll.ch> wrote:
> 
> > For some odd reasons, the vlv forcewake code is rather different from
> > all other platforms, with no clear justification. Adjust things:
> > 
> > - Don't check whether the gt is awake already (and bail out early), we
> >   need to grab a forcewake anyway. Otherwise the chip might go to
> >   sleep too early. And this would also screw up our forcewake
> >   accounting.
> > - Like all other platforms, check whether the gt has cleared the
> >   forcewake bit in the _ACK register before setting it again.
> > - Use _MASKED_BIT_ENABLE/DISABLE macros
> > - Only use bit0 of the forcewake reg, not all 16 bits.
> > - check the gtfifodb reg like on all other platforms in _put.
> > - Drop the POSTING_READs for consistency.
> > 
> > v2: Failure to git add ... again.
> > 
> > v3: Fixup the spelling fail a bit.
> > 
> > Tested-by: "Purushothaman, Vijay A" <vijay.a.purushothaman at intel.com>
> > Signed-Off-by: Daniel Vetter <daniel.vetter at ffwll.ch>
> I'd like to see the FORCEWAKE patches I've recently submitted get
> merged, and the same magic in those get applied here.
> 
> Regarding docs, I can't find the right ones to verify any of the
> forcewake stuff, so no r-b. Maybe Jesse can help. For an a-b I'd like
> you to take the forcewake fixes, and considering squashing the vlv
> specific functions into the main functions, since you've removed most of
> the differences anyway.

I've figured I'll just apply it and let Jesse yell it at me ;-) After all,
this patch has been floating for a few weeks already in some form or
another, and seems to no break 2 of the 3 vlv machines we have access too
...

> In any case, it is:
> Tested-by: Ben Widawsky <ben at bwidawsk.net>

Thanks, I've merged both patches for -next.
-Daniel

> 
> 
> 
> > ---
> >  drivers/gpu/drm/i915/intel_pm.c |   14 ++++++--------
> >  1 file changed, 6 insertions(+), 8 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
> > index c0721ff..1a197da 100644
> > --- a/drivers/gpu/drm/i915/intel_pm.c
> > +++ b/drivers/gpu/drm/i915/intel_pm.c
> > @@ -4075,12 +4075,10 @@ int __gen6_gt_wait_for_fifo(struct drm_i915_private *dev_priv)
> >  
> >  static void vlv_force_wake_get(struct drm_i915_private *dev_priv)
> >  {
> > -	/* Already awake? */
> > -	if ((I915_READ(0x130094) & 0xa1) == 0xa1)
> > -		return;
> > +	if (wait_for_atomic_us((I915_READ_NOTRACE(FORCEWAKE_ACK_VLV) & 1) == 0, 500))
> > +		DRM_ERROR("Force wake wait timed out\n");
> 
> WTF?

I hope that wtf is for the old code, not the new ...

> 
> >  
> > -	I915_WRITE_NOTRACE(FORCEWAKE_VLV, 0xffffffff);
> > -	POSTING_READ(FORCEWAKE_VLV);
> > +	I915_WRITE_NOTRACE(FORCEWAKE_VLV, _MASKED_BIT_ENABLE(1));
> >  
> >  	if (wait_for_atomic_us((I915_READ_NOTRACE(FORCEWAKE_ACK_VLV) & 1), 500))
> >  		DRM_ERROR("Force wake wait timed out\n");
> > @@ -4090,9 +4088,9 @@ 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, 0xffff0000);
> > -	/* FIXME: confirm VLV behavior with Punit folks */
> > -	POSTING_READ(FORCEWAKE_VLV);
> > +	I915_WRITE_NOTRACE(FORCEWAKE_VLV, _MASKED_BIT_DISABLE(1));
> > +	/* The below doubles as a POSTING_READ */
> > +	gen6_gt_check_fifodbg(dev_priv);
> >  }
> >  
> >  void intel_gt_init(struct drm_device *dev)
> 
> 
> 
> -- 
> Ben Widawsky, Intel Open Source Technology Center

-- 
Daniel Vetter
Mail: daniel at ffwll.ch
Mobile: +41 (0)79 365 57 48



More information about the Intel-gfx mailing list