diff mbox

drm/i915: Add PM interrupt details and RPS thresholds to debugfs

Message ID 1395911174-8563-1-git-send-email-chris@chris-wilson.co.uk (mailing list archive)
State New, archived
Headers show

Commit Message

Chris Wilson March 27, 2014, 9:06 a.m. UTC
When trying to determine whether RPS is working as intended, more
information is better. In particular, what interrupts are being
generated and the various thresholds for generating them.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
---
 drivers/gpu/drm/i915/i915_debugfs.c | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

Comments

Daniel Vetter March 27, 2014, 1:54 p.m. UTC | #1
On Thu, Mar 27, 2014 at 09:06:14AM +0000, Chris Wilson wrote:
> When trying to determine whether RPS is working as intended, more
> information is better. In particular, what interrupts are being
> generated and the various thresholds for generating them.
> 
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>

Queued for -next, thanks for the patch.
-Daniel
deepak.s@linux.intel.com March 27, 2014, 2:56 p.m. UTC | #2
On Thursday 27 March 2014 02:36 PM, Chris Wilson wrote:
> When trying to determine whether RPS is working as intended, more
> information is better. In particular, what interrupts are being
> generated and the various thresholds for generating them.
>
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> ---
>   drivers/gpu/drm/i915/i915_debugfs.c | 16 +++++++++++++++-
>   1 file changed, 15 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
> index e0c991122dd2..4a2bcadadaf8 100644
> --- a/drivers/gpu/drm/i915/i915_debugfs.c
> +++ b/drivers/gpu/drm/i915/i915_debugfs.c
> @@ -1095,6 +1095,7 @@ static int i915_cur_delayinfo(struct seq_file *m, void *unused)
>   		u32 gt_perf_status = I915_READ(GEN6_GT_PERF_STATUS);
>   		u32 rp_state_limits = I915_READ(GEN6_RP_STATE_LIMITS);
>   		u32 rp_state_cap = I915_READ(GEN6_RP_STATE_CAP);
> +		u32 rpmodectl, rpinclimit, rpdeclimit;
>   		u32 rpstat, cagf, reqf;
>   		u32 rpupei, rpcurup, rpprevup;
>   		u32 rpdownei, rpcurdown, rpprevdown;
> @@ -1115,6 +1116,10 @@ static int i915_cur_delayinfo(struct seq_file *m, void *unused)
>   			reqf >>= 25;
>   		reqf *= GT_FREQUENCY_MULTIPLIER;
>   
> +		rpmodectl = I915_READ(GEN6_RP_CONTROL);
> +		rpinclimit = I915_READ(GEN6_RP_UP_THRESHOLD);
> +		rpdeclimit = I915_READ(GEN6_RP_DOWN_THRESHOLD);
> +
>   		rpstat = I915_READ(GEN6_RPSTAT1);
>   		rpupei = I915_READ(GEN6_RP_CUR_UP_EI);
>   		rpcurup = I915_READ(GEN6_RP_CUR_UP);
> @@ -1131,14 +1136,23 @@ static int i915_cur_delayinfo(struct seq_file *m, void *unused)
>   		gen6_gt_force_wake_put(dev_priv, FORCEWAKE_ALL);
>   		mutex_unlock(&dev->struct_mutex);
>   
> +		seq_printf(m, "PM IER=0x%08x IMR=0x%08x ISR=0x%08x IIR=0x%08x, MASK=0x%08x\n",
> +			   I915_READ(GEN6_PMIER),
> +			   I915_READ(GEN6_PMIMR),
> +			   I915_READ(GEN6_PMISR),
> +			   I915_READ(GEN6_PMIIR),
> +			   I915_READ(GEN6_PMINTRMSK));
>   		seq_printf(m, "GT_PERF_STATUS: 0x%08x\n", gt_perf_status);
> -		seq_printf(m, "RPSTAT1: 0x%08x\n", rpstat);
>   		seq_printf(m, "Render p-state ratio: %d\n",
>   			   (gt_perf_status & 0xff00) >> 8);
>   		seq_printf(m, "Render p-state VID: %d\n",
>   			   gt_perf_status & 0xff);
>   		seq_printf(m, "Render p-state limit: %d\n",
>   			   rp_state_limits & 0xff);
> +		seq_printf(m, "RPSTAT1: 0x%08x\n", rpstat);
> +		seq_printf(m, "RPMODECTL: 0x%08x\n", rpmodectl);
> +		seq_printf(m, "RPINCLIMIT: 0x%08x\n", rpinclimit);
> +		seq_printf(m, "RPDECLIMIT: 0x%08x\n", rpdeclimit);
>   		seq_printf(m, "RPNSWREQ: %dMHz\n", reqf);
>   		seq_printf(m, "CAGF: %dMHz\n", cagf);
>   		seq_printf(m, "RP CUR UP EI: %dus\n", rpupei &

Agreed more information better for debugging :)

