[Intel-gfx] [PATCH] drm/i915: Hold forcewake for whole of punit communication

Chris Wilson chris at chris-wilson.co.uk
Wed Feb 15 12:06:21 UTC 2017


On Wed, Feb 15, 2017 at 01:33:01PM +0200, Ville Syrjälä wrote:
> On Wed, Feb 15, 2017 at 10:41:29AM +0000, Chris Wilson wrote:
> > Take the forcewake for punit access and hold it across our waits to
> > ensure that the powerwell is not dropped by a spurious sleep.
> > 
> > Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> > Cc: Mika Kuoppala <mika.kuoppala at intel.com>
> > ---
> >  drivers/gpu/drm/i915/intel_sideband.c | 55 ++++++++++++++++++++++-------------
> >  1 file changed, 34 insertions(+), 21 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/intel_sideband.c b/drivers/gpu/drm/i915/intel_sideband.c
> > index 9f782b5eb6e6..ce6d166d67ea 100644
> > --- a/drivers/gpu/drm/i915/intel_sideband.c
> > +++ b/drivers/gpu/drm/i915/intel_sideband.c
> > @@ -39,42 +39,55 @@
> >  /* Private register write, double-word addressing, non-posted */
> >  #define SB_CRWRDA_NP	0x07
> >  
> > -static int vlv_sideband_rw(struct drm_i915_private *dev_priv, u32 devfn,
> > -			   u32 port, u32 opcode, u32 addr, u32 *val)
> > +static int vlv_sideband_rw(struct drm_i915_private *dev_priv,
> > +			   u32 devfn, u32 port, u32 opcode, u32 addr,
> > +			   u32 *val)
> >  {
> > -	u32 cmd, be = 0xf, bar = 0;
> > -	bool is_read = (opcode == SB_MRD_NP || opcode == SB_CRRDDA_NP);
> > +	const bool is_read = (opcode == SB_MRD_NP || opcode == SB_CRRDDA_NP);
> > +	enum forcewake_domains fw_domains;
> > +	int err = 0;
> >  
> > -	cmd = (devfn << IOSF_DEVFN_SHIFT) | (opcode << IOSF_OPCODE_SHIFT) |
> > -		(port << IOSF_PORT_SHIFT) | (be << IOSF_BYTE_ENABLES_SHIFT) |
> > -		(bar << IOSF_BAR_SHIFT);
> > +	lockdep_assert_held(&dev_priv->sb_lock);
> >  
> > -	WARN_ON(!mutex_is_locked(&dev_priv->sb_lock));
> > +	fw_domains = intel_uncore_forcewake_for_reg(dev_priv,
> > +						    VLV_IOSF_DOORBELL_REQ,
> 
> The mailbox lives in the display register range, and so doesn't need
> forcewake.

That's what I actually thought... So we could even bypass the fw
mmio interface. Probably not worth it.
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre


More information about the Intel-gfx mailing list