diff options
Diffstat (limited to 'drivers/gpu/drm/i915/intel_ringbuffer.c')
-rw-r--r-- | drivers/gpu/drm/i915/intel_ringbuffer.c | 41 |
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 | ||
320 | static 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 | |||
343 | static int | 320 | static int |
344 | gen7_render_ring_flush(struct intel_engine_cs *ring, | 321 | gen7_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 | ||