Commit 45b152f7 authored by Chris Wilson's avatar Chris Wilson

drm/i915/gt: Avoid using the GPU before initialisation

Mark the GT as wedged so that we are not tempted to use it prior to
initialisation.
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Cc: Andi Shyti <andi.shyti@intel.com>
Reviewed-by: default avatarMatthew Auld <matthew.auld@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20191229183153.3719869-3-chris@chris-wilson.co.uk
parent 7b02b23e
...@@ -123,16 +123,16 @@ static bool switch_to_kernel_context(struct intel_engine_cs *engine) ...@@ -123,16 +123,16 @@ static bool switch_to_kernel_context(struct intel_engine_cs *engine)
unsigned long flags; unsigned long flags;
bool result = true; bool result = true;
/* GPU is pointing to the void, as good as in the kernel context. */
if (intel_gt_is_wedged(engine->gt))
return true;
GEM_BUG_ON(!intel_context_is_barrier(ce)); GEM_BUG_ON(!intel_context_is_barrier(ce));
/* Already inside the kernel context, safe to power down. */ /* Already inside the kernel context, safe to power down. */
if (engine->wakeref_serial == engine->serial) if (engine->wakeref_serial == engine->serial)
return true; return true;
/* GPU is pointing to the void, as good as in the kernel context. */
if (intel_gt_is_wedged(engine->gt))
return true;
/* /*
* Note, we do this without taking the timeline->mutex. We cannot * Note, we do this without taking the timeline->mutex. We cannot
* as we may be called while retiring the kernel context and so * as we may be called while retiring the kernel context and so
......
...@@ -179,7 +179,7 @@ int intel_gt_resume(struct intel_gt *gt) ...@@ -179,7 +179,7 @@ int intel_gt_resume(struct intel_gt *gt)
enum intel_engine_id id; enum intel_engine_id id;
int err; int err;
err = intel_gt_terminally_wedged(gt); err = intel_gt_has_init_error(gt);
if (err) if (err)
return err; return err;
...@@ -196,6 +196,10 @@ int intel_gt_resume(struct intel_gt *gt) ...@@ -196,6 +196,10 @@ int intel_gt_resume(struct intel_gt *gt)
intel_uncore_forcewake_get(gt->uncore, FORCEWAKE_ALL); intel_uncore_forcewake_get(gt->uncore, FORCEWAKE_ALL);
intel_rc6_sanitize(&gt->rc6); intel_rc6_sanitize(&gt->rc6);
gt_sanitize(gt, true); gt_sanitize(gt, true);
if (intel_gt_is_wedged(gt)) {
err = -EIO;
goto out_fw;
}
/* Only when the HW is re-initialised, can we replay the requests */ /* Only when the HW is re-initialised, can we replay the requests */
err = intel_gt_init_hw(gt); err = intel_gt_init_hw(gt);
......
...@@ -1353,6 +1353,9 @@ void intel_gt_init_reset(struct intel_gt *gt) ...@@ -1353,6 +1353,9 @@ void intel_gt_init_reset(struct intel_gt *gt)
init_waitqueue_head(&gt->reset.queue); init_waitqueue_head(&gt->reset.queue);
mutex_init(&gt->reset.mutex); mutex_init(&gt->reset.mutex);
init_srcu_struct(&gt->reset.backoff_srcu); init_srcu_struct(&gt->reset.backoff_srcu);
/* no GPU until we are ready! */
__set_bit(I915_WEDGED, &gt->reset.flags);
} }
void intel_gt_fini_reset(struct intel_gt *gt) void intel_gt_fini_reset(struct intel_gt *gt)
......
...@@ -184,6 +184,7 @@ struct drm_i915_private *mock_gem_device(void) ...@@ -184,6 +184,7 @@ struct drm_i915_private *mock_gem_device(void)
if (mock_engine_init(i915->engine[RCS0])) if (mock_engine_init(i915->engine[RCS0]))
goto err_context; goto err_context;
__clear_bit(I915_WEDGED, &i915->gt.reset.flags);
intel_engines_driver_register(i915); intel_engines_driver_register(i915);
return i915; return i915;
......
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