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.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
index e39e483d8d16..107c4934e2fa 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
@@ -299,7 +299,7 @@ gen6_render_ring_flush(struct i915_request *rq, u32 mode)
299 return 0; 299 return 0;
300} 300}
301 301
302static void gen6_rcs_emit_breadcrumb(struct i915_request *rq, u32 *cs) 302static u32 *gen6_rcs_emit_breadcrumb(struct i915_request *rq, u32 *cs)
303{ 303{
304 /* First we do the gen6_emit_post_sync_nonzero_flush w/a */ 304 /* First we do the gen6_emit_post_sync_nonzero_flush w/a */
305 *cs++ = GFX_OP_PIPE_CONTROL(4); 305 *cs++ = GFX_OP_PIPE_CONTROL(4);
@@ -327,6 +327,8 @@ static void gen6_rcs_emit_breadcrumb(struct i915_request *rq, u32 *cs)
327 327
328 rq->tail = intel_ring_offset(rq, cs); 328 rq->tail = intel_ring_offset(rq, cs);
329 assert_ring_tail_valid(rq->ring, rq->tail); 329 assert_ring_tail_valid(rq->ring, rq->tail);
330
331 return cs;
330} 332}
331static const int gen6_rcs_emit_breadcrumb_sz = 14; 333static const int gen6_rcs_emit_breadcrumb_sz = 14;
332 334
@@ -409,7 +411,7 @@ gen7_render_ring_flush(struct i915_request *rq, u32 mode)
409 return 0; 411 return 0;
410} 412}
411 413
412static void gen7_rcs_emit_breadcrumb(struct i915_request *rq, u32 *cs) 414static u32 *gen7_rcs_emit_breadcrumb(struct i915_request *rq, u32 *cs)
413{ 415{
414 *cs++ = GFX_OP_PIPE_CONTROL(4); 416 *cs++ = GFX_OP_PIPE_CONTROL(4);
415 *cs++ = (PIPE_CONTROL_RENDER_TARGET_CACHE_FLUSH | 417 *cs++ = (PIPE_CONTROL_RENDER_TARGET_CACHE_FLUSH |
@@ -427,10 +429,12 @@ static void gen7_rcs_emit_breadcrumb(struct i915_request *rq, u32 *cs)
427 429
428 rq->tail = intel_ring_offset(rq, cs); 430 rq->tail = intel_ring_offset(rq, cs);
429 assert_ring_tail_valid(rq->ring, rq->tail); 431 assert_ring_tail_valid(rq->ring, rq->tail);
432
433 return cs;
430} 434}
431static const int gen7_rcs_emit_breadcrumb_sz = 6; 435static const int gen7_rcs_emit_breadcrumb_sz = 6;
432 436
433static void gen6_xcs_emit_breadcrumb(struct i915_request *rq, u32 *cs) 437static u32 *gen6_xcs_emit_breadcrumb(struct i915_request *rq, u32 *cs)
434{ 438{
435 *cs++ = MI_FLUSH_DW | MI_FLUSH_DW_OP_STOREDW; 439 *cs++ = MI_FLUSH_DW | MI_FLUSH_DW_OP_STOREDW;
436 *cs++ = intel_hws_seqno_address(rq->engine) | MI_FLUSH_DW_USE_GTT; 440 *cs++ = intel_hws_seqno_address(rq->engine) | MI_FLUSH_DW_USE_GTT;
@@ -439,11 +443,13 @@ static void gen6_xcs_emit_breadcrumb(struct i915_request *rq, u32 *cs)
439 443
440 rq->tail = intel_ring_offset(rq, cs); 444 rq->tail = intel_ring_offset(rq, cs);
441 assert_ring_tail_valid(rq->ring, rq->tail); 445 assert_ring_tail_valid(rq->ring, rq->tail);
446
447 return cs;
442} 448}
443static const int gen6_xcs_emit_breadcrumb_sz = 4; 449static const int gen6_xcs_emit_breadcrumb_sz = 4;
444 450
445#define GEN7_XCS_WA 32 451#define GEN7_XCS_WA 32
446static void gen7_xcs_emit_breadcrumb(struct i915_request *rq, u32 *cs) 452static u32 *gen7_xcs_emit_breadcrumb(struct i915_request *rq, u32 *cs)
447{ 453{
448 int i; 454 int i;
449 455
@@ -466,6 +472,8 @@ static void gen7_xcs_emit_breadcrumb(struct i915_request *rq, u32 *cs)
466 472
467 rq->tail = intel_ring_offset(rq, cs); 473 rq->tail = intel_ring_offset(rq, cs);
468 assert_ring_tail_valid(rq->ring, rq->tail); 474 assert_ring_tail_valid(rq->ring, rq->tail);
475
476 return cs;
469} 477}
470static const int gen7_xcs_emit_breadcrumb_sz = 8 + GEN7_XCS_WA * 3; 478static const int gen7_xcs_emit_breadcrumb_sz = 8 + GEN7_XCS_WA * 3;
471#undef GEN7_XCS_WA 479#undef GEN7_XCS_WA
@@ -861,7 +869,7 @@ static void i9xx_submit_request(struct i915_request *request)
861 intel_ring_set_tail(request->ring, request->tail)); 869 intel_ring_set_tail(request->ring, request->tail));
862} 870}
863 871
864static void i9xx_emit_breadcrumb(struct i915_request *rq, u32 *cs) 872static u32 *i9xx_emit_breadcrumb(struct i915_request *rq, u32 *cs)
865{ 873{
866 *cs++ = MI_FLUSH; 874 *cs++ = MI_FLUSH;
867 875
@@ -874,11 +882,13 @@ static void i9xx_emit_breadcrumb(struct i915_request *rq, u32 *cs)
874 882
875 rq->tail = intel_ring_offset(rq, cs); 883 rq->tail = intel_ring_offset(rq, cs);
876 assert_ring_tail_valid(rq->ring, rq->tail); 884 assert_ring_tail_valid(rq->ring, rq->tail);
885
886 return cs;
877} 887}
878static const int i9xx_emit_breadcrumb_sz = 6; 888static const int i9xx_emit_breadcrumb_sz = 6;
879 889
880#define GEN5_WA_STORES 8 /* must be at least 1! */ 890#define GEN5_WA_STORES 8 /* must be at least 1! */
881static void gen5_emit_breadcrumb(struct i915_request *rq, u32 *cs) 891static u32 *gen5_emit_breadcrumb(struct i915_request *rq, u32 *cs)
882{ 892{
883 int i; 893 int i;
884 894
@@ -895,6 +905,8 @@ static void gen5_emit_breadcrumb(struct i915_request *rq, u32 *cs)
895 905
896 rq->tail = intel_ring_offset(rq, cs); 906 rq->tail = intel_ring_offset(rq, cs);
897 assert_ring_tail_valid(rq->ring, rq->tail); 907 assert_ring_tail_valid(rq->ring, rq->tail);
908
909 return cs;
898} 910}
899static const int gen5_emit_breadcrumb_sz = GEN5_WA_STORES * 3 + 2; 911static const int gen5_emit_breadcrumb_sz = GEN5_WA_STORES * 3 + 2;
900#undef GEN5_WA_STORES 912#undef GEN5_WA_STORES