Re: [PATCH] drm/i915: Implement fbc_status "Compressing" info for all platforms

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Jun 05, 2017 at 05:23:17PM -0300, Paulo Zanoni wrote:
> Em Qui, 2017-06-01 às 21:02 +0300, ville.syrjala@xxxxxxxxxxxxxxx
> escreveu:
> > From: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx>
> > 
> > The number of compressed segments has been available ever since
> > FBC2 was introduced in g4x, it just moved from the STATUS register
> > into STATUS2 on IVB.
> > 
> > For FBC1 if we really wanted the number of compressed segments we'd
> > have to trawl through the tags, but in this case since the code just
> > uses the number of compressed segments as an indicator whether
> > compression has occurred we can just check the state of the
> > COMPRESSING and COMPRESSED bits. IIRC the hardware will try to
> > periodically recompress all uncompressed lines even if they haven't
> > changed and the COMPRESSED bit will be cleared while the compressor
> > is running, so just checking the COMPRESSED bit might not give us
> > the right answer. Hence it seems better to check for both
> > COMPRESSED and COMPRESSING as that should tell us that the
> > compressor is at least trying to do something.
> > 
> > While at it move the IVB+ register define to the right place, unify
> > the naming convention of the compressed segment count masks, and
> > fix up the mask for g4x.
> > 
> > Cc: Paulo Zanoni <paulo.r.zanoni@xxxxxxxxx>
> > Cc: Gabriel Krisman Bertazi <krisman@xxxxxxxxxxxxxxx>
> > Signed-off-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx>
> > ---
> >  drivers/gpu/drm/i915/i915_debugfs.c | 22 ++++++++++++++++------
> >  drivers/gpu/drm/i915/i915_reg.h     | 10 +++++-----
> >  2 files changed, 21 insertions(+), 11 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/i915_debugfs.c
> > b/drivers/gpu/drm/i915/i915_debugfs.c
> > index 3b088685a553..126f1e8a9d0b 100644
> > --- a/drivers/gpu/drm/i915/i915_debugfs.c
> > +++ b/drivers/gpu/drm/i915/i915_debugfs.c
> > @@ -1670,12 +1670,22 @@ static int i915_fbc_status(struct seq_file
> > *m, void *unused)
> >  		seq_printf(m, "FBC disabled: %s\n",
> >  			   dev_priv->fbc.no_fbc_reason);
> >  
> > -	if (intel_fbc_is_active(dev_priv) && INTEL_GEN(dev_priv) >=
> > 7) {
> > -		uint32_t mask = INTEL_GEN(dev_priv) >= 8 ?
> > -				BDW_FBC_COMPRESSION_MASK :
> > -				IVB_FBC_COMPRESSION_MASK;
> > -		seq_printf(m, "Compressing: %s\n",
> > -			   yesno(I915_READ(FBC_STATUS2) & mask));
> > +	if (intel_fbc_is_active(dev_priv)) {
> > +		u32 mask;
> 
> Someone should sed our whole driver so it either fully uses u32 or
> uint32_t.
> 
> 
> > +
> > +		if (INTEL_GEN(dev_priv) >= 8)
> > +			mask = I915_READ(ILK_DPFC_STATUS2) &
> > BDW_DPFC_COMP_SEG_MASK;
> > +		else if (INTEL_GEN(dev_priv) >= 7)
> > +			mask = I915_READ(ILK_DPFC_STATUS2) &
> > IVB_DPFC_COMP_SEG_MASK;
> > +		else if (INTEL_GEN(dev_priv) >= 5)
> > +			mask = I915_READ(ILK_DPFC_STATUS) &
> > ILK_DPFC_COMP_SEG_MASK;
> > +		else if (IS_G4X(dev_priv))
> > +			mask = I915_READ(DPFC_STATUS) &
> > DPFC_COMP_SEG_MASK;
> > +		else
> > +			mask = I915_READ(FBC_STATUS) &
> > (FBC_STAT_COMPRESSING |
> > +							FBC_STAT_COM
> > PRESSED);
> > +
> > +		seq_printf(m, "Compressing: %s\n", yesno(mask));
> >  	}
> >  
> >  	mutex_unlock(&dev_priv->fbc.lock);
> > diff --git a/drivers/gpu/drm/i915/i915_reg.h
> > b/drivers/gpu/drm/i915/i915_reg.h
> > index 231ee86625cd..23bdc079575c 100644
> > --- a/drivers/gpu/drm/i915/i915_reg.h
> > +++ b/drivers/gpu/drm/i915/i915_reg.h
> > @@ -2507,10 +2507,6 @@ enum skl_disp_power_wells {
> >  #define FBC_FENCE_OFF		_MMIO(0x3218) /* BSpec typo has
> > 321Bh */
> >  #define FBC_TAG(i)		_MMIO(0x3300 + (i) * 4)
> >  
> > -#define FBC_STATUS2			_MMIO(0x43214)
> > -#define  IVB_FBC_COMPRESSION_MASK	0x7ff
> > -#define  BDW_FBC_COMPRESSION_MASK	0xfff
> > -
> >  #define FBC_LL_SIZE		(1536)
> >  
> >  #define FBC_LLC_READ_CTRL	_MMIO(0x9044)
> > @@ -2539,7 +2535,7 @@ enum skl_disp_power_wells {
> >  #define   DPFC_INVAL_SEG_SHIFT  (16)
> >  #define   DPFC_INVAL_SEG_MASK	(0x07ff0000)
> >  #define   DPFC_COMP_SEG_SHIFT	(0)
> > -#define   DPFC_COMP_SEG_MASK	(0x000003ff)
> > +#define   DPFC_COMP_SEG_MASK	(0x000007ff)
> >  #define DPFC_STATUS2		_MMIO(0x3214)
> >  #define DPFC_FENCE_YOFF		_MMIO(0x3218)
> >  #define DPFC_CHICKEN		_MMIO(0x3224)
> > @@ -2553,6 +2549,10 @@ enum skl_disp_power_wells {
> >  #define   DPFC_RESERVED		(0x1FFFFF00)
> >  #define ILK_DPFC_RECOMP_CTL	_MMIO(0x4320c)
> >  #define ILK_DPFC_STATUS		_MMIO(0x43210)
> > +#define  ILK_DPFC_COMP_SEG_MASK	0x7ff
> > +#define ILK_DPFC_STATUS2	_MMIO(0x43214)
> 
> I'm fine with using ILK names for something that appeared on ILK, but I
> can't find ILK_DPFC_STATUS2 on my ILK docs. It seems to me that STATUS2
> only appeared on IVB, and it's named FBC_STATUS2 there.

Hmm. Indeed it looks like it's not documented for ILK/SNB. But I
suspect it's actually there since g4x had it already. But I guess
I could rename it to IVB_FBC_STATUS2 or something like that just
to match the docs.

> 
> If that's the case, ideally we should call it FBC_STATUS2, because
> that's the name. If you really insist, I could very reluctantly go with
> IVB_DPFC_STATUS2, although I really don't like the idea of going with a
> name that's nowhere in our docs. We should really only keep it as
> ILK_DPFC_STATUS2 if the register indeed was added on ILK (and in this
> case, please give me pointers to the appropriate doc).
> 
> For the gen5+ part of the patch, if you rename the STATUS2 register,
> consider it Reviewed-by: Paulo Zanoni <paulo.r.zanoni@xxxxxxxxx>.
> 
> For the gen 2 - 4 part, I really didn't check the docs. But FBC is
> disabled by default on these platforms anyway and assumed to be broken,
> so: Acked-by: Paulo Zanoni <paulo.r.zanoni@xxxxxxxxx>.
> 
> 
> 
> > +#define  IVB_DPFC_COMP_SEG_MASK	0x7ff
> > +#define  BDW_DPFC_COMP_SEG_MASK	0xfff
> >  #define ILK_DPFC_FENCE_YOFF	_MMIO(0x43218)
> >  #define ILK_DPFC_CHICKEN	_MMIO(0x43224)
> >  #define   ILK_DPFC_DISABLE_DUMMY0 (1<<8)

-- 
Ville Syrjälä
Intel OTC
_______________________________________________
Intel-gfx mailing list
Intel-gfx@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/intel-gfx




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux