Re: [PATCH v4 11/26] drm/i915/slpc: Update sysfs/debugfs interfaces for frequency parameters

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On 9/9/2016 10:43 PM, Chris Wilson wrote:
On Fri, Sep 09, 2016 at 06:21:30PM +0530, Sagar Arun Kamble wrote:
From: Tom O'Rourke <Tom.O'Rourke@xxxxxxxxx>

When SLPC is controlling requested frequency, the rps.cur_freq
value is not used to make the frequency request.

Requested frequency from register RPNSWREQ has the value
most recently requested by SLPC firmware. Adding new sysfs
interface gt_req_freq_mhz to know this value.
SLPC requested value needs to be made available to i915 without
reading RPNSWREQ.

v1: Replace HAS_SLPC with intel_slpc_active (Paulo)
     Avoid magic numbers (Nick)
     Use a function for repeated code (Jon)

v2: Add "SLPC Active" to i915_frequency_info output and
     don't update cur_freq as it is driver internal request. (Chris)

v3: Removing sysfs interface gt_req_freq_mhz out of this patch
     for proper division of functionality. (Sagar)

v4: idle_freq, boost_freq are also not used with SLPC.

Signed-off-by: Tom O'Rourke <Tom.O'Rourke@xxxxxxxxx>
Signed-off-by: Sagar Arun Kamble <sagar.a.kamble@xxxxxxxxx>
---
  drivers/gpu/drm/i915/i915_debugfs.c | 24 ++++++++++++++++++------
  drivers/gpu/drm/i915/i915_sysfs.c   |  3 +++
  2 files changed, 21 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index 02b627e..71bce32 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -1083,6 +1083,9 @@ static int i915_frequency_info(struct seq_file *m, void *unused)
intel_runtime_pm_get(dev_priv); + if (intel_slpc_active(dev_priv))
+		seq_puts(m, "SLPC Active\n");
+
  	if (IS_GEN5(dev_priv)) {
  		u16 rgvswctl = I915_READ16(MEMSWCTL);
  		u16 rgvstat = I915_READ16(MEMSTAT_ILK);
@@ -1250,15 +1253,21 @@ static int i915_frequency_info(struct seq_file *m, void *unused)
  		seq_printf(m, "Max overclocked frequency: %dMHz\n",
  			   intel_gpu_freq(dev_priv, dev_priv->rps.max_freq));
- seq_printf(m, "Current freq: %d MHz\n",
-			   intel_gpu_freq(dev_priv, dev_priv->rps.cur_freq));
+		if (!intel_slpc_active(dev_priv)) {
Just keep printing them, we have the banner upfront, and being able to
track and compare internal values vs hw state is still important. (And
the ordering was fairly intentional.)
cur_freq, idle_freq, boost_freq will not be applicable with SLPC.
With SLPC we should rely on value from RPNSWREQ for cur_freq.

+			seq_printf(m, "Current freq: %d MHz\n",
+				   intel_gpu_freq(dev_priv,
+						  dev_priv->rps.cur_freq));
+			seq_printf(m, "Idle freq: %d MHz\n",
+				   intel_gpu_freq(dev_priv,
+						  dev_priv->rps.idle_freq));
+			seq_printf(m, "Boost freq: %d MHz\n",
+				   intel_gpu_freq(dev_priv,
+						  dev_priv->rps.boost_freq));
+		}
+
  		seq_printf(m, "Actual freq: %d MHz\n", cagf);
-		seq_printf(m, "Idle freq: %d MHz\n",
-			   intel_gpu_freq(dev_priv, dev_priv->rps.idle_freq));
  		seq_printf(m, "Min freq: %d MHz\n",
  			   intel_gpu_freq(dev_priv, dev_priv->rps.min_freq));
-		seq_printf(m, "Boost freq: %d MHz\n",
-			   intel_gpu_freq(dev_priv, dev_priv->rps.boost_freq));
  		seq_printf(m, "Max freq: %d MHz\n",
  			   intel_gpu_freq(dev_priv, dev_priv->rps.max_freq));
  		seq_printf(m,
@@ -2315,6 +2324,9 @@ static int i915_rps_boost_info(struct seq_file *m, void *data)
  	struct drm_device *dev = &dev_priv->drm;
  	struct drm_file *file;
+ if (intel_slpc_active(dev_priv))
+		return -ENODEV;
+
  	seq_printf(m, "RPS enabled? %d\n", dev_priv->rps.enabled);
  	seq_printf(m, "GPU busy? %s [%x]\n",
  		   yesno(dev_priv->gt.awake), dev_priv->gt.active_engines);
diff --git a/drivers/gpu/drm/i915/i915_sysfs.c b/drivers/gpu/drm/i915/i915_sysfs.c
index 1012eee..020d64e 100644
--- a/drivers/gpu/drm/i915/i915_sysfs.c
+++ b/drivers/gpu/drm/i915/i915_sysfs.c
@@ -299,6 +299,9 @@ static ssize_t gt_cur_freq_mhz_show(struct device *kdev,
  {
  	struct drm_i915_private *dev_priv = kdev_minor_to_i915(kdev);
+ if (intel_slpc_active(dev_priv))
+		return -ENODEV;
Ok, I had a thought that we allowed the user to directly set cur freq,
but we don't.
-Chris


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




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux