[igt-dev] [PATCH i-g-t v2] lib/debugfs: Sanity check even discarded CRCs

Ville Syrjala ville.syrjala at linux.intel.com
Fri May 15 14:38:57 UTC 2020


From: Ville Syrjälä <ville.syrjala at linux.intel.com>

We currently only spot check some of the CRCs. We should check them
all. This will probably cause failures on machines with PSR as
it looks like the CRC captured after PSR exit is bogus. Or at least
it is on ICL. We should probably just disable PSR whenever CRC
capturing is active.

v2: Rebase

Cc: José Roberto de Souza <jose.souza at intel.com>
Reviewed-by: Dhinakaran Pandiyan <dhinakaran.pandiyan at intel.com> #v1
References: https://bugs.freedesktop.org/show_bug.cgi?id=106974
Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
---
 lib/igt_debugfs.c | 47 ++++++++++++++++++++++-------------------------
 1 file changed, 22 insertions(+), 25 deletions(-)

diff --git a/lib/igt_debugfs.c b/lib/igt_debugfs.c
index 0506707852f0..73975f922e19 100644
--- a/lib/igt_debugfs.c
+++ b/lib/igt_debugfs.c
@@ -759,6 +759,26 @@ static bool pipe_crc_init_from_string(igt_pipe_crc_t *pipe_crc, igt_crc_t *crc,
 	return true;
 }
 
+static void crc_sanity_checks(igt_pipe_crc_t *pipe_crc, igt_crc_t *crc)
+{
+	bool all_zero = true;
+
+	/* Any CRC value can be considered valid on amdgpu hardware. */
+	if (is_amdgpu_device(pipe_crc->fd))
+		return;
+
+	for (int i = 0; i < crc->n_words; i++) {
+		igt_warn_on_f(crc->crc[i] == 0xffffffff,
+			      "Suspicious CRC: it looks like the CRC "
+			      "read back was from a register in a powered "
+			      "down well\n");
+		if (crc->crc[i])
+			all_zero = false;
+	}
+
+	igt_warn_on_f(all_zero, "Suspicious CRC: All values are 0.\n");
+}
+
 static int read_crc(igt_pipe_crc_t *pipe_crc, igt_crc_t *out)
 {
 	ssize_t bytes_read;
@@ -776,6 +796,8 @@ static int read_crc(igt_pipe_crc_t *pipe_crc, igt_crc_t *out)
 	if (bytes_read > 0 && !pipe_crc_init_from_string(pipe_crc, out, buf))
 		return -EINVAL;
 
+	crc_sanity_checks(pipe_crc, out);
+
 	return bytes_read;
 }
 
@@ -885,27 +907,6 @@ igt_pipe_crc_get_crcs(igt_pipe_crc_t *pipe_crc, int n_crcs,
 	return n;
 }
 
-static void crc_sanity_checks(igt_pipe_crc_t *pipe_crc, igt_crc_t *crc)
-{
-	int i;
-	bool all_zero = true;
-
-	/* Any CRC value can be considered valid on amdgpu hardware. */
-	if (is_amdgpu_device(pipe_crc->fd))
-		return;
-
-	for (i = 0; i < crc->n_words; i++) {
-		igt_warn_on_f(crc->crc[i] == 0xffffffff,
-			      "Suspicious CRC: it looks like the CRC "
-			      "read back was from a register in a powered "
-			      "down well\n");
-		if (crc->crc[i])
-			all_zero = false;
-	}
-
-	igt_warn_on_f(all_zero, "Suspicious CRC: All values are 0.\n");
-}
-
 /**
  * igt_pipe_crc_drain:
  * @pipe_crc: pipe CRC object
@@ -946,8 +947,6 @@ void igt_pipe_crc_drain(igt_pipe_crc_t *pipe_crc)
 void igt_pipe_crc_get_single(igt_pipe_crc_t *pipe_crc, igt_crc_t *crc)
 {
 	read_one_crc(pipe_crc, crc);
-
-	crc_sanity_checks(pipe_crc, crc);
 }
 
 /**
@@ -974,8 +973,6 @@ igt_pipe_crc_get_for_frame(int drm_fd, igt_pipe_crc_t *pipe_crc,
 			return;
 		}
 	} while (igt_vblank_before(crc->frame, vblank));
-
-	crc_sanity_checks(pipe_crc, crc);
 }
 
 /**
-- 
2.26.2



More information about the igt-dev mailing list