All of lore.kernel.org
 help / color / mirror / Atom feed
From: Rodrigo Vivi <rodrigo.vivi@intel.com>
To: intel-gfx@lists.freedesktop.org
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Subject: [PATCH 7/7] drm/i915: Dont -ETIMEDOUT on identical new and previous (count, crc).
Date: Thu, 23 Jul 2015 16:35:50 -0700	[thread overview]
Message-ID: <1437694550-5667-6-git-send-email-rodrigo.vivi@intel.com> (raw)
In-Reply-To: <1437694550-5667-1-git-send-email-rodrigo.vivi@intel.com>

By Vesa DP 1.2 spec TEST_CRC_COUNT is a "4 bit wrap counter which
increments each time the TEST_CRC_x_x are updated."

However if we are trying to verify the screen hasn't changed we get
same (count, crc) pair twice. Without this patch we would return
-ETIMEOUT in this case.

So, if in 6 vblanks the pair (count, crc) hasn't changed we
return it anyway instead of returning error and let test case decide
if it was right or not.

Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
 drivers/gpu/drm/i915/intel_dp.c | 21 +++++++++++++++------
 1 file changed, 15 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index c7372a1..e99ec7a 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -4028,6 +4028,7 @@ int intel_dp_sink_crc(struct intel_dp *intel_dp, u8 *crc)
 	u8 buf;
 	int count, ret;
 	int attempts = 6;
+	bool old_equal_new;
 
 	ret = intel_dp_sink_crc_start(intel_dp);
 	if (ret)
@@ -4042,6 +4043,7 @@ int intel_dp_sink_crc(struct intel_dp *intel_dp, u8 *crc)
 			goto stop;
 		}
 		count = buf & DP_TEST_COUNT_MASK;
+
 		/*
 		 * Count might be reset during the loop. In this case
 		 * last known count needs to be reset as well.
@@ -4053,17 +4055,24 @@ int intel_dp_sink_crc(struct intel_dp *intel_dp, u8 *crc)
 			ret = -EIO;
 			goto stop;
 		}
-	} while (--attempts && (count == 0 || (count == intel_dp->sink_crc.last_count &&
-					       !memcmp(intel_dp->sink_crc.last_crc, crc,
-						       6 * sizeof(u8)))));
+
+		old_equal_new = (count == intel_dp->sink_crc.last_count &&
+				 !memcmp(intel_dp->sink_crc.last_crc, crc,
+					 6 * sizeof(u8)));
+
+	} while (--attempts && (count == 0 || old_equal_new));
 
 	intel_dp->sink_crc.last_count = buf & DP_TEST_COUNT_MASK;
 	memcpy(intel_dp->sink_crc.last_crc, crc, 6 * sizeof(u8));
 
 	if (attempts == 0) {
-		DRM_DEBUG_KMS("Panel is unable to calculate CRC after 6 vblanks\n");
-		ret = -ETIMEDOUT;
-		goto stop;
+		if (old_equal_new) {
+			DRM_DEBUG_KMS("Unreliable Sink CRC counter: Current returned CRC is identical to the previous one\n");
+		} else {
+			DRM_ERROR("Panel is unable to calculate any CRC after 6 vblanks\n");
+			ret = -ETIMEDOUT;
+			goto stop;
+		}
 	}
 
 stop:
-- 
2.1.0

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

  parent reply	other threads:[~2015-07-23 23:35 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-07-23 23:35 [PATCH 2/7] drm/i915: Try to stop sink crc calculation on error Rodrigo Vivi
2015-07-23 23:35 ` [PATCH 3/7] drm/i915: Don't return error on sink crc stop Rodrigo Vivi
2015-07-24 18:22   ` Rafael Antognolli
2015-07-24 18:33     ` Rodrigo Vivi
2015-07-23 23:35 ` [PATCH 4/7] drm/i915: Split sink_crc function in start, stop and read Rodrigo Vivi
2015-07-28 20:10   ` Rafael Antognolli
2015-07-29  8:24     ` Daniel Vetter
2015-07-30 23:26       ` [PATCH] " Rodrigo Vivi
2015-08-05  8:07         ` Daniel Vetter
2015-08-05 20:30           ` Vivi, Rodrigo
2015-08-06 12:20             ` Daniel Vetter
2015-08-06 23:56               ` Rodrigo Vivi
2015-07-23 23:35 ` [PATCH 5/7] drm/i915: Force sink crc stop before start Rodrigo Vivi
2015-07-28 20:14   ` Rafael Antognolli
2015-07-23 23:35 ` [PATCH 6/7] drm/i915: Save latest known sink CRC to compensate delayed counter reset Rodrigo Vivi
2015-07-28 20:18   ` Rafael Antognolli
2015-07-23 23:35 ` Rodrigo Vivi [this message]
2015-07-28 20:25   ` [PATCH 7/7] drm/i915: Dont -ETIMEDOUT on identical new and previous (count, crc) Rafael Antognolli
2015-07-28 22:05     ` Vivi, Rodrigo
2015-07-29  8:26       ` Daniel Vetter
2015-07-29 16:05         ` Rafael Antognolli
2015-07-24 18:19 ` [PATCH 2/7] drm/i915: Try to stop sink crc calculation on error Rafael Antognolli

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=1437694550-5667-6-git-send-email-rodrigo.vivi@intel.com \
    --to=rodrigo.vivi@intel.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.