[PATCH] findreg
Chris Wilson
chris at chris-wilson.co.uk
Fri Jul 24 10:54:26 UTC 2020
---
drivers/gpu/drm/i915/gt/selftest_lrc.c | 60 ++++++++++++++++++++++++++
1 file changed, 60 insertions(+)
diff --git a/drivers/gpu/drm/i915/gt/selftest_lrc.c b/drivers/gpu/drm/i915/gt/selftest_lrc.c
index 3fc5de961280..670324d80a53 100644
--- a/drivers/gpu/drm/i915/gt/selftest_lrc.c
+++ b/drivers/gpu/drm/i915/gt/selftest_lrc.c
@@ -6452,9 +6452,69 @@ static int live_pphwsp_runtime(void *arg)
return err;
}
+static int live_lrc_findreg(void *arg)
+{
+ struct intel_gt *gt = arg;
+ struct intel_engine_cs *engine;
+ enum intel_engine_id id;
+
+ for_each_engine(engine, gt, id) {
+ const u32 target = i915_mmio_reg_offset(RING_FORCE_TO_NONPRIV(engine->mmio_base, 0));
+ unsigned int dw, end;
+ u32 *hw;
+
+ if (!engine->default_state)
+ continue;
+
+ hw = shmem_pin_map(engine->default_state);
+ if (IS_ERR(hw))
+ return PTR_ERR(hw);
+ hw += LRC_STATE_OFFSET / sizeof(*hw);
+
+ end = (engine->context_size - LRC_STATE_OFFSET) / sizeof(*hw);
+ dw = 0;
+ do {
+ u32 lri = hw[dw];
+
+ if (lri == 0) {
+ dw++;
+ continue;
+ }
+
+ if ((lri & GENMASK(31, 23)) != MI_INSTR(0x22, 0)) {
+ pr_info("%s: Expected LRI command at dword %d, found %08x\n",
+ engine->name, dw, lri);
+ break;
+ }
+
+ lri &= 0x7f;
+ lri++;
+ dw++;
+
+ while (lri) {
+ if (hw[dw] == target) {
+ pr_info("Found %x at context image offset 0x%x\n",
+ target, dw);
+ goto end;
+ }
+
+ dw += 2;
+ lri -= 2;
+ }
+ } while (dw < end);
+
+end:
+ hw -= LRC_STATE_OFFSET / sizeof(*hw);
+ shmem_unpin_map(engine->default_state, hw);
+ }
+
+ return 0;
+}
+
int intel_lrc_live_selftests(struct drm_i915_private *i915)
{
static const struct i915_subtest tests[] = {
+ SUBTEST(live_lrc_findreg),
SUBTEST(live_lrc_layout),
SUBTEST(live_lrc_fixed),
SUBTEST(live_lrc_state),
--
2.20.1
More information about the Intel-gfx-trybot
mailing list