Skip to content

Commit 3f983e5

Browse files
dhnkrnrodrigovivi
authored andcommitted
drm/i915/psr: Timestamps for PSR entry and exit interrupts.
Timestamps are useful for IGT tests that trigger PSR exit and/or wait for PSR entry. v2: Removed seqlock (Ville) Removed erroneous warning in irq loop (Chris) Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com> Cc: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com> Reviewed-by: Jose Roberto de Souza <jose.souza@intel.com> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20180403212420.25007-4-dhinakaran.pandiyan@intel.com
1 parent 54fd314 commit 3f983e5

File tree

3 files changed

+16
-2
lines changed

3 files changed

+16
-2
lines changed

drivers/gpu/drm/i915/i915_debugfs.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2686,6 +2686,13 @@ static int i915_edp_psr_status(struct seq_file *m, void *data)
26862686
}
26872687
mutex_unlock(&dev_priv->psr.lock);
26882688

2689+
if (READ_ONCE(dev_priv->psr.debug)) {
2690+
seq_printf(m, "Last attempted entry at: %lld\n",
2691+
dev_priv->psr.last_entry_attempt);
2692+
seq_printf(m, "Last exit at: %lld\n",
2693+
dev_priv->psr.last_exit);
2694+
}
2695+
26892696
intel_runtime_pm_put(dev_priv);
26902697
return 0;
26912698
}

drivers/gpu/drm/i915/i915_drv.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -611,6 +611,8 @@ struct i915_psr {
611611
bool psr2_enabled;
612612
u8 sink_sync_latency;
613613
bool debug;
614+
ktime_t last_entry_attempt;
615+
ktime_t last_exit;
614616

615617
void (*enable_source)(struct intel_dp *,
616618
const struct intel_crtc_state *);

drivers/gpu/drm/i915/intel_psr.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ void intel_psr_irq_handler(struct drm_i915_private *dev_priv, u32 psr_iir)
129129
{
130130
u32 transcoders = BIT(TRANSCODER_EDP);
131131
enum transcoder cpu_transcoder;
132+
ktime_t time_ns = ktime_get();
132133

133134
if (INTEL_GEN(dev_priv) >= 8)
134135
transcoders |= BIT(TRANSCODER_A) |
@@ -141,13 +142,17 @@ void intel_psr_irq_handler(struct drm_i915_private *dev_priv, u32 psr_iir)
141142
DRM_DEBUG_KMS("[transcoder %s] PSR aux error\n",
142143
transcoder_name(cpu_transcoder));
143144

144-
if (psr_iir & EDP_PSR_PRE_ENTRY(cpu_transcoder))
145+
if (psr_iir & EDP_PSR_PRE_ENTRY(cpu_transcoder)) {
146+
dev_priv->psr.last_entry_attempt = time_ns;
145147
DRM_DEBUG_KMS("[transcoder %s] PSR entry attempt in 2 vblanks\n",
146148
transcoder_name(cpu_transcoder));
149+
}
147150

148-
if (psr_iir & EDP_PSR_POST_EXIT(cpu_transcoder))
151+
if (psr_iir & EDP_PSR_POST_EXIT(cpu_transcoder)) {
152+
dev_priv->psr.last_exit = time_ns;
149153
DRM_DEBUG_KMS("[transcoder %s] PSR exit completed\n",
150154
transcoder_name(cpu_transcoder));
155+
}
151156
}
152157
}
153158

0 commit comments

Comments
 (0)