drm/i915: Add PM interrupt details and RPS thresholds to debugfs
authorChris Wilson <chris@chris-wilson.co.uk>
Thu, 27 Mar 2014 09:06:14 +0000 (09:06 +0000)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Tue, 1 Apr 2014 20:58:17 +0000 (22:58 +0200)
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>
Reviewed-by: Deepak S <deepak.s@linux.intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/i915_debugfs.c

index b27b7a5244b14b6764fb2783640f9c8a7e595399..3df2a42ca5f5f5ee422cc685114a7a5663df18fb 100644 (file)
@@ -991,6 +991,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;
@@ -1011,6 +1012,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);
@@ -1027,14 +1032,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 &