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@xxxxxxxxxxxxxxxxxx> Signed-off-by: Mika Kuoppala <mika.kuoppala@xxxxxxxxx> --- 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 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx