All of lore.kernel.org
 help / color / mirror / Atom feed
From: Todd Previte <tprevite@gmail.com>
To: intel-gfx@lists.freedesktop.org
Subject: [PATCH 02/10] drm/i915: Update intel_dp_check_link_status() for Displayport compliance testing
Date: Wed, 15 Apr 2015 08:38:39 -0700	[thread overview]
Message-ID: <1429112327-7695-3-git-send-email-tprevite@gmail.com> (raw)
In-Reply-To: <1429112327-7695-1-git-send-email-tprevite@gmail.com>

This patch is a combination of changes that does the following:

	- Ignore disconnected Displayport connectors in check_link_status
	- Move the DPCD read further up in intel_dp_check_link_status()
	- Adds a new function that checks the HW HPD pin status
	- Replace the check for SW connected status with the new function

Adds a check at the top to verify that the device is connected. This is
necessary for DP compliance testing to ensure that test requests are captured
and acknowledged. If a test request is present during a connected->disconnected
transition, the test code will attempt to execute even though the device is
disconnected, resulting in a faied test.

This patch is actually both a bug fix and a component of compliance testing.
Because HPD events are received both on connect and disconnect actions, it's
vital that we don't try and train the link when we're transitioning from
connected->disconnected. That results in errors and warning in the logs from
failed AUX transactions and can trigger the WARN for the check of !base.crtc.
By making the check at the beginning to see if the connection is truly active,
those problems are avoided and testing / link training will only be attempted
when there is a valid Displayport connection.

Move the DPCD read to the top and check for an interrupt from the sink to catch
Displayport automated testing requests necessary to support Displayport
compliance testing. The checks for active connectors and link status are moved
below the check for the interrupt.

The main reason for doing this is to make sure that a test request isn't missed.
Checking for the status of the encoder/crtc isn't necessary for some test cases
(AUX channel tests are one example) and without moving the check for the
interrupt, these tests may not execute if one of those checks fails.
Additionally, if reading the DPCD fails, regardless of whether or not testing is
happening, there's no way to train the link since configurations and status
can't be read, nor can link training parameters be written.

V1:
- This is the second part of the single-patch split previously
  mentioned.

V2:
- Remerge the two split patches into one and update the commit message
  accordingly.
- Replace the SW connected status check with a HW HPD pin status check
- Adds a new function that examines the status of the HPD pin to
  determine if a sink device is connected
V3:
- Removed duplicate code from the hpd_pulse -> check_link_status path

Signed-off-by: Todd Previte <tprevite@gmail.com>
---
 drivers/gpu/drm/i915/intel_dp.c | 32 +++++++++++++-------------------
 1 file changed, 13 insertions(+), 19 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 263eff3..1352c00 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -4119,6 +4119,19 @@ intel_dp_check_link_status(struct intel_dp *intel_dp)
 
 	WARN_ON(!drm_modeset_is_locked(&dev->mode_config.connection_mutex));
 
+	/* Try to read the source of the interrupt */
+	if (intel_dp->dpcd[DP_DPCD_REV] >= 0x11 &&
+	    intel_dp_get_sink_irq(intel_dp, &sink_irq_vector)) {
+		/* Clear interrupt source */
+		drm_dp_dpcd_writeb(&intel_dp->aux,
+				   DP_DEVICE_SERVICE_IRQ_VECTOR,
+				   sink_irq_vector);
+		if (sink_irq_vector & DP_AUTOMATED_TEST_REQUEST)
+			intel_dp_handle_test_request(intel_dp);
+		if (sink_irq_vector & (DP_CP_IRQ | DP_SINK_SPECIFIC_IRQ))
+			DRM_DEBUG_DRIVER("CP or sink specific irq unhandled\n");
+	}
+
 	if (!intel_encoder->connectors_active)
 		return;
 
@@ -4133,25 +4146,6 @@ intel_dp_check_link_status(struct intel_dp *intel_dp)
 		return;
 	}
 
