summaryrefslogtreecommitdiff
path: root/lib/igt_debugfs.c
diff options
context:
space:
mode:
authorPaul Kocialkowski <paul.kocialkowski@linux.intel.com>2017-07-19 16:46:06 +0300
committerLyude <lyude@redhat.com>2017-07-19 12:03:56 -0400
commit7422d7540a3b9f3b46be1806c96589eaefe7cff3 (patch)
tree709faf672e1ebcd1c08de92066834b402d55e0c3 /lib/igt_debugfs.c
parente0802ba48505b3690939b11ec82447b700102848 (diff)
lib/igt_debugfs: Introduce CRC check function, with logic made common
This introduces an igt_check_crc_equal function in addition to igt_assert_crc_equal and makes the CRC comparison logic from the latter common. In particular, an igt_find_crc_mismatch function indicates whether there is a mistmatch and at what index, so that the calling functions can print the diverging values. Signed-off-by: Paul Kocialkowski <paul.kocialkowski@linux.intel.com> Reviewed-by: Lyude <lyude@redhat.com>
Diffstat (limited to 'lib/igt_debugfs.c')
-rw-r--r--lib/igt_debugfs.c53
1 files changed, 50 insertions, 3 deletions
diff --git a/lib/igt_debugfs.c b/lib/igt_debugfs.c
index 2702686a..ef05dc77 100644
--- a/lib/igt_debugfs.c
+++ b/lib/igt_debugfs.c
@@ -281,6 +281,26 @@ bool igt_debugfs_search(int device, const char *filename, const char *substring)
* Pipe CRC
*/
+static bool igt_find_crc_mismatch(const igt_crc_t *a, const igt_crc_t *b,
+ int *index)
+{
+ int i;
+
+ if (a->n_words != b->n_words)
+ return true;
+
+ for (i = 0; i < a->n_words; i++) {
+ if (a->crc[i] != b->crc[i]) {
+ if (index)
+ *index = i;
+
+ return true;
+ }
+ }
+
+ return false;
+}
+
/**
* igt_assert_crc_equal:
* @a: first pipe CRC value
@@ -294,10 +314,37 @@ bool igt_debugfs_search(int device, const char *filename, const char *substring)
*/
void igt_assert_crc_equal(const igt_crc_t *a, const igt_crc_t *b)
{
- int i;
+ int index;
+ bool mismatch;
+
+ mismatch = igt_find_crc_mismatch(a, b, &index);
+ if (mismatch)
+ igt_debug("CRC mismatch at index %d: 0x%x != 0x%x\n", index,
+ a->crc[index], b->crc[index]);
+
+ igt_assert(!mismatch);
+}
+
+/**
+ * igt_check_crc_equal:
+ * @a: first pipe CRC value
+ * @b: second pipe CRC value
+ *
+ * Compares two CRC values and return whether they match.
+ *
+ * Returns: A boolean indicating whether the CRC values match
+ */
+bool igt_check_crc_equal(const igt_crc_t *a, const igt_crc_t *b)
+{
+ int index;
+ bool mismatch;
+
+ mismatch = igt_find_crc_mismatch(a, b, &index);
+ if (mismatch)
+ igt_debug("CRC mismatch at index %d: 0x%x != 0x%x\n", index,
+ a->crc[index], b->crc[index]);
- for (i = 0; i < a->n_words; i++)
- igt_assert_eq_u32(a->crc[i], b->crc[i]);
+ return !mismatch;
}
/**