• Chris Wilson's avatar
    drm/i915/ringbuffer: Pull the render flush into breadcrumb emission · caa5915b
    Chris Wilson authored
    In preparation for removing the manual EMIT_FLUSH prior to emitting the
    breadcrumb implement the flush inline with writing the breadcrumb for
    ringbuffer emission.
    
    With a combined flush+breadcrumb, we can use a single operation to both
    flush and after the flush is complete (post-sync) write the breadcrumb.
    This gives us a strongly ordered operation that should be sufficient to
    serialise the write before we emit the interrupt; and therefore we may
    take the opportunity to remove the irq_seqno_barrier w/a for gen6+.
    Although using the PIPECONTROL to write the breadcrumb is slower than
    MI_STORE_DWORD_IMM, by combining the operations into one and removing the
    extra flush (next patch) it is faster
    
    For gen2-5, we simply combine the MI_FLUSH into the breadcrumb emission,
    though maybe we could find a solution here to the seqno-vs-interrupt
    issue on Ironlake by mixing up the flush? The answer is no, adding an
    MI_FLUSH before the interrupt is insufficient.
    Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Reviewed-by: default avatarMika Kuoppala <mika.kuoppala@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20181228153114.4948-2-chris@chris-wilson.co.uk
    caa5915b
intel_ringbuffer.c 59.1 KB