drm/i915: Flush the CSB pointer reset
authorChris Wilson <chris@chris-wilson.co.uk>
Fri, 12 Apr 2019 11:01:59 +0000 (12:01 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Fri, 12 Apr 2019 13:32:11 +0000 (14:32 +0100)
The HW resets it CSB tail pointer on resetting the engine. Most of the
time. In case it doesn't (and for system resume) we write the expected
value anyway. For extra paranoia, flush the write before we invalidate
the cacheline.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Acked-by: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190412110159.10495-1-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/intel_lrc.c

index 3cb788a223ef07bb418461b51bec34a6ad33f013..4e0a351bfbcadb7a1e0d13a591dcbafaac5ef80d 100644 (file)
@@ -1866,6 +1866,7 @@ static void reset_csb_pointers(struct intel_engine_execlists *execlists)
         */
        execlists->csb_head = reset_value;
        WRITE_ONCE(*execlists->csb_write, reset_value);
+       wmb(); /* Make sure this is visible to HW (paranoia?) */
 
        invalidate_csb_entries(&execlists->csb_status[0],
                               &execlists->csb_status[reset_value]);