• Michel Thierry's avatar
    drm/i915: Workaround to avoid lite restore with HEAD==TAIL · 53292cdb
    Michel Thierry authored
    WaIdleLiteRestore is an execlists-only workaround, and requires the driver
    to ensure that any context always has HEAD!=TAIL when attempting lite
    restore.
    
    Add two extra MI_NOOP instructions at the end of each request, but keep
    the requests tail pointing before the MI_NOOPs. We may not need to
    executed them, and this is why request->tail is sampled before adding
    these extra instructions.
    
    If we submit a context to the ELSP which has previously been submitted,
    move the tail pointer past the MI_NOOPs. This ensures HEAD!=TAIL.
    
    v2: Move overallocation to gen8_emit_request, and added note about
    sampling request->tail in commit message (Chris).
    
    v3: Remove redundant request->tail assignment in __i915_add_request, in
    lrc mode this is already set in execlists_context_queue.
    Do not add wa implementation details inside gem (Chris).
    
    v4: Apply the wa whenever the req has been resubmitted and update
    comment (Chris).
    
    Cc: Chris Wilson <chris@chris-wilson.co.uk>
    Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Signed-off-by: default avatarThomas Daniel <thomas.daniel@intel.com>
    Signed-off-by: default avatarMichel Thierry <michel.thierry@intel.com>
    Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
    53292cdb
intel_lrc.c 59.6 KB