engine->submit_request = execlists_submit_request;
        engine->schedule = i915_schedule;
        engine->execlists.tasklet.callback = execlists_submission_tasklet;
-
-       engine->reset.prepare = execlists_reset_prepare;
-       engine->reset.rewind = execlists_reset_rewind;
-       engine->reset.cancel = execlists_reset_cancel;
-       engine->reset.finish = execlists_reset_finish;
-
-       engine->park = execlists_park;
-       engine->unpark = NULL;
-
-       engine->flags |= I915_ENGINE_SUPPORTS_STATS;
-       if (!intel_vgpu_active(engine->i915)) {
-               engine->flags |= I915_ENGINE_HAS_SEMAPHORES;
-               if (can_preempt(engine)) {
-                       engine->flags |= I915_ENGINE_HAS_PREEMPTION;
-                       if (IS_ACTIVE(CONFIG_DRM_I915_TIMESLICE_DURATION))
-                               engine->flags |= I915_ENGINE_HAS_TIMESLICES;
-               }
-       }
-
-       if (intel_engine_has_preemption(engine))
-               engine->emit_bb_start = gen8_emit_bb_start;
-       else
-               engine->emit_bb_start = gen8_emit_bb_start_noarb;
 }
 
 static void execlists_shutdown(struct intel_engine_cs *engine)
        engine->cops = &execlists_context_ops;
        engine->request_alloc = execlists_request_alloc;
 
+       engine->reset.prepare = execlists_reset_prepare;
+       engine->reset.rewind = execlists_reset_rewind;
+       engine->reset.cancel = execlists_reset_cancel;
+       engine->reset.finish = execlists_reset_finish;
+
+       engine->park = execlists_park;
+       engine->unpark = NULL;
+
        engine->emit_flush = gen8_emit_flush_xcs;
        engine->emit_init_breadcrumb = gen8_emit_init_breadcrumb;
        engine->emit_fini_breadcrumb = gen8_emit_fini_breadcrumb_xcs;
                 * until a more refined solution exists.
                 */
        }
+
+       engine->flags |= I915_ENGINE_SUPPORTS_STATS;
+       if (!intel_vgpu_active(engine->i915)) {
+               engine->flags |= I915_ENGINE_HAS_SEMAPHORES;
+               if (can_preempt(engine)) {
+                       engine->flags |= I915_ENGINE_HAS_PREEMPTION;
+                       if (IS_ACTIVE(CONFIG_DRM_I915_TIMESLICE_DURATION))
+                               engine->flags |= I915_ENGINE_HAS_TIMESLICES;
+               }
+       }
+
+       if (intel_engine_has_preemption(engine))
+               engine->emit_bb_start = gen8_emit_bb_start;
+       else
+               engine->emit_bb_start = gen8_emit_bb_start_noarb;
 }
 
 static void logical_ring_default_irqs(struct intel_engine_cs *engine)
 
 static void i9xx_set_default_submission(struct intel_engine_cs *engine)
 {
        engine->submit_request = i9xx_submit_request;
-
-       engine->park = NULL;
-       engine->unpark = NULL;
 }
 
 static void gen6_bsd_set_default_submission(struct intel_engine_cs *engine)
 {
-       i9xx_set_default_submission(engine);
        engine->submit_request = gen6_bsd_submit_request;
 }
 
 
 static void guc_set_default_submission(struct intel_engine_cs *engine)
 {
        engine->submit_request = guc_submit_request;
-       engine->schedule = i915_schedule;
-       engine->execlists.tasklet.callback = guc_submission_tasklet;
-
-       engine->reset.prepare = guc_reset_prepare;
-       engine->reset.rewind = guc_reset_rewind;
-       engine->reset.cancel = guc_reset_cancel;
-       engine->reset.finish = guc_reset_finish;
-
-       engine->flags |= I915_ENGINE_NEEDS_BREADCRUMB_TASKLET;
-       engine->flags |= I915_ENGINE_HAS_PREEMPTION;
-
-       /*
-        * TODO: GuC supports timeslicing and semaphores as well, but they're
-        * handled by the firmware so some minor tweaks are required before
-        * enabling.
-        *
-        * engine->flags |= I915_ENGINE_HAS_TIMESLICES;
-        * engine->flags |= I915_ENGINE_HAS_SEMAPHORES;
-        */
-
-       engine->emit_bb_start = gen8_emit_bb_start;
-
-       /*
-        * For the breadcrumb irq to work we need the interrupts to stay
-        * enabled. However, on all platforms on which we'll have support for
-        * GuC submission we don't allow disabling the interrupts at runtime, so
-        * we're always safe with the current flow.
-        */
-       GEM_BUG_ON(engine->irq_enable || engine->irq_disable);
 }
 
 static void guc_release(struct intel_engine_cs *engine)
        engine->cops = &guc_context_ops;
        engine->request_alloc = guc_request_alloc;
 
+       engine->schedule = i915_schedule;
+
+       engine->reset.prepare = guc_reset_prepare;
+       engine->reset.rewind = guc_reset_rewind;
+       engine->reset.cancel = guc_reset_cancel;
+       engine->reset.finish = guc_reset_finish;
+
        engine->emit_flush = gen8_emit_flush_xcs;
        engine->emit_init_breadcrumb = gen8_emit_init_breadcrumb;
        engine->emit_fini_breadcrumb = gen8_emit_fini_breadcrumb_xcs;
                engine->emit_flush = gen12_emit_flush_xcs;
        }
        engine->set_default_submission = guc_set_default_submission;
+
+       engine->flags |= I915_ENGINE_NEEDS_BREADCRUMB_TASKLET;
+       engine->flags |= I915_ENGINE_HAS_PREEMPTION;
+
+       /*
+        * TODO: GuC supports timeslicing and semaphores as well, but they're
+        * handled by the firmware so some minor tweaks are required before
+        * enabling.
+        *
+        * engine->flags |= I915_ENGINE_HAS_TIMESLICES;
+        * engine->flags |= I915_ENGINE_HAS_SEMAPHORES;
+        */
+
+       engine->emit_bb_start = gen8_emit_bb_start;
 }
 
 static void rcs_submission_override(struct intel_engine_cs *engine)