• Imre Deak's avatar
    drm/i915/bxt: work around HW coherency issue when accessing GPU seqno · 319404df
    Imre Deak authored
    By running igt/store_dword_loop_render on BXT we can hit a coherency
    problem where the seqno written at GPU command completion time is not
    seen by the CPU. This results in __i915_wait_request seeing the stale
    seqno and not completing the request (not considering the lost
    interrupt/GPU reset mechanism). I also verified that this isn't a case
    of a lost interrupt, or that the command didn't complete somehow: when
    the coherency issue occured I read the seqno via an uncached GTT mapping
    too. While the cached version of the seqno still showed the stale value
    the one read via the uncached mapping was the correct one.
    
    Work around this issue by clflushing the corresponding CPU cacheline
    following any store of the seqno and preceding any reading of it. When
    reading it do this only when the caller expects a coherent view.
    
    v2:
    - fix using the proper logical && instead of a bitwise & (Jani, Mika)
    - limit the workaround to A stepping, on later steppings this HW issue
      is fixed
    v3:
    - use a separate get_seqno/set_seqno vfunc (Chris)
    
    Testcase: igt/store_dword_loop_render
    Signed-off-by: default avatarImre Deak <imre.deak@intel.com>
    Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    319404df
intel_ringbuffer.h 16.9 KB