drm/i915: Show actual alongside requested frequency in debugfs/i915_rps_boost_info
authorChris Wilson <chris@chris-wilson.co.uk>
Tue, 2 Oct 2018 11:32:21 +0000 (12:32 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Tue, 2 Oct 2018 11:54:30 +0000 (12:54 +0100)
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.

v2: vlv/chv needs more tlc

Reported-by: Tomi Sarvela <tomi.p.sarvela@intel.com>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20181002113221.29208-1-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/i915_debugfs.c

index b4744a6..f42e93b 100644 (file)
@@ -2215,8 +2215,23 @@ 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);
+                       act_freq = (act_freq >> 8) & 0xff;
+                       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 +2239,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),