[Intel-gfx] [PATCH v2 2/3] drm/i915: add a selftest for the mmio_bases table

Daniele Ceraolo Spurio daniele.ceraolospurio at intel.com
Thu Mar 8 23:46:28 UTC 2018


Check that the entries are in reverse gen order and that the first entry
and all the following entries with gen > 0 have an mmio base set.

Suggested-by: Chris Wilson <chris at chris-wilson.co.uk>
Cc: Chris Wilson <chris at chris-wilson.co.uk>
Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio at intel.com>
---
 drivers/gpu/drm/i915/intel_engine_cs.c             |  1 +
 .../gpu/drm/i915/selftests/i915_mock_selftests.h   |  1 +
 drivers/gpu/drm/i915/selftests/intel_engine_cs.c   | 48 ++++++++++++++++++++++
 3 files changed, 50 insertions(+)
 create mode 100644 drivers/gpu/drm/i915/selftests/intel_engine_cs.c

diff --git a/drivers/gpu/drm/i915/intel_engine_cs.c b/drivers/gpu/drm/i915/intel_engine_cs.c
index 08711665061c..a33171d82aee 100644
--- a/drivers/gpu/drm/i915/intel_engine_cs.c
+++ b/drivers/gpu/drm/i915/intel_engine_cs.c
@@ -2131,4 +2131,5 @@ void intel_disable_engine_stats(struct intel_engine_cs *engine)
 
 #if IS_ENABLED(CONFIG_DRM_I915_SELFTEST)
 #include "selftests/mock_engine.c"
+#include "selftests/intel_engine_cs.c"
 #endif
diff --git a/drivers/gpu/drm/i915/selftests/i915_mock_selftests.h b/drivers/gpu/drm/i915/selftests/i915_mock_selftests.h
index 9a48aa441743..2842f93ca29e 100644
--- a/drivers/gpu/drm/i915/selftests/i915_mock_selftests.h
+++ b/drivers/gpu/drm/i915/selftests/i915_mock_selftests.h
@@ -23,3 +23,4 @@ selftest(vma, i915_vma_mock_selftests)
 selftest(evict, i915_gem_evict_mock_selftests)
 selftest(gtt, i915_gem_gtt_mock_selftests)
 selftest(hugepages, i915_gem_huge_page_mock_selftests)
+selftest(engine, intel_engine_cs_mock_selftests)
diff --git a/drivers/gpu/drm/i915/selftests/intel_engine_cs.c b/drivers/gpu/drm/i915/selftests/intel_engine_cs.c
new file mode 100644
index 000000000000..8ef453905520
--- /dev/null
+++ b/drivers/gpu/drm/i915/selftests/intel_engine_cs.c
@@ -0,0 +1,48 @@
+/*
+ * SPDX-License-Identifier: GPL-2.0
+ *
+ * Copyright © 2018 Intel Corporation
+ */
+
+#include "../i915_selftest.h"
+
+static int intel_mmio_bases_check(void)
+{
+	const struct engine_info *info;
+	int i, j;
+	u32 gen;
+	s32 prev;
+
+	for (i = 0; i < ARRAY_SIZE(intel_engines); i++) {
+		info = &intel_engines[i];
+
+		for (prev = -1, j = MAX_MMIO_BASES -1; j >= 0; j--) {
+			gen = info->mmio_bases[j].gen;
+
+			if (prev >= (s32)gen) {
+				pr_err("%s: engine[%d]: mmio base for gen %x "
+					"is before the one for gen %x\n",
+				       __func__, i, gen, prev);
+				return -EINVAL;
+			}
+
+			if ((j == 0 || gen > 0) && !info->mmio_bases[j].base) {
+				pr_err("%s: engine[%d]: invalid mmio base (%x) "
+					"for gen %x at entry %u\n",
+				       __func__, i, info->mmio_bases[j].base, gen, j);
+				return -EINVAL;
+			}
+
+			/* we can have multiple empty entries in a row */
+			if (gen > 0)
+				prev = gen;
+		}
+	}
+
+	return 0;
+}
+
+int intel_engine_cs_mock_selftests(void)
+{
+	return intel_mmio_bases_check();
+}
-- 
2.16.2



More information about the Intel-gfx mailing list