[Intel-gfx] [PATCH 1/4] drm/i915/gen12: Add recommended hardware tuning value
Lucas De Marchi
lucas.demarchi at intel.com
Mon Mar 8 20:16:08 UTC 2021
On Tue, Mar 02, 2021 at 07:14:07PM -0800, Matt Roper wrote:
>On Tue, Mar 02, 2021 at 05:07:25PM -0800, Lucas De Marchi wrote:
>> From: Caz Yokoyama <caz.yokoyama at intel.com>
>>
>> Follow Bspec 31870 to set recommended tuning values for certain GT
>> register. These values aren't workarounds per-se, but it's best to
>> handle them in the same general area of the driver, especially since
>> there may be real workarounds that update other bits of the same
>> registers.
>>
>> At the moment the only value we need to worry about is the
>> TDS_TIMER setting in FF_MODE2. This setting was previously
>> described as "Wa_1604555607" on some platforms, but the spec
>> tells us that we should continue to program this on all current
>> gen12 platforms, even those that do not have that WA.
>>
>> Bspec: 31870
>>
>> Cc: Clinton Taylor <clinton.a.taylor at intel.com>
>> Cc: Matt Roper <matthew.d.roper at intel.com>
>> Signed-off-by: Caz Yokoyama <caz.yokoyama at intel.com>
>> Signed-off-by: Lucas De Marchi <lucas.demarchi at intel.com>
>
>A couple minor nitpicks about the comments, but you can tweak those
>while applying.
>
>Reviewed-by: Matt Roper <matthew.d.roper at intel.com>
>
>There appear to be some other registers recommended on the same bspec
>tuning page that we don't seem to be handling yet. Will those be coming
>as additional patches?
I don't have those ready, but that is the intention, yes. Here I
basically wanted to get the basic changes in place to make those
possible, while moving the one we already have in the driver there.
>
>> ---
>> drivers/gpu/drm/i915/gt/intel_workarounds.c | 48 ++++++++++++++++-----
>> 1 file changed, 37 insertions(+), 11 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/gt/intel_workarounds.c b/drivers/gpu/drm/i915/gt/intel_workarounds.c
>> index 3b4a7da60f0b..f6d9b849aa62 100644
>> --- a/drivers/gpu/drm/i915/gt/intel_workarounds.c
>> +++ b/drivers/gpu/drm/i915/gt/intel_workarounds.c
>> @@ -646,9 +646,38 @@ static void icl_ctx_workarounds_init(struct intel_engine_cs *engine,
>> wa_masked_en(wal, GEN9_ROW_CHICKEN4, GEN11_DIS_PICK_2ND_EU);
>> }
>>
>> +/*
>> + * These settings aren't actually workarounds, but general tuning settings that
>> + * need to be programmed on several platforms.
>> + */
>> +static void gen12_ctx_gt_tuning_init(struct intel_engine_cs *engine,
>> + struct i915_wa_list *wal)
>> +{
>> + /*
>> + * Although some platforms refer to it as Wa_1604555607, we need to
>> + * program it even on those that don't explicitly list that
>> + * workaround.
>> + *
>> + * Note that the implementation of this workaround is further modified
>
>Since we just got done saying that this technically isn't a workaround,
>even though some of the older platforms still list it that way, I'd
>re-word the comment here. Maybe "Note that the programming of this
>register is further modified..." would be more appropriate.
>
>> + * according to the FF_MODE2 guidance given by Wa_1608008084:gen12.
>> + *
>
>Minor nitpick; the new paragraph start here makes it sound like we've
>moved on to describing something else, rather than explaining what
>Wa_1608008084:gen12 asks us to do. I'd remove the blank line here and
>start the next sentence with "Wa_1608008084 tells us..." to link the
>statements together.
thanks. I changed those and will resubmit.
Lucas De Marchi
>
>
>Matt
>
>> + * FF_MODE2 register will return the wrong value when read. The default
>> + * value for this register is zero for all fields and there are no bit
>> + * masks. So instead of doing a RMW we should just write TDS timer
>> + * value. For the same reason read verification is ignored.
>> + */
>> + wa_add(wal,
>> + FF_MODE2,
>> + FF_MODE2_TDS_TIMER_MASK,
>> + FF_MODE2_TDS_TIMER_128,
>> + 0);
>> +}
>> +
>> static void gen12_ctx_workarounds_init(struct intel_engine_cs *engine,
>> struct i915_wa_list *wal)
>> {
>> + gen12_ctx_gt_tuning_init(engine, wal);
>> +
>> /*
>> * Wa_1409142259:tgl
>> * Wa_1409347922:tgl
>> @@ -675,19 +704,15 @@ static void tgl_ctx_workarounds_init(struct intel_engine_cs *engine,
>> gen12_ctx_workarounds_init(engine, wal);
>>
>> /*
>> - * Wa_1604555607:tgl,rkl
>> + * Wa_16011163337
>> *
>> - * Note that the implementation of this workaround is further modified
>> - * according to the FF_MODE2 guidance given by Wa_1608008084:gen12.
>> - * FF_MODE2 register will return the wrong value when read. The default
>> - * value for this register is zero for all fields and there are no bit
>> - * masks. So instead of doing a RMW we should just write the GS Timer
>> - * and TDS timer values for Wa_1604555607 and Wa_16011163337.
>> + * Like in gen12_ctx_gt_tuning_init(), read verification is ignored due
>> + * to Wa_1608008084.
>> */
>> wa_add(wal,
>> FF_MODE2,
>> - FF_MODE2_GS_TIMER_MASK | FF_MODE2_TDS_TIMER_MASK,
>> - FF_MODE2_GS_TIMER_224 | FF_MODE2_TDS_TIMER_128,
>> + FF_MODE2_GS_TIMER_MASK,
>> + FF_MODE2_GS_TIMER_224,
>> 0);
>> }
>>
>> @@ -707,12 +732,13 @@ static void dg1_ctx_workarounds_init(struct intel_engine_cs *engine,
>> /*
>> * Wa_16011163337
>> *
>> - * Like in tgl_ctx_workarounds_init(), read verification is ignored due
>> + * Like in gen12_ctx_gt_tuning_init(), read verification is ignored due
>> * to Wa_1608008084.
>> */
>> wa_add(wal,
>> FF_MODE2,
>> - FF_MODE2_GS_TIMER_MASK, FF_MODE2_GS_TIMER_224, 0);
>> + FF_MODE2_GS_TIMER_MASK,
>> + FF_MODE2_GS_TIMER_224, 0);
>> }
>>
>> static void
>> --
>> 2.30.1
>>
>
>--
>Matt Roper
>Graphics Software Engineer
>VTT-OSGC Platform Enablement
>Intel Corporation
>(916) 356-2795
More information about the Intel-gfx
mailing list