diff mbox

[v3,01/22] drm/i915: Use a mask when applying WaProgramL3SqcReg1Default

Message ID 1507928056-6966-2-git-send-email-oscar.mateo@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

oscar.mateo@intel.com Oct. 13, 2017, 8:53 p.m. UTC
Otherwise we are blasting other bits in GEN8_L3SQCREG1 that might be important
(although we probably aren't at the moment because 0 seems to be the default
for all the other bits).

Fixes: 050fc46 ("drm/i915:bxt: implement WaProgramL3SqcReg1DefaultForPerf")
Fixes: 450174f ("drm/i915/chv: Tune L3 SQC credits based on actual latencies")
Signed-off-by: Oscar Mateo <oscar.mateo@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Imre Deak <imre.deak@intel.com>
Cc: Michel Thierry <michel.thierry@intel.com>
---
 drivers/gpu/drm/i915/i915_reg.h        | 1 +
 drivers/gpu/drm/i915/intel_engine_cs.c | 9 ++++++---
 drivers/gpu/drm/i915/intel_pm.c        | 9 ++++++---
 3 files changed, 13 insertions(+), 6 deletions(-)

Comments

Chris Wilson Oct. 13, 2017, 9:28 p.m. UTC | #1
Quoting Oscar Mateo (2017-10-13 21:53:55)
> Otherwise we are blasting other bits in GEN8_L3SQCREG1 that might be important
> (although we probably aren't at the moment because 0 seems to be the default
> for all the other bits).
> 
> Fixes: 050fc46 ("drm/i915:bxt: implement WaProgramL3SqcReg1DefaultForPerf")
> Fixes: 450174f ("drm/i915/chv: Tune L3 SQC credits based on actual latencies")
> Signed-off-by: Oscar Mateo <oscar.mateo@intel.com>
> Cc: Chris Wilson <chris@chris-wilson.co.uk>
> Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Cc: Imre Deak <imre.deak@intel.com>
> Cc: Michel Thierry <michel.thierry@intel.com>

If this gets lost in the series, please send separately to bring
attention to the bugfix. Hopefully r-b's will be prompt...

