Previously we hesitated in adding the hw probe for the actual GPU
frequency for rps_boost as it is quite cumbersome, but given some
surprising HW behaviour it would be useful to know both the RPS boost
state and the actual HW state in one location.

Reported-by: Tomi Sarvela <tomi.p.sarv...@intel.com>
Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk>
---
 drivers/gpu/drm/i915/i915_debugfs.c | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_debugfs.c 
b/drivers/gpu/drm/i915/i915_debugfs.c
index b4744a68cd88..ce17a53b3a66 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -2215,8 +2215,22 @@ static int i915_rps_boost_info(struct seq_file *m, void 
*data)
        struct drm_i915_private *dev_priv = node_to_i915(m->private);
        struct drm_device *dev = &dev_priv->drm;
        struct intel_rps *rps = &dev_priv->gt_pm.rps;
+       u32 act_freq = rps->cur_freq;
        struct drm_file *file;
 
+       if (intel_runtime_pm_get_if_in_use(dev_priv)) {
+               if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) {
+                       mutex_lock(&dev_priv->pcu_lock);
+                       act_freq = vlv_punit_read(dev_priv,
+                                                 PUNIT_REG_GPU_FREQ_STS);
+                       mutex_unlock(&dev_priv->pcu_lock);
+               } else {
+                       act_freq = intel_get_cagf(dev_priv,
+                                                 I915_READ(GEN6_RPSTAT1));
+               }
+               intel_runtime_pm_put(dev_priv);
+       }
+
        seq_printf(m, "RPS enabled? %d\n", rps->enabled);
        seq_printf(m, "GPU busy? %s [%d requests]\n",
                   yesno(dev_priv->gt.awake), dev_priv->gt.active_requests);
@@ -2224,8 +2238,9 @@ static int i915_rps_boost_info(struct seq_file *m, void 
*data)
        seq_printf(m, "Boosts outstanding? %d\n",
                   atomic_read(&rps->num_waiters));
        seq_printf(m, "Interactive? %d\n", READ_ONCE(rps->power.interactive));
-       seq_printf(m, "Frequency requested %d\n",
-                  intel_gpu_freq(dev_priv, rps->cur_freq));
+       seq_printf(m, "Frequency requested %d, actual %d\n",
+                  intel_gpu_freq(dev_priv, rps->cur_freq),
+                  intel_gpu_freq(dev_priv, act_freq));
        seq_printf(m, "  min hard:%d, soft:%d; max soft:%d, hard:%d\n",
                   intel_gpu_freq(dev_priv, rps->min_freq),
                   intel_gpu_freq(dev_priv, rps->min_freq_softlimit),
-- 
2.19.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to