Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c0a6aa7e authored by Chris Wilson's avatar Chris Wilson
Browse files

drm/i915: Show actual alongside requested frequency in debugfs/i915_rps_boost_info



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: default avatarTomi Sarvela <tomi.p.sarvela@intel.com>
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20181002113221.29208-1-chris@chris-wilson.co.uk
parent 89d5efcc
Loading
Loading
Loading
Loading
+18 −2
Original line number Diff line number Diff line
@@ -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),