On CNL, individual ware rate limit was added to each engine.

GT can only go to RC6 if both Render and Media engines are
idividually qualified. So we need to set their individual
wake rate limit.

+-----------------+---------------+--------------+--------------+
|                 |    GT RC6     |  Render C6   |   Media C6   |
+-----------------+---------------+--------------+--------------+
| Wake rate limit | 0xA09C[31:16] | 0xA09C[15:0] | 0xA0A0[15:0] |
+-----------------+---------------+--------------+--------------+

Cc: Nathan Ciobanu <[email protected]>
Cc: Wayne Boyer <[email protected]>
Cc: Joe Konno <[email protected]>
Cc: David Weinehall <[email protected]>
Signed-off-by: Rodrigo Vivi <[email protected]>
---
 drivers/gpu/drm/i915/i915_reg.h |  1 +
 drivers/gpu/drm/i915/intel_pm.c | 15 +++++++++++----
 2 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index 68a58cce6ab1..f138eae82bf0 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -7905,6 +7905,7 @@ enum {
 #define GEN6_RC1_WAKE_RATE_LIMIT               _MMIO(0xA098)
 #define GEN6_RC6_WAKE_RATE_LIMIT               _MMIO(0xA09C)
 #define GEN6_RC6pp_WAKE_RATE_LIMIT             _MMIO(0xA0A0)
+#define GEN10_MEDIA_WAKE_RATE_LIMIT            _MMIO(0xA0A0)
 #define GEN6_RC_EVALUATION_INTERVAL            _MMIO(0xA0A8)
 #define GEN6_RC_IDLE_HYSTERSIS                 _MMIO(0xA0AC)
 #define GEN6_RC_SLEEP                          _MMIO(0xA0B0)
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index 5fdae39b1969..b193eda65e81 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -6605,12 +6605,19 @@ static void gen9_enable_rc6(struct drm_i915_private 
*dev_priv)
        I915_WRITE(GEN6_RC_CONTROL, 0);
 
        /* 2b: Program RC6 thresholds.*/
-
-       /* WaRsDoubleRc6WrlWithCoarsePowerGating: Doubling WRL only when CPG is 
enabled */
-       if (IS_SKYLAKE(dev_priv))
+       if (INTEL_GEN(dev_priv) >= 10) {
+               I915_WRITE(GEN6_RC6_WAKE_RATE_LIMIT, 54 << 16 | 54);
+               I915_WRITE(GEN10_MEDIA_WAKE_RATE_LIMIT, 54);
+       } else if (IS_SKYLAKE(dev_priv)) {
+               /*
+                * WaRsDoubleRc6WrlWithCoarsePowerGating:skl Doubling WRL only
+                * when CPG is enabled
+                */
                I915_WRITE(GEN6_RC6_WAKE_RATE_LIMIT, 108 << 16);
-       else
+       } else {
                I915_WRITE(GEN6_RC6_WAKE_RATE_LIMIT, 54 << 16);
+       }
+
        I915_WRITE(GEN6_RC_EVALUATION_INTERVAL, 125000); /* 12500 * 1280ns */
        I915_WRITE(GEN6_RC_IDLE_HYSTERSIS, 25); /* 25 * 1280ns */
        for_each_engine(engine, dev_priv, id)
-- 
2.13.5

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to