-	/* Now read the DPCD to see if it's actually running */
-	if (!intel_dp_get_dpcd(intel_dp)) {
-		return;
-	}
-
-	/* Try to read the source of the interrupt */
-	if (intel_dp->dpcd[DP_DPCD_REV] >= 0x11 &&
-	    intel_dp_get_sink_irq(intel_dp, &sink_irq_vector)) {
-		/* Clear interrupt source */
-		drm_dp_dpcd_writeb(&intel_dp->aux,
-				   DP_DEVICE_SERVICE_IRQ_VECTOR,
-				   sink_irq_vector);
-
-		if (sink_irq_vector & DP_AUTOMATED_TEST_REQUEST)
-			intel_dp_handle_test_request(intel_dp);
-		if (sink_irq_vector & (DP_CP_IRQ | DP_SINK_SPECIFIC_IRQ))
-			DRM_DEBUG_DRIVER("CP or sink specific irq unhandled\n");
-	}
-
 	if (!drm_dp_channel_eq_ok(link_status, intel_dp->lane_count)) {
 		DRM_DEBUG_KMS("%s: channel EQ not ok, retraining\n",
 			      intel_encoder->base.name);
-- 
1.9.1

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

  parent reply	other threads:[~2015-04-15 15:39 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-04-15 15:38 [PATCH V6] Displayport compliance testing V6 Todd Previte
2015-04-15 15:38 ` [PATCH 01/10] drm/i915: Add automated testing support for Displayport compliance testing Todd Previte
2015-04-16 11:32   ` Daniel Vetter
2015-04-15 15:38 ` Todd Previte [this message]
2015-04-15 19:28   ` [PATCH 02/12] drm/i915: Update intel_dp_check_link_status() " Todd Previte
2015-04-15 19:45     ` Paulo Zanoni
2015-04-15 15:38 ` [PATCH 03/10] drm/i915: Add EDID read in intel_dp_check_link_status() for Link CTS 4.2.2.1 Todd Previte
2015-04-15 17:15   ` [PATCH 03/12] " Todd Previte
2015-04-15 19:29   ` Todd Previte
2015-04-15 15:38 ` [PATCH 04/10] drm/i915: Add a delay in Displayport AUX transactions for compliance testing Todd Previte
2015-04-16 12:37   ` Daniel Vetter
2015-04-15 15:38 ` [PATCH 05/10] drm: Add supporting structure for Displayport Link CTS test 4.2.2.6 Todd Previte
2015-04-15 17:15   ` [PATCH 05/12] " Todd Previte
2015-04-15 20:25     ` [Intel-gfx] " Paulo Zanoni
2015-04-15 21:59       ` Todd Previte
2015-04-15 22:03   ` Todd Previte
2015-04-16 13:34     ` Paulo Zanoni
2015-04-16 14:02       ` Todd Previte
2015-04-16 15:47   ` Todd Previte
2015-04-15 15:38 ` [PATCH 06/10] drm/i915: Update intel_dp_hpd_pulse() for non-MST operation Todd Previte
2015-04-15 17:15   ` [PATCH 06/12] " Todd Previte
2015-04-16  7:22   ` Todd Previte
2015-04-15 15:38 ` [PATCH 07/10] drm/i915: Support EDID compliance tests with the intel_dp_autotest_edid() function Todd Previte
2015-04-15 17:16   ` [PATCH 07/12] " Todd Previte
2015-04-15 15:38 ` [PATCH 08/10] drm: Fix for DP CTS test 4.2.2.5 - I2C DEFER handling Todd Previte
2015-04-16 20:23   ` Paulo Zanoni
2015-04-15 15:38 ` [PATCH 09/10] drm/i915: Add debugfs test control files for Displayport compliance testing Todd Previte
2015-04-16 21:25   ` Paulo Zanoni
2015-04-15 15:38 ` [PATCH 10/10] drm: Fix the 'native defer' message in drm_dp_i2c_do_msg() Todd Previte
2015-04-16 12:42   ` Daniel Vetter
2015-04-16 12:44   ` Daniel Vetter

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=1429112327-7695-3-git-send-email-tprevite@gmail.com \
    --to=tprevite@gmail.com \
    --cc=intel-gfx@lists.freedesktop.org \
    /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.