Now that we're handling request resubmission the same way as regular
submission (from the tasklet), we can move GuC initialization earlier,
before restarting the engines. This way, we're no longer being in the
state of flux during engine restart - we're already in user requested
submission mode.

Cc: Chris Wilson <ch...@chris-wilson.co.uk>
Cc: Michal Wajdeczko <michal.wajdec...@intel.com>
Cc: Michel Thierry <michel.thie...@intel.com>
Cc: Mika Kuoppala <mika.kuopp...@intel.com>
Cc: Oscar Mateo <oscar.ma...@intel.com>
Signed-off-by: Michał Winiarski <michal.winiar...@intel.com>
---
 drivers/gpu/drm/i915/i915_gem.c            | 10 +++++-----
 drivers/gpu/drm/i915/i915_guc_submission.c |  7 -------
 drivers/gpu/drm/i915/intel_lrc.c           |  2 +-
 3 files changed, 6 insertions(+), 13 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index ab8c6946fea4..cab328658a0a 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -4716,6 +4716,11 @@ int i915_gem_init_hw(struct drm_i915_private *dev_priv)
                goto out;
        }
 
+       /* We can't enable contexts until all firmware is loaded */
+       ret = intel_uc_init_hw(dev_priv);
+       if (ret)
+               goto out;
+
        /* Need to do basic initialisation of all rings first: */
        ret = __i915_gem_restart_engines(dev_priv);
        if (ret)
@@ -4723,11 +4728,6 @@ int i915_gem_init_hw(struct drm_i915_private *dev_priv)
 
        intel_mocs_init_l3cc_table(dev_priv);
 
-       /* We can't enable contexts until all firmware is loaded */
-       ret = intel_uc_init_hw(dev_priv);
-       if (ret)
-               goto out;
-
 out:
        intel_uncore_forcewake_put(dev_priv, FORCEWAKE_ALL);
        return ret;
diff --git a/drivers/gpu/drm/i915/i915_guc_submission.c 
b/drivers/gpu/drm/i915/i915_guc_submission.c
index 2c0aeee3143d..374501a67274 100644
--- a/drivers/gpu/drm/i915/i915_guc_submission.c
+++ b/drivers/gpu/drm/i915/i915_guc_submission.c
@@ -1182,14 +1182,7 @@ int i915_guc_submission_enable(struct drm_i915_private 
*dev_priv)
 
        for_each_engine(engine, dev_priv, id) {
                struct intel_engine_execlists * const execlists = 
&engine->execlists;
-               /* The tasklet was initialised by execlists, and may be in
-                * a state of flux (across a reset) and so we just want to
-                * take over the callback without changing any other state
-                * in the tasklet.
-                */
                execlists->irq_tasklet.func = i915_guc_irq_handler;
-               clear_bit(ENGINE_IRQ_EXECLIST, &engine->irq_posted);
-               tasklet_schedule(&execlists->irq_tasklet);
        }
 
        return 0;
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
index c5b76082d695..12956f2ba699 100644
--- a/drivers/gpu/drm/i915/intel_lrc.c
+++ b/drivers/gpu/drm/i915/intel_lrc.c
@@ -1462,7 +1462,7 @@ static int gen8_init_common_ring(struct intel_engine_cs 
*engine)
        execlists->preempt = false;
 
        /* After a GPU reset, we may have requests to replay */
-       if (!i915_modparams.enable_guc_submission && execlists->first)
+       if (execlists->first)
                tasklet_schedule(&execlists->irq_tasklet);
 
        return 0;
-- 
2.13.5

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to