aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_ringbuffer.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/i915/intel_ringbuffer.c')
-rw-r--r--drivers/gpu/drm/i915/intel_ringbuffer.c41
1 files changed, 2 insertions, 39 deletions
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
index cd79c3843452..e9858d2e92d0 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
@@ -317,29 +317,6 @@ gen7_render_ring_cs_stall_wa(struct intel_engine_cs *ring)
317 return 0; 317 return 0;
318} 318}
319 319
320static int gen7_ring_fbc_flush(struct intel_engine_cs *ring, u32 value)
321{
322 int ret;
323
324 if (!ring->fbc_dirty)
325 return 0;
326
327 ret = intel_ring_begin(ring, 6);
328 if (ret)
329 return ret;
330 /* WaFbcNukeOn3DBlt:ivb/hsw */
331 intel_ring_emit(ring, MI_LOAD_REGISTER_IMM(1));
332 intel_ring_emit(ring, MSG_FBC_REND_STATE);
333 intel_ring_emit(ring, value);
334 intel_ring_emit(ring, MI_STORE_REGISTER_MEM(1) | MI_SRM_LRM_GLOBAL_GTT);
335 intel_ring_emit(ring, MSG_FBC_REND_STATE);
336 intel_ring_emit(ring, ring->scratch.gtt_offset + 256);
337 intel_ring_advance(ring);
338
339 ring->fbc_dirty = false;
340 return 0;
341}
342
343static int 320static int
344gen7_render_ring_flush(struct intel_engine_cs *ring, 321gen7_render_ring_flush(struct intel_engine_cs *ring,
345 u32 invalidate_domains, u32 flush_domains) 322 u32 invalidate_domains, u32 flush_domains)
@@ -398,9 +375,6 @@ gen7_render_ring_flush(struct intel_engine_cs *ring,
398 intel_ring_emit(ring, 0); 375 intel_ring_emit(ring, 0);
399 intel_ring_advance(ring); 376 intel_ring_advance(ring);
400 377
401 if (!invalidate_domains && flush_domains)
402 return gen7_ring_fbc_flush(ring, FBC_REND_NUKE);
403
404 return 0; 378 return 0;
405} 379}
406 380
@@ -462,9 +436,6 @@ gen8_render_ring_flush(struct intel_engine_cs *ring,
462 if (ret) 436 if (ret)
463 return ret; 437 return ret;
464 438
465 if (!invalidate_domains && flush_domains)
466 return gen7_ring_fbc_flush(ring, FBC_REND_NUKE);
467
468 return 0; 439 return 0;
469} 440}
470 441
@@ -2477,7 +2448,6 @@ static int gen6_ring_flush(struct intel_engine_cs *ring,
2477 u32 invalidate, u32 flush) 2448 u32 invalidate, u32 flush)
2478{ 2449{
2479 struct drm_device *dev = ring->dev; 2450 struct drm_device *dev = ring->dev;
2480 struct drm_i915_private *dev_priv = dev->dev_private;
2481 uint32_t cmd; 2451 uint32_t cmd;
2482 int ret; 2452 int ret;
2483 2453
@@ -2486,7 +2456,7 @@ static int gen6_ring_flush(struct intel_engine_cs *ring,
2486 return ret; 2456 return ret;
2487 2457
2488 cmd = MI_FLUSH_DW; 2458 cmd = MI_FLUSH_DW;
2489 if (INTEL_INFO(ring->dev)->gen >= 8) 2459 if (INTEL_INFO(dev)->gen >= 8)
2490 cmd += 1; 2460 cmd += 1;
2491 2461
2492 /* We always require a command barrier so that subsequent 2462 /* We always require a command barrier so that subsequent
@@ -2506,7 +2476,7 @@ static int gen6_ring_flush(struct intel_engine_cs *ring,
2506 cmd |= MI_INVALIDATE_TLB; 2476 cmd |= MI_INVALIDATE_TLB;
2507 intel_ring_emit(ring, cmd); 2477 intel_ring_emit(ring, cmd);
2508 intel_ring_emit(ring, I915_GEM_HWS_SCRATCH_ADDR | MI_FLUSH_DW_USE_GTT); 2478 intel_ring_emit(ring, I915_GEM_HWS_SCRATCH_ADDR | MI_FLUSH_DW_USE_GTT);
2509 if (INTEL_INFO(ring->dev)->gen >= 8) { 2479 if (INTEL_INFO(dev)->gen >= 8) {
2510 intel_ring_emit(ring, 0); /* upper addr */ 2480 intel_ring_emit(ring, 0); /* upper addr */
2511 intel_ring_emit(ring, 0); /* value */ 2481 intel_ring_emit(ring, 0); /* value */
2512 } else { 2482 } else {
@@ -2515,13 +2485,6 @@ static int gen6_ring_flush(struct intel_engine_cs *ring,
2515 } 2485 }
2516 intel_ring_advance(ring); 2486 intel_ring_advance(ring);
2517 2487
2518 if (!invalidate && flush) {
2519 if (IS_GEN7(dev))
2520 return gen7_ring_fbc_flush(ring, FBC_REND_CACHE_CLEAN);
2521 else if (IS_BROADWELL(dev))
2522 dev_priv->fbc.need_sw_cache_clean = true;
2523 }
2524
2525 return 0; 2488 return 0;
2526} 2489}
2527 2490