forked from Minki/linux
drm/i915: Add PM interrupt details and RPS thresholds to debugfs
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>
This commit is contained in:
parent
180b813ced
commit
0d8f94912a
@ -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 gt_perf_status = I915_READ(GEN6_GT_PERF_STATUS);
|
||||||
u32 rp_state_limits = I915_READ(GEN6_RP_STATE_LIMITS);
|
u32 rp_state_limits = I915_READ(GEN6_RP_STATE_LIMITS);
|
||||||
u32 rp_state_cap = I915_READ(GEN6_RP_STATE_CAP);
|
u32 rp_state_cap = I915_READ(GEN6_RP_STATE_CAP);
|
||||||
|
u32 rpmodectl, rpinclimit, rpdeclimit;
|
||||||
u32 rpstat, cagf, reqf;
|
u32 rpstat, cagf, reqf;
|
||||||
u32 rpupei, rpcurup, rpprevup;
|
u32 rpupei, rpcurup, rpprevup;
|
||||||
u32 rpdownei, rpcurdown, rpprevdown;
|
u32 rpdownei, rpcurdown, rpprevdown;
|
||||||
@ -1011,6 +1012,10 @@ static int i915_cur_delayinfo(struct seq_file *m, void *unused)
|
|||||||
reqf >>= 25;
|
reqf >>= 25;
|
||||||
reqf *= GT_FREQUENCY_MULTIPLIER;
|
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);
|
rpstat = I915_READ(GEN6_RPSTAT1);
|
||||||
rpupei = I915_READ(GEN6_RP_CUR_UP_EI);
|
rpupei = I915_READ(GEN6_RP_CUR_UP_EI);
|
||||||
rpcurup = I915_READ(GEN6_RP_CUR_UP);
|
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);
|
gen6_gt_force_wake_put(dev_priv, FORCEWAKE_ALL);
|
||||||
mutex_unlock(&dev->struct_mutex);
|
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, "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",
|
seq_printf(m, "Render p-state ratio: %d\n",
|
||||||
(gt_perf_status & 0xff00) >> 8);
|
(gt_perf_status & 0xff00) >> 8);
|
||||||
seq_printf(m, "Render p-state VID: %d\n",
|
seq_printf(m, "Render p-state VID: %d\n",
|
||||||
gt_perf_status & 0xff);
|
gt_perf_status & 0xff);
|
||||||
seq_printf(m, "Render p-state limit: %d\n",
|
seq_printf(m, "Render p-state limit: %d\n",
|
||||||
rp_state_limits & 0xff);
|
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, "RPNSWREQ: %dMHz\n", reqf);
|
||||||
seq_printf(m, "CAGF: %dMHz\n", cagf);
|
seq_printf(m, "CAGF: %dMHz\n", cagf);
|
||||||
seq_printf(m, "RP CUR UP EI: %dus\n", rpupei &
|
seq_printf(m, "RP CUR UP EI: %dus\n", rpupei &
|
||||||
|
Loading…
Reference in New Issue
Block a user