static void execlists_submit_ports(struct intel_engine_cs *engine)
 {
        struct execlist_port *port = engine->execlists.port;
-       u32 __iomem *elsp =
-               engine->i915->regs + i915_mmio_reg_offset(RING_ELSP(engine));
        unsigned int n;
 
        for (n = execlists_num_ports(&engine->execlists); n--; ) {
                        desc = 0;
                }
 
-               elsp_write(desc, elsp);
+               elsp_write(desc, engine->execlists.elsp);
        }
        execlists_clear_active(&engine->execlists, EXECLISTS_ACTIVE_HWACK);
 }
 {
        struct intel_context *ce =
                &engine->i915->preempt_context->engine[engine->id];
-       u32 __iomem *elsp =
-               engine->i915->regs + i915_mmio_reg_offset(RING_ELSP(engine));
        unsigned int n;
 
        GEM_BUG_ON(engine->i915->preempt_context->hw_id != PREEMPT_ID);
 
        GEM_TRACE("\n");
        for (n = execlists_num_ports(&engine->execlists); --n; )
-               elsp_write(0, elsp);
+               elsp_write(0, engine->execlists.elsp);
 
-       elsp_write(ce->lrc_desc, elsp);
+       elsp_write(ce->lrc_desc, engine->execlists.elsp);
        execlists_clear_active(&engine->execlists, EXECLISTS_ACTIVE_HWACK);
 }
 
        execlists->csb_head = -1;
        execlists->active = 0;
 
+       execlists->elsp =
+               dev_priv->regs + i915_mmio_reg_offset(RING_ELSP(engine));
+
        /* After a GPU reset, we may have requests to replay */
        if (execlists->first)
                tasklet_schedule(&execlists->tasklet);