Reviewed-by: Deepak S <deepak.s@linux.intel.com>
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index e0c991122dd2..4a2bcadadaf8 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -1095,6 +1095,7 @@  static int i915_cur_delayinfo(struct seq_file *m, void *unused)
 		u32 gt_perf_status = I915_READ(GEN6_GT_PERF_STATUS);
 		u32 rp_state_limits = I915_READ(GEN6_RP_STATE_LIMITS);
 		u32 rp_state_cap = I915_READ(GEN6_RP_STATE_CAP);
+		u32 rpmodectl, rpinclimit, rpdeclimit;
 		u32 rpstat, cagf, reqf;
 		u32 rpupei, rpcurup, rpprevup;
 		u32 rpdownei, rpcurdown, rpprevdown;
@@ -1115,6 +1116,10 @@  static int i915_cur_delayinfo(struct seq_file *m, void *unused)
 			reqf >>= 25;
 		reqf *= GT_FREQUENCY_MULTIPLIER;
 
+		rpmodectl = I915_READ(GEN6_RP_CONTROL);
+		rpinclimit = I915_READ(GEN6_RP_UP_THRESHOLD);
+		rpdeclimit = I915_READ(GEN6_RP_DOWN_THRESHOLD);
+
 		rpstat = I915_READ(GEN6_RPSTAT1);
 		rpupei = I915_READ(GEN6_RP_CUR_UP_EI);
 		rpcurup = I915_READ(GEN6_RP_CUR_UP);
@@ -1131,14 +1136,23 @@  static int i915_cur_delayinfo(struct seq_file *m, void *unused)
 		gen6_gt_force_wake_put(dev_priv, FORCEWAKE_ALL);
 		mutex_unlock(&dev->struct_mutex);
 
+		seq_printf(m, "PM IER=0x%08x IMR=0x%08x ISR=0x%08x IIR=0x%08x, MASK=0x%08x\n",
+			   I915_READ(GEN6_PMIER),
+			   I915_READ(GEN6_PMIMR),
+			   I915_READ(GEN6_PMISR),
+			   I915_READ(GEN6_PMIIR),
+			   I915_READ(GEN6_PMINTRMSK));
 		seq_printf(m, "GT_PERF_STATUS: 0x%08x\n", gt_perf_status);
-		seq_printf(m, "RPSTAT1: 0x%08x\n", rpstat);
 		seq_printf(m, "Render p-state ratio: %d\n",
 			   (gt_perf_status & 0xff00) >> 8);
 		seq_printf(m, "Render p-state VID: %d\n",
 			   gt_perf_status & 0xff);
 		seq_printf(m, "Render p-state limit: %d\n",
 			   rp_state_limits & 0xff);
+		seq_printf(m, "RPSTAT1: 0x%08x\n", rpstat);
+		seq_printf(m, "RPMODECTL: 0x%08x\n", rpmodectl);
+		seq_printf(m, "RPINCLIMIT: 0x%08x\n", rpinclimit);
+		seq_printf(m, "RPDECLIMIT: 0x%08x\n", rpdeclimit);
 		seq_printf(m, "RPNSWREQ: %dMHz\n", reqf);
 		seq_printf(m, "CAGF: %dMHz\n", cagf);
 		seq_printf(m, "RP CUR UP EI: %dus\n", rpupei &