[Intel-gfx] [PATCH] drm/i915: Add engine idle check for CI
Mika Kuoppala
mika.kuoppala at linux.intel.com
Fri Feb 10 14:11:44 UTC 2017
Assert for hardware idleness when we assign to execlist port,
if for some reason we get off the tracks on sw tracking.
Cc: Chris Wilson <chris at chris-wilson.co.uk>
Signed-off-by: Mika Kuoppala <mika.kuoppala at intel.com>
---
drivers/gpu/drm/i915/intel_engine_cs.c | 10 ++++++++++
drivers/gpu/drm/i915/intel_lrc.c | 4 +++-
drivers/gpu/drm/i915/intel_ringbuffer.h | 1 +
3 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/intel_engine_cs.c b/drivers/gpu/drm/i915/intel_engine_cs.c
index 69a6416..ba09420 100644
--- a/drivers/gpu/drm/i915/intel_engine_cs.c
+++ b/drivers/gpu/drm/i915/intel_engine_cs.c
@@ -524,3 +524,13 @@ void intel_engine_get_instdone(struct intel_engine_cs *engine,
break;
}
}
+
+bool intel_engine_idle(struct intel_engine_cs *engine)
+{
+ struct drm_i915_private *dev_priv = engine->i915;
+
+ if (INTEL_GEN(engine->i915) > 2)
+ return I915_READ_MODE(engine) & MODE_IDLE;
+
+ return true;
+}
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
index b21dbd4..3d909e3 100644
--- a/drivers/gpu/drm/i915/intel_lrc.c
+++ b/drivers/gpu/drm/i915/intel_lrc.c
@@ -347,9 +347,11 @@ static void execlists_submit_ports(struct intel_engine_cs *engine)
u64 desc[2];
GEM_BUG_ON(port[0].count > 1);
- if (!port[0].count)
+ if (!port[0].count) {
+ GEM_BUG_ON(!intel_engine_idle(engine));
execlists_context_status_change(port[0].request,
INTEL_CONTEXT_SCHEDULE_IN);
+ }
desc[0] = execlists_update_context(port[0].request);
GEM_BUG_ONLY(port[0].context_id = upper_32_bits(desc[0]));
port[0].count++;
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.h b/drivers/gpu/drm/i915/intel_ringbuffer.h
index 896838c..a319df9 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.h
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.h
@@ -603,6 +603,7 @@ bool intel_engine_add_wait(struct intel_engine_cs *engine,
void intel_engine_remove_wait(struct intel_engine_cs *engine,
struct intel_wait *wait);
void intel_engine_enable_signaling(struct drm_i915_gem_request *request);
+bool intel_engine_idle(struct intel_engine_cs *engine);
static inline bool intel_engine_has_waiter(const struct intel_engine_cs *engine)
{
--
2.7.4
More information about the Intel-gfx
mailing list