• Paulo Zanoni's avatar
    drm/i915: add workarounds to gen7_render_ring_flush · f3987631
    Paulo Zanoni authored
    From Bspec, Vol 2a, Section 1.9.3.4 "PIPE_CONTROL", intro section
    detailing the various workarounds:
    
    "[DevIVB {W/A}, DevHSW {W/A}]: Pipe_control with CS-stall bit
    set must be issued before a pipe-control command that has the State
    Cache Invalidate bit set."
    
    Note that public Bspec has different numbering, it's Vol2Part1,
    Section 1.10.4.1 "PIPE_CONTROL" there.
    
    There's also a second workaround for the PIPE_CONTROL command itself:
    
    "[DevIVB, DevVLV, DevHSW] {WA}: Every 4th PIPE_CONTROL command, not
    counting the PIPE_CONTROL with only read-cache-invalidate bit(s) set,
    must have a CS_STALL bit set"
    
    For simplicity we simply set the CS_STALL bit on every pipe_control on
    gen7+
    
    Note that this massively helps on some hsw machines, together with the
    following patch to unconditionally set the CS_STALL bit on every
    pipe_control it prevents a gpu hang every few seconds.
    
    This is a regression that has been introduced in the pipe_control
    cleanup:
    
    commit 6c6cf5aa
    Author: Chris Wilson <chris@chris-wilson.co.uk>
    Date:   Fri Jul 20 18:02:28 2012 +0100
    
        drm/i915: Only apply the SNB pipe control w/a to gen6
    
    It looks like the massive snb pipe_control workaround also papered
    over any issues on ivb and hsw.
    Signed-off-by: default avatarPaulo Zanoni <paulo.r.zanoni@intel.com>
    [danvet: squashed both workarounds together, pimped commit message
    with Bsepc citations, regression commit citation and changed the
    comment in the code a bit to clarify that we unconditionally set
    CS_STALL to avoid being hurt by trying to be clever.]
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    f3987631
intel_ringbuffer.c 42.7 KB