[Intel-gfx] [PATCH] drm/i915/chv: Add new WA and remove pre-production ones

Siluvery, Arun arun.siluvery at linux.intel.com
Tue Oct 28 18:54:23 CET 2014


On 28/10/2014 17:06, Ville Syrjälä wrote:
> On Tue, Oct 28, 2014 at 03:48:24PM +0000, Arun Siluvery wrote:
>> +WaForceEnableNonCoherent:chv
>> +WaHdcDisableFetchWhenMasked:chv
>> -WaDisableDopClockGating:chv
>> -WaDisableSamplerPowerBypass:chv
>> -WaDisableGunitClockGating:chv
>> -WaDisableFfDopClockGating:chv
>> -WaDisableDopClockGating:chv
>>
>> WaDisablePartialInstShootdown:chv and
>> WaDisableThreadStallDopClockGating:chv are related to the
>> same register so combine them.
>
> Please split into at least two patches (one to add new w/as and another to
> remove old ones). Otherwise reverting is a pita in case we find that one
> of the dropped w/as was actually still needed.
>

I thought of doing that but then combined them as these are early 
pre-production ones and we may not need them in future but I agree 
splitting them helps in reverting them if required.

>>
>> v2: Remove pre-production WA instead of restricting them
>> based on revision id (Ville)
>>
>> For: VIZ-4090
>> Signed-off-by: Arun Siluvery <arun.siluvery at linux.intel.com>
>> ---
>>   drivers/gpu/drm/i915/i915_reg.h         |  1 +
>>   drivers/gpu/drm/i915/intel_pm.c         | 12 ------------
>>   drivers/gpu/drm/i915/intel_ringbuffer.c | 22 +++++++++++-----------
>>   3 files changed, 12 insertions(+), 23 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
>> index 77fce96..9d39700 100644
>> --- a/drivers/gpu/drm/i915/i915_reg.h
>> +++ b/drivers/gpu/drm/i915/i915_reg.h
>> @@ -5024,6 +5024,7 @@ enum punit_power_well {
>>   /* GEN8 chicken */
>>   #define HDC_CHICKEN0				0x7300
>>   #define  HDC_FORCE_NON_COHERENT			(1<<4)
>> +#define  HDC_DONOT_FETCH_MEM_WHEN_MASKED	(1<<11)
>>   #define  HDC_FENCE_DEST_SLM_DISABLE		(1<<14)
>>
>>   /* WaCatErrorRejectionIssue */
>> diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
>> index 7a69eba..93db25f 100644
>> --- a/drivers/gpu/drm/i915/intel_pm.c
>> +++ b/drivers/gpu/drm/i915/intel_pm.c
>> @@ -5944,18 +5944,6 @@ static void cherryview_init_clock_gating(struct drm_device *dev)
>>   	/* WaDisableSDEUnitClockGating:chv */
>>   	I915_WRITE(GEN8_UCGCTL6, I915_READ(GEN8_UCGCTL6) |
>>   		   GEN8_SDEUNIT_CLOCK_GATE_DISABLE);
>> -
>> -	/* WaDisableGunitClockGating:chv (pre-production hw) */
>> -	I915_WRITE(VLV_GUNIT_CLOCK_GATE, I915_READ(VLV_GUNIT_CLOCK_GATE) |
>> -		   GINT_DIS);
>
> OK
>
>> -
>> -	/* WaDisableFfDopClockGating:chv (pre-production hw) */
>> -	I915_WRITE(GEN6_RC_SLEEP_PSMI_CONTROL,
>> -		   _MASKED_BIT_ENABLE(GEN8_FF_DOP_CLOCK_GATE_DISABLE));
>
> OK
>
>> -
>> -	/* WaDisableDopClockGating:chv (pre-production hw) */
>> -	I915_WRITE(GEN6_UCGCTL1, I915_READ(GEN6_UCGCTL1) |
>> -		   GEN6_EU_TCUNIT_CLOCK_GATE_DISABLE);
>
> OK, I think. This was the weird w/a where it seemed hard to figure out
> what it needed. Nothing in BSpec about needing this bit on chv.
>
>>   }
>>
>>   static void g4x_init_clock_gating(struct drm_device *dev)
>> diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
>> index a8f72e8..368b20a 100644
>> --- a/drivers/gpu/drm/i915/intel_ringbuffer.c
>> +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
>> @@ -788,20 +788,20 @@ static int chv_init_workarounds(struct intel_engine_cs *ring)
>>   	struct drm_i915_private *dev_priv = dev->dev_private;
>>
>>   	/* WaDisablePartialInstShootdown:chv */
>> -	WA_SET_BIT_MASKED(GEN8_ROW_CHICKEN,
>> -		  PARTIAL_INSTRUCTION_SHOOTDOWN_DISABLE);
>> -
>>   	/* WaDisableThreadStallDopClockGating:chv */
>>   	WA_SET_BIT_MASKED(GEN8_ROW_CHICKEN,
>> -		  STALL_DOP_GATING_DISABLE);
>> -
>> -	/* WaDisableDopClockGating:chv (pre-production hw) */
>> -	WA_SET_BIT_MASKED(GEN7_ROW_CHICKEN2,
>> -		  DOP_CLOCK_GATING_DISABLE);
>
> OK, again the weird w/a but Bspec seems to agree at least.
>
>> +			  PARTIAL_INSTRUCTION_SHOOTDOWN_DISABLE |
>> +			  STALL_DOP_GATING_DISABLE);
>
> Bspec says bit 5 is MBZ now, and yet the w/a database says it's
> forever. And the hardware accepts 1 there so it's not like many other
> MBZ bits that you can't set even if you try. Also Bspec has three
> different definitions for this bit on gen8, all disagree with each other
> and one definiton even manages to disagree with itself. And reading the
> hsd stuff I'm not the only that has been confused by this, and yet I see
> no conclusion there as to how this bit should be configured.
>
> Oh well, I guess we can leave it set for now and maybe eventually
> someone will figure out what we're supposed to do.
>
I am using w/a database as reference and it says forever, spec seems to 
disagree but probably not yet updated.

regards
Arun

>>
>> -	/* WaDisableSamplerPowerBypass:chv (pre-production hw) */
>> -	WA_SET_BIT_MASKED(HALF_SLICE_CHICKEN3,
>> -		  GEN8_SAMPLER_POWER_BYPASS_DIS);
>
> OK
>
>> +	/* Use Force Non-Coherent whenever executing a 3D context. This is a
>> +	 * workaround for a possible hang in the unlikely event a TLB
>> +	 * invalidation occurs during a PSD flush.
>> +	 */
>> +	/* WaForceEnableNonCoherent:chv */
>> +	/* WaHdcDisableFetchWhenMasked:chv */
>> +	WA_SET_BIT_MASKED(HDC_CHICKEN0,
>> +			  HDC_FORCE_NON_COHERENT |
>> +			  HDC_DONOT_FETCH_MEM_WHEN_MASKED);
>
> OK
>
> Right, so split it up a bit and you can add
>
> Reviewed-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
>
> to the patches.
>
>>
>>   	return 0;
>>   }
>> --
>> 2.1.2
>>
>> _______________________________________________
>> Intel-gfx mailing list
>> Intel-gfx at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
>




More information about the Intel-gfx mailing list