[Intel-gfx] [PATCH v3 11/11] drm/i915/tgl: Implement Wa_1407901919

Rafael Antognolli rafael.antognolli at intel.com
Mon Mar 2 20:31:13 UTC 2020


On Fri, Feb 28, 2020 at 02:10:50PM -0800, Souza, Jose wrote:
> Can you guys help in this one? Check Matt comment bellow.
> 
> On Fri, 2020-02-28 at 14:07 -0800, Matt Roper wrote:
> > On Thu, Feb 27, 2020 at 02:01:01PM -0800, José Roberto de Souza
> > wrote:
> > > This will fix a memory coherence issue.
> > > 
> > > v3: using whitespace to make easy to read WA (Chris)
> > > 
> > > BSpec: 52890
> > > Cc: Chris Wilson <chris at chris-wilson.co.uk>
> > > Signed-off-by: José Roberto de Souza <jose.souza at intel.com>
> > > ---
> > >  drivers/gpu/drm/i915/gt/intel_workarounds.c |  8 ++++++++
> > >  drivers/gpu/drm/i915/i915_reg.h             | 20 +++++++++++----
> > > -----
> > >  2 files changed, 19 insertions(+), 9 deletions(-)
> > > 
> > > diff --git a/drivers/gpu/drm/i915/gt/intel_workarounds.c
> > > b/drivers/gpu/drm/i915/gt/intel_workarounds.c
> > > index 3e375a3b7714..c59e1a604ab8 100644
> > > --- a/drivers/gpu/drm/i915/gt/intel_workarounds.c
> > > +++ b/drivers/gpu/drm/i915/gt/intel_workarounds.c
> > > @@ -601,6 +601,14 @@ static void tgl_ctx_workarounds_init(struct
> > > intel_engine_cs *engine,
> > >  	 */
> > >  	wa_add(wal, FF_MODE2, FF_MODE2_TDS_TIMER_MASK,
> > >  	       FF_MODE2_TDS_TIMER_128, 0);
> > > +
> > > +	/* Wa_1407901919:tgl */
> > > +	wa_add(wal, ICL_HDC_MODE,
> > > +	       HDC_COHERENT_ACCESS_L1_CACHE_DIS |
> > > +	       HDC_DIS_L1_INVAL_FOR_NON_L1_CACHEABLE_W,
> > 
> > I'm not sure if this is what the workaround is asking for.  The way I
> > understood the workaround, the 2-dword STATE_COMPUTE_MODE instruction
> > has a couple bits that must be left at 0.  STATE_COMPUTE_MODE is
> > basically how we ultimately load the HDC_MODE registers (rather than
> > using a simple LRI like we do for a bunch of other registers), but
> > the
> > workaround isn't asking us to worry about bits 13+14 in the HDC_MODE
> > register itself, but rather those flags bits on the instruction that
> > manipulates the register.
> > 
> > Every time there's a context switch, the hardware will generate a
> > copy
> > of this instruction as part of the context image in writes to RAM;
> > I'm
> > assuming these bits aren't set on those hardware-created
> > instructions?
> > Assuming that's true, then I think this workaround would just be
> > userspace's responsibility --- if they submit an explicit
> > STATE_COMPUTE_MODE instruction that isn't just part of the context
> > image, they need to follow the workaround guidance here and leave two
> > of
> > those bits set to 0.

Hmmm... IMHO the workaround description doesn't make it very clear if
it's talking about the register itself, or the STATE_COMPUTE_MODE
instruction to set it. But the comment in the bug about it seems to
suggest what Matt described.

In any case, it should just be left as 0, and as Matt said, userspace
shouldn't set it to 1. So I agree, there's nothing to be done in the
kernel.

--
Rafael

> > 
> > Matt
> > 
> > > +	       0,
> > > +	       HDC_COHERENT_ACCESS_L1_CACHE_DIS |
> > > +	       HDC_DIS_L1_INVAL_FOR_NON_L1_CACHEABLE_W);
> > >  }
> > >  
> > >  static void
> > > diff --git a/drivers/gpu/drm/i915/i915_reg.h
> > > b/drivers/gpu/drm/i915/i915_reg.h
> > > index 80cf02a6eec1..28822585537b 100644
> > > --- a/drivers/gpu/drm/i915/i915_reg.h
> > > +++ b/drivers/gpu/drm/i915/i915_reg.h
> > > @@ -7883,15 +7883,17 @@ enum {
> > >  #define  GEN8_LQSC_FLUSH_COHERENT_LINES		(1 << 21)
> > >  
> > >  /* GEN8 chicken */
> > > -#define HDC_CHICKEN0				_MMIO(0x7300)
> > > -#define CNL_HDC_CHICKEN0			_MMIO(0xE5F0)
> > > -#define ICL_HDC_MODE				_MMIO(0xE5F4)
> > > -#define  HDC_FORCE_CSR_NON_COHERENT_OVR_DISABLE	(1 << 15)
> > > -#define  HDC_FENCE_DEST_SLM_DISABLE		(1 << 14)
> > > -#define  HDC_DONOT_FETCH_MEM_WHEN_MASKED	(1 << 11)
> > > -#define  HDC_FORCE_CONTEXT_SAVE_RESTORE_NON_COHERENT	(1 <<
> > > 5)
> > > -#define  HDC_FORCE_NON_COHERENT			(1 << 4)
> > > -#define  HDC_BARRIER_PERFORMANCE_DISABLE	(1 << 10)
> > > +#define HDC_CHICKEN0					_MMIO(0
> > > x7300)
> > > +#define CNL_HDC_CHICKEN0				_MMIO(0xE5F0)
> > > +#define ICL_HDC_MODE					_MMIO(0
> > > xE5F4)
> > > +#define  HDC_FORCE_CSR_NON_COHERENT_OVR_DISABLE		REG_BIT
> > > (15)
> > > +#define  HDC_FENCE_DEST_SLM_DISABLE			REG_BIT
> > > (14)
> > > +#define  HDC_DIS_L1_INVAL_FOR_NON_L1_CACHEABLE_W	REG_BIT(13)
> > > +#define  HDC_COHERENT_ACCESS_L1_CACHE_DIS		REG_BIT(12)
> > > +#define  HDC_DONOT_FETCH_MEM_WHEN_MASKED		REG_BIT(11)
> > > +#define  HDC_FORCE_CONTEXT_SAVE_RESTORE_NON_COHERENT	REG_BIT
> > > (5)
> > > +#define  HDC_FORCE_NON_COHERENT				REG_BIT
> > > (4)
> > > +#define  HDC_BARRIER_PERFORMANCE_DISABLE		REG_BIT(10)
> > >  
> > >  #define GEN8_HDC_CHICKEN1			_MMIO(0x7304)
> > >  
> > > -- 
> > > 2.25.1
> > > 
> > > _______________________________________________
> > > Intel-gfx mailing list
> > > Intel-gfx at lists.freedesktop.org
> > > https://lists.freedesktop.org/mailman/listinfo/intel-gfx


More information about the Intel-gfx mailing list