> ---
>  drivers/gpu/drm/i915/i915_reg.h        | 1 +
>  drivers/gpu/drm/i915/intel_engine_cs.c | 9 ++++++---
>  drivers/gpu/drm/i915/intel_pm.c        | 9 ++++++---
>  3 files changed, 13 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
> index d2d0a83..5858f5f 100644
> --- a/drivers/gpu/drm/i915/i915_reg.h
> +++ b/drivers/gpu/drm/i915/i915_reg.h
> @@ -7041,6 +7041,7 @@ enum {
>   */
>  #define  L3_GENERAL_PRIO_CREDITS(x)            (((x) >> 1) << 19)
>  #define  L3_HIGH_PRIO_CREDITS(x)               (((x) >> 1) << 14)
> +#define  L3_PRIO_CREDITS_MASK                  (0x1f << 19) | (0x1f << 14)
>  
>  #define GEN7_L3CNTLREG1                                _MMIO(0xB01C)
>  #define  GEN7_WA_FOR_GEN7_L3_CONTROL                   0x3C47FF8C
> diff --git a/drivers/gpu/drm/i915/intel_engine_cs.c b/drivers/gpu/drm/i915/intel_engine_cs.c
> index a59b2a3..40e439c 100644
> --- a/drivers/gpu/drm/i915/intel_engine_cs.c
> +++ b/drivers/gpu/drm/i915/intel_engine_cs.c
> @@ -1252,9 +1252,12 @@ static int bxt_init_workarounds(struct intel_engine_cs *engine)
>         }
>  
>         /* WaProgramL3SqcReg1DefaultForPerf:bxt */
> -       if (IS_BXT_REVID(dev_priv, BXT_REVID_B0, REVID_FOREVER))
> -               I915_WRITE(GEN8_L3SQCREG1, L3_GENERAL_PRIO_CREDITS(62) |
> -                                          L3_HIGH_PRIO_CREDITS(2));
> +       if (IS_BXT_REVID(dev_priv, BXT_REVID_B0, REVID_FOREVER)) {
> +               u32 val = I915_READ(GEN8_L3SQCREG1);
> +               val &= ~L3_PRIO_CREDITS_MASK;
> +               val |= L3_GENERAL_PRIO_CREDITS(62) | L3_HIGH_PRIO_CREDITS(2);
> +               I915_WRITE(GEN8_L3SQCREG1, val);
> +       }
>  
>         /* WaToEnableHwFixForPushConstHWBug:bxt */
>         if (IS_BXT_REVID(dev_priv, BXT_REVID_C0, REVID_FOREVER))
> diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
> index 2fcff97..6c2c8d8 100644
> --- a/drivers/gpu/drm/i915/intel_pm.c
> +++ b/drivers/gpu/drm/i915/intel_pm.c
> @@ -8476,15 +8476,18 @@ static void gen8_set_l3sqc_credits(struct drm_i915_private *dev_priv,
>                                    int general_prio_credits,
>                                    int high_prio_credits)
>  {
> +       u32 val;
>         u32 misccpctl;
>  
>         /* WaTempDisableDOPClkGating:bdw */
>         misccpctl = I915_READ(GEN7_MISCCPCTL);
>         I915_WRITE(GEN7_MISCCPCTL, misccpctl & ~GEN7_DOP_CLOCK_GATE_ENABLE);
>  
> -       I915_WRITE(GEN8_L3SQCREG1,
> -                  L3_GENERAL_PRIO_CREDITS(general_prio_credits) |
> -                  L3_HIGH_PRIO_CREDITS(high_prio_credits));
> +       val = I915_READ(GEN8_L3SQCREG1);
> +       val &= ~L3_PRIO_CREDITS_MASK;
> +       val |= L3_GENERAL_PRIO_CREDITS(general_prio_credits);
> +       val |= L3_HIGH_PRIO_CREDITS(high_prio_credits);
> +       I915_WRITE(GEN8_L3SQCREG1, val);
>  
>         /*
>          * Wait at least 100 clocks before re-enabling clock gating.
> -- 
> 1.9.1
>
Michel Thierry Oct. 14, 2017, 12:26 a.m. UTC | #2
On 10/13/2017 2:28 PM, Chris Wilson wrote:
> Quoting Oscar Mateo (2017-10-13 21:53:55)
>> Otherwise we are blasting other bits in GEN8_L3SQCREG1 that might be important
>> (although we probably aren't at the moment because 0 seems to be the default
>> for all the other bits).
>>
>> Fixes: 050fc46 ("drm/i915:bxt: implement WaProgramL3SqcReg1DefaultForPerf")
>> Fixes: 450174f ("drm/i915/chv: Tune L3 SQC credits based on actual latencies")
>> Signed-off-by: Oscar Mateo <oscar.mateo@intel.com>
>> Cc: Chris Wilson <chris@chris-wilson.co.uk>
>> Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
>> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
>> Cc: Imre Deak <imre.deak@intel.com>
>> Cc: Michel Thierry <michel.thierry@intel.com>
> 
> If this gets lost in the series, please send separately to bring
> attention to the bugfix. Hopefully r-b's will be prompt...
> 

This is what happens when someone copies workarounds from another driver 
verbatim :S

Luckily all the other fields should be 0's.

>> ---
>>   drivers/gpu/drm/i915/i915_reg.h        | 1 +
>>   drivers/gpu/drm/i915/intel_engine_cs.c | 9 ++++++---
>>   drivers/gpu/drm/i915/intel_pm.c        | 9 ++++++---
>>   3 files changed, 13 insertions(+), 6 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
>> index d2d0a83..5858f5f 100644
>> --- a/drivers/gpu/drm/i915/i915_reg.h
>> +++ b/drivers/gpu/drm/i915/i915_reg.h
>> @@ -7041,6 +7041,7 @@ enum {
>>    */
>>   #define  L3_GENERAL_PRIO_CREDITS(x)            (((x) >> 1) << 19)
>>   #define  L3_HIGH_PRIO_CREDITS(x)               (((x) >> 1) << 14)
>> +#define  L3_PRIO_CREDITS_MASK                  (0x1f << 19) | (0x1f << 14)

checkpatch.pl is asking to enclose this macro^^^ in parentheses,

+#define  L3_PRIO_CREDITS_MASK             ((0x1f << 19) | (0x1f << 14))

With that,

Reviewed-by: Michel Thierry <michel.thierry@intel.com>

>>
>>   #define GEN7_L3CNTLREG1                                _MMIO(0xB01C)
>>   #define  GEN7_WA_FOR_GEN7_L3_CONTROL                   0x3C47FF8C
>> diff --git a/drivers/gpu/drm/i915/intel_engine_cs.c b/drivers/gpu/drm/i915/intel_engine_cs.c
>> index a59b2a3..40e439c 100644
>> --- a/drivers/gpu/drm/i915/intel_engine_cs.c
>> +++ b/drivers/gpu/drm/i915/intel_engine_cs.c
>> @@ -1252,9 +1252,12 @@ static int bxt_init_workarounds(struct intel_engine_cs *engine)
>>          }
>>
>>          /* WaProgramL3SqcReg1DefaultForPerf:bxt */
>> -       if (IS_BXT_REVID(dev_priv, BXT_REVID_B0, REVID_FOREVER))
>> -               I915_WRITE(GEN8_L3SQCREG1, L3_GENERAL_PRIO_CREDITS(62) |
>> -                                          L3_HIGH_PRIO_CREDITS(2));
>> +       if (IS_BXT_REVID(dev_priv, BXT_REVID_B0, REVID_FOREVER)) {
>> +               u32 val = I915_READ(GEN8_L3SQCREG1);
>> +               val &= ~L3_PRIO_CREDITS_MASK;
>> +               val |= L3_GENERAL_PRIO_CREDITS(62) | L3_HIGH_PRIO_CREDITS(2);
>> +               I915_WRITE(GEN8_L3SQCREG1, val);
>> +       }
>>
>>          /* WaToEnableHwFixForPushConstHWBug:bxt */
>>          if (IS_BXT_REVID(dev_priv, BXT_REVID_C0, REVID_FOREVER))
>> diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
>> index 2fcff97..6c2c8d8 100644
>> --- a/drivers/gpu/drm/i915/intel_pm.c
>> +++ b/drivers/gpu/drm/i915/intel_pm.c
>> @@ -8476,15 +8476,18 @@ static void gen8_set_l3sqc_credits(struct drm_i915_private *dev_priv,
>>                                     int general_prio_credits,
>>                                     int high_prio_credits)
>>   {
>> +       u32 val;
>>          u32 misccpctl;
>>
>>          /* WaTempDisableDOPClkGating:bdw */
>>          misccpctl = I915_READ(GEN7_MISCCPCTL);
>>          I915_WRITE(GEN7_MISCCPCTL, misccpctl & ~GEN7_DOP_CLOCK_GATE_ENABLE);
>>
>> -       I915_WRITE(GEN8_L3SQCREG1,
>> -                  L3_GENERAL_PRIO_CREDITS(general_prio_credits) |
>> -                  L3_HIGH_PRIO_CREDITS(high_prio_credits));
>> +       val = I915_READ(GEN8_L3SQCREG1);
>> +       val &= ~L3_PRIO_CREDITS_MASK;
>> +       val |= L3_GENERAL_PRIO_CREDITS(general_prio_credits);
>> +       val |= L3_HIGH_PRIO_CREDITS(high_prio_credits);
>> +       I915_WRITE(GEN8_L3SQCREG1, val);
>>
>>          /*
>>           * Wait at least 100 clocks before re-enabling clock gating.
>> --
>> 1.9.1
>>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
>
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index d2d0a83..5858f5f 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -7041,6 +7041,7 @@  enum {
  */
 #define  L3_GENERAL_PRIO_CREDITS(x)		(((x) >> 1) << 19)
 #define  L3_HIGH_PRIO_CREDITS(x)		(((x) >> 1) << 14)
+#define  L3_PRIO_CREDITS_MASK			(0x1f << 19) | (0x1f << 14)
 
 #define GEN7_L3CNTLREG1				_MMIO(0xB01C)
 #define  GEN7_WA_FOR_GEN7_L3_CONTROL			0x3C47FF8C
diff --git a/drivers/gpu/drm/i915/intel_engine_cs.c b/drivers/gpu/drm/i915/intel_engine_cs.c
index a59b2a3..40e439c 100644
--- a/drivers/gpu/drm/i915/intel_engine_cs.c
+++ b/drivers/gpu/drm/i915/intel_engine_cs.c
@@ -1252,9 +1252,12 @@  static int bxt_init_workarounds(struct intel_engine_cs *engine)
 	}
 
 	/* WaProgramL3SqcReg1DefaultForPerf:bxt */
