RE: [PATCH v10] drm/i915: WA context support for L3flush

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

 



Hi Andi,

> -----Original Message-----
> From: Andi Shyti <andi.shyti@xxxxxxxxxxxxxxx>
> Sent: Wednesday, August 14, 2024 5:05 PM
> To: Gote, Nitin R <nitin.r.gote@xxxxxxxxx>
> Cc: intel-gfx@xxxxxxxxxxxxxxxxxxxxx; Nayana, Venkata Ramana
> <venkata.ramana.nayana@xxxxxxxxx>; Harrison, John C
> <john.c.harrison@xxxxxxxxx>; Wilson, Chris P <chris.p.wilson@xxxxxxxxx>;
> Upadhyay, Tejas <tejas.upadhyay@xxxxxxxxx>
> Subject: Re: [PATCH v10] drm/i915: WA context support for L3flush
> 
> Hi Nitin,
> 
> I had a quick read through and just few comments for now.

Thank you for the review.
I just came to know from @Ewins, Jon in VLK-35222, that this WA is no longer required.
So, I will not spend time on this patch anymore as it is no longer required.

Br,
Nitin

> 
> On Tue, Aug 13, 2024 at 11:46:57AM +0530, Nitin Gote wrote:
> 
> ...
> 
> > Another key requirement is to have this context dummy mapped so that
> > the HW doesn't generate any PFs. This H/W issue may cause L3 cached
> > GPUVAs which belong to previous context to get associated with the
> > l3flush context. So, w/o dummy mapping, HW is expected to PF whenever
> > these stale addresses are referenced.
> >
> > This patch has been co-developed with John Harrison.
> 
> Please, remove this line.
> 
> > v2: CONTEXT_WA_L3FLUSH bit set calling function change (Chris)
> >     Handled ce and ppgtt leaks (Chris)
> > v3: s/setup_dummy_context/setup_wa_l3flush_context (JohnH)
> >     Replace firmware wording with IFWI (JohnH)
> >     Inplace of REG_BIT(31) use meaningfull BIT define (JohnH)
> >     Replace few GUC #def with enum (JohnH)
> > v4: Replace 'dummy/wa_l3flush' (JohnH)
> > v5 (Tejas): For old IFWI, print warning and let driver proceed (Matt)
> >             Adjust IS_DG2 check as G12 does not need this WA (Matt)
> >             Use correct WA# (Matt)
> >             Rename APIs to dg2 specific (Matt)
> > v6 (Tejas): Drop ppgtt->vm ref right after context create (Chris)
> >             Change variable to destroy context (Chris)
> >             Use MI_LRI for multiple reg ops (Chris)
> > v7 (Tejas): MTL does not have BCS0, handled it
> > v8 (Tejas): Resolve recursive merge error
> > v9 (Tejas): Use s/engine->uncore/engine->i915->uncore (Chris)
> >             Modify no.of regs 4->2 for MI_LRI (Chris)
> >             Unref ppgtt->vm only for err
> >             Modify GEM_BUG_ON for dg2_10/11
> >             Handle return value for l3flush context setup
> > v10 (Nitin): Rebase this patch.
> 
> In which list have been all these versions sent?
> 
> > Cc: John Harrison <john.c.harrison@xxxxxxxxx>
> 
> Replace this line with:
> 
> Co-developed-by: John Harrison <john.c.harrison@xxxxxxxxx>
> Signed-off-by: John Harrison <john.c.harrison@xxxxxxxxx>
> 
> > Signed-off-by: Venkata Ramana Nayana
> <venkata.ramana.nayana@xxxxxxxxx>
> > Signed-off-by: Tejas Upadhyay <tejas.upadhyay@xxxxxxxxx>
> > Signed-off-by: Nitin Gote <nitin.r.gote@xxxxxxxxx>
> 
> ...
> 
> >  #define I915_GEM_HWS_MIGRATE		(0x42 * sizeof(u32))
> >  #define I915_GEM_HWS_GGTT_BIND		0x46
> >  #define I915_GEM_HWS_GGTT_BIND_ADDR	(I915_GEM_HWS_GGTT_BIND
> * sizeof(u32))
> > +#define I915_GEM_HWS_WA_L3FLUSH         0x48
> > +#define I915_GEM_HWS_WA_L3FLUSH_ADDR
> 	(I915_GEM_HWS_WA_L3FLUSH * sizeof(u32))
> 
> please, use tabs here.
> 
> >  #define I915_GEM_HWS_PXP		0x60
> >  #define I915_GEM_HWS_PXP_ADDR		(I915_GEM_HWS_PXP *
> sizeof(u32))
> >  #define I915_GEM_HWS_GSC		0x62
> 
> ...
> 
> > +	/* BIT(31) unlockbit manage by IFWI */
> > +	if (misccpctl & GEN12_DOP_CLOCK_GATE_LOCK) {
> > +		drm_warn(&engine->i915->drm, "MISCCPCTL lockbit set,
> update IFWI\n");
> > +		ret = -EPERM;
> > +		return ret;
> 
> just return -EPERM.
> 
> > +	}
> > +
> > +	ppgtt = i915_ppgtt_create(engine->gt, 0);
> > +	if (IS_ERR(ppgtt))
> > +		return PTR_ERR(ppgtt);
> > +
> > +	ce = intel_engine_create_pinned_context(engine,
> > +						&ppgtt->vm, SZ_4K,
> > +
> 	I915_GEM_HWS_WA_L3FLUSH_ADDR,
> > +						&wa_l3flush,
> "wa_l3flush_context");
> > +	if (IS_ERR(ce)) {
> > +		/* Keep this vm isolated! */
> > +		i915_vm_put(&ppgtt->vm);
> 
> Please, add this in the goto error path because...
> 
> > +		return PTR_ERR(ce);
> > +	}
> > +
> > +	/* Ensure this context does not get registered for use as a real
> context */
> > +	__set_bit(CONTEXT_WA_L3FLUSH, &ce->flags);
> > +
> > +	ret = intel_guc_assign_wa_guc_id(&engine->gt->uc.guc, ce);
> > +	if (ret < 0)
> > +		goto err;
> 
> ... you are missing it here
> 
> > +	engine->wa_l3flush_context = ce;
> > +	i915_vm_put(ce->vm);
> > +	return 0;
> > +
> > +err:
> > +	intel_engine_destroy_pinned_context(ce);
> > +	return ret;
> > +}
> 
> ...
> 
> >  #define   GEN8_DOP_CLOCK_GATE_CFCLK_ENABLE	(1 << 2)
> >  #define   GEN8_DOP_CLOCK_GATE_GUC_ENABLE	(1 << 4)
> >  #define   GEN8_DOP_CLOCK_GATE_MEDIA_ENABLE	(1 << 6)
> > +#define   GEN12_DOP_CLOCK_GATE_LOCK             REG_BIT(31) /* bits[0,
> 31] RO */
> 
> use tabs
> 
> >
> >  #define GEN8_UCGCTL6				_MMIO(0x9430)
> >  #define   GEN8_GAPSUNIT_CLOCK_GATE_DISABLE	(1 << 24)
> 
> ...
> 
> > +/*
> > + * Global workaround keys.
> > + */
> > +enum  {
> > +	GUC_WORKAROUND_KLV_ID_COPY_ENGINE_SECURITY_WA = 0x301,
> };
> 
> are we expecting more keys? Why a single element enum?
> 
> > +
> > diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
> > b/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
> > index 7995f059f30d..b981be11a59c 100644
> > --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
> > +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
> > @@ -834,10 +834,40 @@ static void guc_waklv_enable_simple(struct
> intel_guc *guc,
> >  	*remain -= size;
> >  }
> >
> > +/* Wa_14015997824: DG2 */
> 
> does it make sense to put this on a different patch?
> 
> Andi
> 
> > +static void guc_waklv_init_bcs(struct intel_guc *guc, struct
> > +intel_context *dummy_ce) {
> > +	u32 offset, addr_ggtt, alloc_size, real_size;
> > +	u32 klv_entry[] = {




[Index of Archives]     [AMD Graphics]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux