aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/i915/intel_lrc.c20
-rw-r--r--drivers/gpu/drm/i915/intel_ringbuffer.c23
2 files changed, 30 insertions, 13 deletions
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
index a94346fee160..0f358c5999ec 100644
--- a/drivers/gpu/drm/i915/intel_lrc.c
+++ b/drivers/gpu/drm/i915/intel_lrc.c
@@ -1211,15 +1211,17 @@ static int gen8_emit_flush(struct intel_ringbuffer *ringbuf,
1211 1211
1212 cmd = MI_FLUSH_DW + 1; 1212 cmd = MI_FLUSH_DW + 1;
1213 1213
1214 if (ring == &dev_priv->ring[VCS]) { 1214 /* We always require a command barrier so that subsequent
1215 if (invalidate_domains & I915_GEM_GPU_DOMAINS) 1215 * commands, such as breadcrumb interrupts, are strictly ordered
1216 cmd |= MI_INVALIDATE_TLB | MI_INVALIDATE_BSD | 1216 * wrt the contents of the write cache being flushed to memory
1217 MI_FLUSH_DW_STORE_INDEX | 1217 * (and thus being coherent from the CPU).
1218 MI_FLUSH_DW_OP_STOREDW; 1218 */
1219 } else { 1219 cmd |= MI_FLUSH_DW_STORE_INDEX | MI_FLUSH_DW_OP_STOREDW;
1220 if (invalidate_domains & I915_GEM_DOMAIN_RENDER) 1220
1221 cmd |= MI_INVALIDATE_TLB | MI_FLUSH_DW_STORE_INDEX | 1221 if (invalidate_domains & I915_GEM_GPU_DOMAINS) {
1222 MI_FLUSH_DW_OP_STOREDW; 1222 cmd |= MI_INVALIDATE_TLB;
1223 if (ring == &dev_priv->ring[VCS])
1224 cmd |= MI_INVALIDATE_BSD;
1223 } 1225 }
1224 1226
1225 intel_logical_ring_emit(ringbuf, cmd); 1227 intel_logical_ring_emit(ringbuf, cmd);
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
index 0bd3976d88e1..e5b3c6dbd467 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
@@ -2240,6 +2240,14 @@ static int gen6_bsd_ring_flush(struct intel_engine_cs *ring,
2240 cmd = MI_FLUSH_DW; 2240 cmd = MI_FLUSH_DW;
2241 if (INTEL_INFO(ring->dev)->gen >= 8) 2241 if (INTEL_INFO(ring->dev)->gen >= 8)
2242 cmd += 1; 2242 cmd += 1;
2243
2244 /* We always require a command barrier so that subsequent
2245 * commands, such as breadcrumb interrupts, are strictly ordered
2246 * wrt the contents of the write cache being flushed to memory
2247 * (and thus being coherent from the CPU).
2248 */
2249 cmd |= MI_FLUSH_DW_STORE_INDEX | MI_FLUSH_DW_OP_STOREDW;
2250
2243 /* 2251 /*
2244 * Bspec vol 1c.5 - video engine command streamer: 2252 * Bspec vol 1c.5 - video engine command streamer:
2245 * "If ENABLED, all TLBs will be invalidated once the flush 2253 * "If ENABLED, all TLBs will be invalidated once the flush
@@ -2247,8 +2255,8 @@ static int gen6_bsd_ring_flush(struct intel_engine_cs *ring,
2247 * Post-Sync Operation field is a value of 1h or 3h." 2255 * Post-Sync Operation field is a value of 1h or 3h."
2248 */ 2256 */
2249 if (invalidate & I915_GEM_GPU_DOMAINS) 2257 if (invalidate & I915_GEM_GPU_DOMAINS)
2250 cmd |= MI_INVALIDATE_TLB | MI_INVALIDATE_BSD | 2258 cmd |= MI_INVALIDATE_TLB | MI_INVALIDATE_BSD;
2251 MI_FLUSH_DW_STORE_INDEX | MI_FLUSH_DW_OP_STOREDW; 2259
2252 intel_ring_emit(ring, cmd); 2260 intel_ring_emit(ring, cmd);
2253 intel_ring_emit(ring, I915_GEM_HWS_SCRATCH_ADDR | MI_FLUSH_DW_USE_GTT); 2261 intel_ring_emit(ring, I915_GEM_HWS_SCRATCH_ADDR | MI_FLUSH_DW_USE_GTT);
2254 if (INTEL_INFO(ring->dev)->gen >= 8) { 2262 if (INTEL_INFO(ring->dev)->gen >= 8) {
@@ -2344,6 +2352,14 @@ static int gen6_ring_flush(struct intel_engine_cs *ring,
2344 cmd = MI_FLUSH_DW; 2352 cmd = MI_FLUSH_DW;
2345 if (INTEL_INFO(ring->dev)->gen >= 8) 2353 if (INTEL_INFO(ring->dev)->gen >= 8)
2346 cmd += 1; 2354 cmd += 1;
2355
2356 /* We always require a command barrier so that subsequent
2357 * commands, such as breadcrumb interrupts, are strictly ordered
2358 * wrt the contents of the write cache being flushed to memory
2359 * (and thus being coherent from the CPU).
2360 */
2361 cmd |= MI_FLUSH_DW_STORE_INDEX | MI_FLUSH_DW_OP_STOREDW;
2362
2347 /* 2363 /*
2348 * Bspec vol 1c.3 - blitter engine command streamer: 2364 * Bspec vol 1c.3 - blitter engine command streamer:
2349 * "If ENABLED, all TLBs will be invalidated once the flush 2365 * "If ENABLED, all TLBs will be invalidated once the flush
@@ -2351,8 +2367,7 @@ static int gen6_ring_flush(struct intel_engine_cs *ring,
2351 * Post-Sync Operation field is a value of 1h or 3h." 2367 * Post-Sync Operation field is a value of 1h or 3h."
2352 */ 2368 */
2353 if (invalidate & I915_GEM_DOMAIN_RENDER) 2369 if (invalidate & I915_GEM_DOMAIN_RENDER)
2354 cmd |= MI_INVALIDATE_TLB | MI_FLUSH_DW_STORE_INDEX | 2370 cmd |= MI_INVALIDATE_TLB;
2355 MI_FLUSH_DW_OP_STOREDW;
2356 intel_ring_emit(ring, cmd); 2371 intel_ring_emit(ring, cmd);
2357 intel_ring_emit(ring, I915_GEM_HWS_SCRATCH_ADDR | MI_FLUSH_DW_USE_GTT); 2372 intel_ring_emit(ring, I915_GEM_HWS_SCRATCH_ADDR | MI_FLUSH_DW_USE_GTT);
2358 if (INTEL_INFO(ring->dev)->gen >= 8) { 2373 if (INTEL_INFO(ring->dev)->gen >= 8) {