diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c index b3d8f766fa7f..835dec52ee48 100644 --- a/drivers/gpu/drm/i915/intel_ringbuffer.c +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c @@ -460,7 +460,7 @@ static bool stop_ring(struct intel_engine_cs *ring) if (!IS_GEN2(ring->dev)) { I915_WRITE_MODE(ring, _MASKED_BIT_ENABLE(STOP_RING)); - if (wait_for_atomic((I915_READ_MODE(ring) & MODE_IDLE) != 0, 1000)) { + if (wait_for((I915_READ_MODE(ring) & MODE_IDLE) != 0, 1000)) { DRM_ERROR("%s :timed out trying to stop ring\n", ring->name); return false; } @@ -470,6 +470,9 @@ static bool stop_ring(struct intel_engine_cs *ring) I915_WRITE_HEAD(ring, 0); ring->write_tail(ring, 0); + if (wait_for((I915_READ_HEAD(ring) & HEAD_ADDR) == 0, 1000)) + DRM_ERROR("%s :timed out waiting for HEAD to clear\n", ring->name); + if (!IS_GEN2(ring->dev)) { (void)I915_READ_CTL(ring); I915_WRITE_MODE(ring, _MASKED_BIT_DISABLE(STOP_RING));