Commit 44f8b802 authored by Chris Wilson's avatar Chris Wilson

Revert "drm/i915: Avoid waking the engines just to check if they are idle"

This reverts commit 0b702dca.

CI reports that this is not as reliable as it first appears, with
failures starting to sporadically occur in selftests.

Fixes: 0b702dca ("drm/i915: Avoid waking the engines just to check if they are idle")
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Cc: Mika Kuoppala <mika.kuoppala@intel.com>
Cc: Jani Nikula <jani.nikula@linux.intel.com>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Reviewed-by: default avatarMika Kuoppala <mika.kuoppala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190227204654.14907-1-chris@chris-wilson.co.uk
parent 2d5eaad0
...@@ -1007,7 +1007,6 @@ static bool ring_is_idle(struct intel_engine_cs *engine) ...@@ -1007,7 +1007,6 @@ static bool ring_is_idle(struct intel_engine_cs *engine)
{ {
struct drm_i915_private *dev_priv = engine->i915; struct drm_i915_private *dev_priv = engine->i915;
intel_wakeref_t wakeref; intel_wakeref_t wakeref;
unsigned long flags;
bool idle = true; bool idle = true;
if (I915_SELFTEST_ONLY(!engine->mmio_base)) if (I915_SELFTEST_ONLY(!engine->mmio_base))
...@@ -1018,19 +1017,15 @@ static bool ring_is_idle(struct intel_engine_cs *engine) ...@@ -1018,19 +1017,15 @@ static bool ring_is_idle(struct intel_engine_cs *engine)
if (!wakeref) if (!wakeref)
return true; return true;
spin_lock_irqsave(&dev_priv->uncore.lock, flags); /* First check that no commands are left in the ring */
if ((I915_READ_HEAD(engine) & HEAD_ADDR) !=
(I915_READ_TAIL(engine) & TAIL_ADDR))
idle = false;
/* /* No bit for gen2, so assume the CS parser is idle */
* Check that no commands are left in the ring. if (INTEL_GEN(dev_priv) > 2 && !(I915_READ_MODE(engine) & MODE_IDLE))
*
* If the engine is not awake, both reads return 0 as we do so without
* forcewake.
*/
if ((I915_READ_FW(RING_HEAD(engine->mmio_base)) & HEAD_ADDR) !=
(I915_READ_FW(RING_TAIL(engine->mmio_base)) & TAIL_ADDR))
idle = false; idle = false;
spin_unlock_irqrestore(&dev_priv->uncore.lock, flags);
intel_runtime_pm_put(dev_priv, wakeref); intel_runtime_pm_put(dev_priv, wakeref);
return idle; return idle;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment