All of lore.kernel.org
 help / color / mirror / Atom feed
From: Todd Previte <tprevite@gmail.com>
To: intel-gfx@lists.freedesktop.org
Subject: [PATCH] drm/i915: Implement Displayport automated testing
Date: Fri,  4 Oct 2013 03:32:10 -0700	[thread overview]
Message-ID: <1380882730-32207-1-git-send-email-tprevite@gmail.com> (raw)

This initial patch adds support for automated testing of the source device
to the i915 driver. Most of this patch is infrastructure for the tests;
follow up patches will add support for the individual tests with updates
to ACK the tests that are supported (or NAK if the test
fails/is unsupported).

Signed-off-by: Todd Previte <tprevite@gmail.com>
---
 drivers/gpu/drm/i915/intel_dp.c | 108 +++++++++++++++++++++++++++++++++++++++-
 include/drm/drm_dp_helper.h     |   3 +-
 2 files changed, 108 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 9770160..a042d59 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -64,6 +64,26 @@ static const struct dp_link_dpll vlv_dpll[] = {
 		{ .p1 = 2, .p2 = 2, .n = 1, .m1 = 2, .m2 = 27 } }
 };
 
+/******************************************************************************
+********            Displayport automated testing                      ********
+******************************************************************************/
+/* Automated testing function - link training */
+static bool
+intel_dp_autotest_link_training(struct intel_dp *intel_dp);
+/* Automated testing function - video test pattern */
+static bool
+intel_dp_autotest_video_pattern(struct intel_dp *intel_dp);
+/* Automated testing function - EDID read */
+static bool
+intel_dp_autotest_edid(struct intel_dp *intel_dp);
+/* Automated testing function - PHY pattern */
+static bool
+intel_dp_autotest_phy_pattern(struct intel_dp *intel_dp);
+/* Automated testing function - faux pattern */
+static bool
+intel_dp_autotest_faux_pattern(struct intel_dp *intel_dp);
+/*****************************************************************************/
+
 /**
  * is_edp - is the given port attached to an eDP panel (either CPU or PCH)
  * @intel_dp: DP struct
@@ -2732,9 +2752,93 @@ intel_dp_get_sink_irq(struct intel_dp *intel_dp, u8 *sink_irq_vector)
 
 static void
 intel_dp_handle_test_request(struct intel_dp *intel_dp)
+{	
+	uint8_t response = DP_TEST_NAK;
+	bool result = false;
+	uint8_t rxdata = 0;
+
+	printk(KERN_DEBUG "Displayport: Recvd automated test request\n");
+	/* Read DP_TEST_REQUEST register to identify the requested test */
+	intel_dp_aux_native_read_retry(intel_dp, DP_TEST_REQUEST, &rxdata, 1);
+	/* Determine which test has been requested */
+	switch (rxdata) {
+		/* Supported tests handled below */
+		case DP_TEST_LINK_TRAINING:
+			printk(KERN_DEBUG "Displayport: Executing LINK_TRAINING request\n");
+			result = intel_dp_autotest_link_training(intel_dp);
+			break;
+		case DP_TEST_LINK_VIDEO_PATTERN:
+			printk(KERN_DEBUG "Displayport: Executing TEST_PATTERN request\n");
+			result = intel_dp_autotest_video_pattern(intel_dp);
+			break;
+		case DP_TEST_LINK_EDID_READ:
+			printk(KERN_DEBUG "Displayport: Executing EDID request\n");
+			result = intel_dp_autotest_edid(intel_dp);
+			break;
+		case DP_TEST_LINK_PHY_TEST_PATTERN:
+			printk(KERN_DEBUG "Displayport: Executing PHY_PATTERN request\n");
+			result = intel_dp_autotest_phy_pattern(intel_dp);
+			break;
+		case DP_TEST_LINK_FAUX_TEST_PATTERN:
+			printk(KERN_DEBUG "Displayport: Executing FAUX_PATTERN request \n");
+			result = intel_dp_autotest_faux_pattern(intel_dp);
+			break;
+		/* Unsupported test case or something went wrong */
+		default:
+			/* Log error here for unhandled test request */
+			printk(KERN_DEBUG "Displayport: Error - unhandled automated test type\n");
+			break;
+	}
+	/* Check for a valid test execution */
+	if (result == true)
+		response = DP_TEST_ACK;
+	/* Send ACK/NAK based on action taken above */
+	intel_dp_aux_native_write_1(intel_dp, DP_TEST_RESPONSE, response);
+}
+
+/* Automated testing function - link training */
+static bool
+intel_dp_autotest_link_training(struct intel_dp *intel_dp)
+{
+	/* Automated test function hook */
+	bool test_result = false;
+	return test_result;
+}
+
+/* Automated testing function - video test pattern */
+static bool
+intel_dp_autotest_video_pattern(struct intel_dp *intel_dp)
+{
+	/* Automated test function hook */
+	bool test_result = false;
+	return test_result;
+}
+
+/* Automated testing function - EDID read */
+static bool
+intel_dp_autotest_edid(struct intel_dp *intel_dp)
+{
+	/* Automated test function hook */
+	bool test_result = false;
+	return test_result;
+}
+
+/* Automated testing function - PHY pattern */
+static bool
+intel_dp_autotest_phy_pattern(struct intel_dp *intel_dp)
+{
+	/* Automated test function hook */
+	bool test_result = false;
+	return test_result;
+}
+
+/* Automated testing function - faux pattern */
+static bool
+intel_dp_autotest_faux_pattern(struct intel_dp *intel_dp)
 {
-	/* NAK by default */
-	intel_dp_aux_native_write_1(intel_dp, DP_TEST_RESPONSE, DP_TEST_NAK);
+	/* Automated test function hook */
+	bool test_result = false;
+	return test_result;
 }
 
 /*
diff --git a/include/drm/drm_dp_helper.h b/include/drm/drm_dp_helper.h
index ae8dbfb..9fa544b 100644
--- a/include/drm/drm_dp_helper.h
+++ b/include/drm/drm_dp_helper.h
@@ -266,9 +266,10 @@
 
 #define DP_TEST_REQUEST			    0x218
 # define DP_TEST_LINK_TRAINING		    (1 << 0)
-# define DP_TEST_LINK_PATTERN		    (1 << 1)
+# define DP_TEST_LINK_VIDEO_PATTERN	    (1 << 1)
 # define DP_TEST_LINK_EDID_READ		    (1 << 2)
 # define DP_TEST_LINK_PHY_TEST_PATTERN	    (1 << 3) /* DPCD >= 1.1 */
+# define DP_TEST_LINK_FAUX_TEST_PATTERN	    (1 << 4) /* DPCD >= 1.2 */
 
 #define DP_TEST_LINK_RATE		    0x219
 # define DP_LINK_RATE_162		    (0x6)
-- 
1.8.1.2

             reply	other threads:[~2013-10-04 10:30 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-10-04 10:32 Todd Previte [this message]
2013-10-04 10:45 ` [PATCH] drm/i915: Implement Displayport automated testing Chris Wilson
2013-10-04 18:11   ` Todd Previte
2013-10-04 20:39     ` Ben Widawsky
2013-10-04 23:00       ` Todd Previte
2013-10-04 11:49 ` Jani Nikula
2013-10-04 18:11   ` Todd Previte
2013-10-04 19:53 ` [PATCH V2] " Todd Previte
2013-11-01 22:44 ` [PATCH V3] " Todd Previte
2013-11-01 22:44   ` [PATCH] " Todd Previte
2013-11-05  9:21     ` Jani Nikula
2013-11-05 21:01       ` Todd Previte
2013-11-05 21:47         ` 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=1380882730-32207-1-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.