aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_ringbuffer.c
diff options
context:
space:
mode:
authorJohn Harrison <John.C.Harrison@Intel.com>2015-05-29 12:43:58 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2015-06-23 08:02:22 -0400
commitf2cf1fcc70d6577dce73f269609e0753e1a99802 (patch)
treeb52000f803f4a37925d438ed30ebe9b275594d5d /drivers/gpu/drm/i915/intel_ringbuffer.c
parenta84c3ae168837dbedd0bde76a536360e84ae863a (diff)
drm/i915: Update some flush helpers to take request structures
Updated intel_emit_post_sync_nonzero_flush(), gen7_render_ring_cs_stall_wa() and gen8_emit_pipe_control() to take requests instead of rings. For: VIZ-5115 Signed-off-by: John Harrison <John.C.Harrison@Intel.com> Reviewed-by: Tomas Elf <tomas.elf@intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_ringbuffer.c')
-rw-r--r--drivers/gpu/drm/i915/intel_ringbuffer.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
index 2425dc2db42c..e0aa008f0555 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
@@ -214,8 +214,9 @@ gen4_render_ring_flush(struct drm_i915_gem_request *req,
214 * really our business. That leaves only stall at scoreboard. 214 * really our business. That leaves only stall at scoreboard.
215 */ 215 */
216static int 216static int
217intel_emit_post_sync_nonzero_flush(struct intel_engine_cs *ring) 217intel_emit_post_sync_nonzero_flush(struct drm_i915_gem_request *req)
218{ 218{
219 struct intel_engine_cs *ring = req->ring;
219 u32 scratch_addr = ring->scratch.gtt_offset + 2 * CACHELINE_BYTES; 220 u32 scratch_addr = ring->scratch.gtt_offset + 2 * CACHELINE_BYTES;
220 int ret; 221 int ret;
221 222
@@ -258,7 +259,7 @@ gen6_render_ring_flush(struct drm_i915_gem_request *req,
258 int ret; 259 int ret;
259 260
260 /* Force SNB workarounds for PIPE_CONTROL flushes */ 261 /* Force SNB workarounds for PIPE_CONTROL flushes */
261 ret = intel_emit_post_sync_nonzero_flush(ring); 262 ret = intel_emit_post_sync_nonzero_flush(req);
262 if (ret) 263 if (ret)
263 return ret; 264 return ret;
264 265
@@ -302,8 +303,9 @@ gen6_render_ring_flush(struct drm_i915_gem_request *req,
302} 303}
303 304
304static int 305static int
305gen7_render_ring_cs_stall_wa(struct intel_engine_cs *ring) 306gen7_render_ring_cs_stall_wa(struct drm_i915_gem_request *req)
306{ 307{
308 struct intel_engine_cs *ring = req->ring;
307 int ret; 309 int ret;
308 310
309 ret = intel_ring_begin(ring, 4); 311 ret = intel_ring_begin(ring, 4);
@@ -366,7 +368,7 @@ gen7_render_ring_flush(struct drm_i915_gem_request *req,
366 /* Workaround: we must issue a pipe_control with CS-stall bit 368 /* Workaround: we must issue a pipe_control with CS-stall bit
367 * set before a pipe_control command that has the state cache 369 * set before a pipe_control command that has the state cache
368 * invalidate bit set. */ 370 * invalidate bit set. */
369 gen7_render_ring_cs_stall_wa(ring); 371 gen7_render_ring_cs_stall_wa(req);
370 } 372 }
371 373
372 ret = intel_ring_begin(ring, 4); 374 ret = intel_ring_begin(ring, 4);
@@ -383,9 +385,10 @@ gen7_render_ring_flush(struct drm_i915_gem_request *req,
383} 385}
384 386
385static int 387static int
386gen8_emit_pipe_control(struct intel_engine_cs *ring, 388gen8_emit_pipe_control(struct drm_i915_gem_request *req,
387 u32 flags, u32 scratch_addr) 389 u32 flags, u32 scratch_addr)
388{ 390{
391 struct intel_engine_cs *ring = req->ring;
389 int ret; 392 int ret;
390 393
391 ret = intel_ring_begin(ring, 6); 394 ret = intel_ring_begin(ring, 6);
@@ -407,9 +410,8 @@ static int
407gen8_render_ring_flush(struct drm_i915_gem_request *req, 410gen8_render_ring_flush(struct drm_i915_gem_request *req,
408 u32 invalidate_domains, u32 flush_domains) 411 u32 invalidate_domains, u32 flush_domains)
409{ 412{
410 struct intel_engine_cs *ring = req->ring;
411 u32 flags = 0; 413 u32 flags = 0;
412 u32 scratch_addr = ring->scratch.gtt_offset + 2 * CACHELINE_BYTES; 414 u32 scratch_addr = req->ring->scratch.gtt_offset + 2 * CACHELINE_BYTES;
413 int ret; 415 int ret;
414 416
415 flags |= PIPE_CONTROL_CS_STALL; 417 flags |= PIPE_CONTROL_CS_STALL;
@@ -429,7 +431,7 @@ gen8_render_ring_flush(struct drm_i915_gem_request *req,
429 flags |= PIPE_CONTROL_GLOBAL_GTT_IVB; 431 flags |= PIPE_CONTROL_GLOBAL_GTT_IVB;
430 432
431 /* WaCsStallBeforeStateCacheInvalidate:bdw,chv */ 433 /* WaCsStallBeforeStateCacheInvalidate:bdw,chv */
432 ret = gen8_emit_pipe_control(ring, 434 ret = gen8_emit_pipe_control(req,
433 PIPE_CONTROL_CS_STALL | 435 PIPE_CONTROL_CS_STALL |
434 PIPE_CONTROL_STALL_AT_SCOREBOARD, 436 PIPE_CONTROL_STALL_AT_SCOREBOARD,
435 0); 437 0);
@@ -437,7 +439,7 @@ gen8_render_ring_flush(struct drm_i915_gem_request *req,
437 return ret; 439 return ret;
438 } 440 }
439 441
440 return gen8_emit_pipe_control(ring, flags, scratch_addr); 442 return gen8_emit_pipe_control(req, flags, scratch_addr);
441} 443}
442 444
443static void ring_write_tail(struct intel_engine_cs *ring, 445static void ring_write_tail(struct intel_engine_cs *ring,