All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
To: intel-gfx@lists.freedesktop.org
Cc: Daniel Vetter <daniel.vetter@intel.com>,
	Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>,
	Rodrigo Vivi <rodrigo.vivi@intel.com>
Subject: [PATCH 5/5] drm/i915/psr: Timestamps for PSR entry and exit interrupts.
Date: Tue, 20 Mar 2018 15:41:51 -0700	[thread overview]
Message-ID: <20180320224151.6009-6-dhinakaran.pandiyan@intel.com> (raw)
In-Reply-To: <20180320224151.6009-1-dhinakaran.pandiyan@intel.com>

Timestamps are useful for IGT tests that trigger PSR exit and/or wait for
PSR entry.

Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Daniel Vetter <daniel.vetter@intel.com>
Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
---
 drivers/gpu/drm/i915/i915_debugfs.c | 12 ++++++++++++
 drivers/gpu/drm/i915/i915_drv.h     |  3 +++
 drivers/gpu/drm/i915/intel_psr.c    | 21 +++++++++++++++++++--
 3 files changed, 34 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index 669f3d56054a..d28dc4d8388e 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -2686,6 +2686,18 @@ static int i915_edp_psr_status(struct seq_file *m, void *data)
 	}
 	mutex_unlock(&dev_priv->psr.lock);
 
+	if (READ_ONCE(dev_priv->psr.debug)) {
+		unsigned int seq;
+
+		do {
+			seq = read_seqbegin(&dev_priv->psr.debug_lock);
+			seq_printf(m, "Last attempted entry at: %lld\n",
+				   dev_priv->psr.last_entry_attempt);
+			seq_printf(m, "Last exit at: %lld\n",
+				   dev_priv->psr.last_exit);
+		} while (read_seqretry(&dev_priv->psr.debug_lock, seq));
+	}
+
 	intel_runtime_pm_put(dev_priv);
 	return 0;
 }
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 136fa2267a66..b8170882e1ab 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -609,6 +609,9 @@ struct i915_psr {
 	bool alpm;
 	bool has_hw_tracking;
 	bool debug;
+	ktime_t last_entry_attempt;
+	ktime_t last_exit;
+	seqlock_t debug_lock;
 
 	void (*enable_source)(struct intel_dp *,
 			      const struct intel_crtc_state *);
diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
index 64ecea80438d..a83d95b1b587 100644
--- a/drivers/gpu/drm/i915/intel_psr.c
+++ b/drivers/gpu/drm/i915/intel_psr.c
@@ -125,28 +125,44 @@ void intel_psr_irq_handler(struct drm_i915_private *dev_priv, u32 psr_iir)
 {
 	u32 transcoders = BIT(TRANSCODER_EDP);
 	enum transcoder cpu_transcoder;
+	ktime_t time_ns =  ktime_get();
+	unsigned long flags = 0;
 
 	if (INTEL_GEN(dev_priv) >= 8)
 		transcoders |= BIT(TRANSCODER_A) |
 			       BIT(TRANSCODER_B) |
 			       BIT(TRANSCODER_C);
 
+	write_seqlock_irqsave(&dev_priv->psr.debug_lock, flags);
 	for_each_cpu_transcoder_masked(dev_priv, cpu_transcoder, transcoders) {
+		bool handled = false;
+
+		/* PSR supported only on one transcoder currently */
+		WARN_ON_ONCE(handled);
+
 		/* FIXME: Exit PSR when this happens. */
-		if (psr_iir & EDP_PSR_ERROR(cpu_transcoder))
+		if (psr_iir & EDP_PSR_ERROR(cpu_transcoder)) {
+			handled = true;
 			DRM_DEBUG_KMS("[transcoder %s] PSR aux error\n",
 				      transcoder_name(cpu_transcoder));
 
+		}
+
 		if (psr_iir & EDP_PSR_PRE_ENTRY(cpu_transcoder)) {
-			DRM_DEBUG_KMS("[transcoder %s] PSR entry in 2 vblanks\n",
+			handled = true;
+			dev_priv->psr.last_entry_attempt = time_ns;
+			DRM_DEBUG_KMS("[transcoder %s] PSR entry attempt in 2 vblanks\n",
 				      transcoder_name(cpu_transcoder));
 		}
 
 		if (psr_iir & EDP_PSR_POST_EXIT(cpu_transcoder)) {
+			handled = true;
+			dev_priv->psr.last_exit = time_ns;
 			DRM_DEBUG_KMS("[transcoder %s] PSR exit completed\n",
 				      transcoder_name(cpu_transcoder));
 		}
 	}
+	write_sequnlock_irqrestore(&dev_priv->psr.debug_lock, flags);
 }
 
 static bool intel_dp_get_y_cord_status(struct intel_dp *intel_dp)
@@ -1160,6 +1176,7 @@ void intel_psr_init(struct drm_i915_private *dev_priv)
 
 	INIT_DELAYED_WORK(&dev_priv->psr.work, intel_psr_work);
 	mutex_init(&dev_priv->psr.lock);
+	seqlock_init(&dev_priv->psr.debug_lock);
 
 	if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) {
 		dev_priv->psr.enable_source = vlv_psr_enable_source;
-- 
2.14.1

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

  parent reply	other threads:[~2018-03-20 22:42 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-20 22:41 [PATCH 0/5] PSR interrupts Dhinakaran Pandiyan
2018-03-20 22:41 ` [PATCH 1/5] drm/i915: Enable edp psr error interrupts on hsw Dhinakaran Pandiyan
2018-03-21 18:59   ` Ville Syrjälä
2018-03-21 19:19     ` Pandiyan, Dhinakaran
2018-03-21 19:29       ` Ville Syrjälä
2018-03-22  1:19         ` Pandiyan, Dhinakaran
2018-03-22 11:33           ` Ville Syrjälä
2018-03-22 20:39             ` Rodrigo Vivi
2018-03-23  0:01             ` Pandiyan, Dhinakaran
2018-03-20 22:41 ` [PATCH 2/5] drm/i915: Drop reg_write from the PSR mask Dhinakaran Pandiyan
2018-03-20 22:41 ` [PATCH 3/5] drm/i915: Enable edp psr error interrupts on bdw+ Dhinakaran Pandiyan
2018-03-20 22:41 ` [PATCH 4/5] drm/i915/psr: Control PSR interrupts via debugfs Dhinakaran Pandiyan
2018-03-21 19:45   ` Ville Syrjälä
2018-03-22  0:59     ` Pandiyan, Dhinakaran
2018-03-20 22:41 ` Dhinakaran Pandiyan [this message]
2018-03-21 19:48   ` [PATCH 5/5] drm/i915/psr: Timestamps for PSR entry and exit interrupts Ville Syrjälä
2018-03-22  1:05     ` Pandiyan, Dhinakaran
2018-03-22  9:21       ` Ville Syrjälä
2018-03-22 20:59         ` Pandiyan, Dhinakaran
2018-03-22 21:08   ` Chris Wilson
2018-03-22 23:55     ` Pandiyan, Dhinakaran
2018-03-21  8:02 ` ✗ Fi.CI.CHECKPATCH: warning for PSR interrupts Patchwork
2018-03-21  8:03 ` ✗ Fi.CI.SPARSE: " Patchwork
2018-03-21  8:16 ` ✓ Fi.CI.BAT: success " Patchwork
2018-03-21  9:13 ` ✓ Fi.CI.IGT: " Patchwork

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180320224151.6009-6-dhinakaran.pandiyan@intel.com \
    --to=dhinakaran.pandiyan@intel.com \
    --cc=daniel.vetter@intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=rodrigo.vivi@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.