-	if (IS_BXT_REVID(dev_priv, BXT_REVID_B0, REVID_FOREVER))
-		I915_WRITE(GEN8_L3SQCREG1, L3_GENERAL_PRIO_CREDITS(62) |
-					   L3_HIGH_PRIO_CREDITS(2));
+	if (IS_BXT_REVID(dev_priv, BXT_REVID_B0, REVID_FOREVER)) {
+		u32 val = I915_READ(GEN8_L3SQCREG1);
+		val &= ~L3_PRIO_CREDITS_MASK;
+		val |= L3_GENERAL_PRIO_CREDITS(62) | L3_HIGH_PRIO_CREDITS(2);
+		I915_WRITE(GEN8_L3SQCREG1, val);
+	}
 
 	/* WaToEnableHwFixForPushConstHWBug:bxt */
 	if (IS_BXT_REVID(dev_priv, BXT_REVID_C0, REVID_FOREVER))
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index 2fcff97..6c2c8d8 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -8476,15 +8476,18 @@  static void gen8_set_l3sqc_credits(struct drm_i915_private *dev_priv,
 				   int general_prio_credits,
 				   int high_prio_credits)
 {
+	u32 val;
 	u32 misccpctl;
 
 	/* WaTempDisableDOPClkGating:bdw */
 	misccpctl = I915_READ(GEN7_MISCCPCTL);
 	I915_WRITE(GEN7_MISCCPCTL, misccpctl & ~GEN7_DOP_CLOCK_GATE_ENABLE);
 
-	I915_WRITE(GEN8_L3SQCREG1,
-		   L3_GENERAL_PRIO_CREDITS(general_prio_credits) |
-		   L3_HIGH_PRIO_CREDITS(high_prio_credits));
+	val = I915_READ(GEN8_L3SQCREG1);
+	val &= ~L3_PRIO_CREDITS_MASK;
+	val |= L3_GENERAL_PRIO_CREDITS(general_prio_credits);
+	val |= L3_HIGH_PRIO_CREDITS(high_prio_credits);
+	I915_WRITE(GEN8_L3SQCREG1, val);
 
 	/*
 	 * Wait at least 100 clocks before re-enabling clock gating.