|
@@ -1367,19 +1367,17 @@ static int gen8_rcs_signal(struct drm_i915_gem_request *signaller_req,
|
|
|
return ret;
|
|
|
|
|
|
for_each_engine_id(waiter, dev_priv, id) {
|
|
|
- u32 seqno;
|
|
|
u64 gtt_offset = signaller->semaphore.signal_ggtt[id];
|
|
|
if (gtt_offset == MI_SEMAPHORE_SYNC_INVALID)
|
|
|
continue;
|
|
|
|
|
|
- seqno = i915_gem_request_get_seqno(signaller_req);
|
|
|
intel_ring_emit(signaller, GFX_OP_PIPE_CONTROL(6));
|
|
|
intel_ring_emit(signaller, PIPE_CONTROL_GLOBAL_GTT_IVB |
|
|
|
PIPE_CONTROL_QW_WRITE |
|
|
|
PIPE_CONTROL_CS_STALL);
|
|
|
intel_ring_emit(signaller, lower_32_bits(gtt_offset));
|
|
|
intel_ring_emit(signaller, upper_32_bits(gtt_offset));
|
|
|
- intel_ring_emit(signaller, seqno);
|
|
|
+ intel_ring_emit(signaller, signaller_req->seqno);
|
|
|
intel_ring_emit(signaller, 0);
|
|
|
intel_ring_emit(signaller, MI_SEMAPHORE_SIGNAL |
|
|
|
MI_SEMAPHORE_TARGET(waiter->hw_id));
|
|
@@ -1408,18 +1406,16 @@ static int gen8_xcs_signal(struct drm_i915_gem_request *signaller_req,
|
|
|
return ret;
|
|
|
|
|
|
for_each_engine_id(waiter, dev_priv, id) {
|
|
|
- u32 seqno;
|
|
|
u64 gtt_offset = signaller->semaphore.signal_ggtt[id];
|
|
|
if (gtt_offset == MI_SEMAPHORE_SYNC_INVALID)
|
|
|
continue;
|
|
|
|
|
|
- seqno = i915_gem_request_get_seqno(signaller_req);
|
|
|
intel_ring_emit(signaller, (MI_FLUSH_DW + 1) |
|
|
|
MI_FLUSH_DW_OP_STOREDW);
|
|
|
intel_ring_emit(signaller, lower_32_bits(gtt_offset) |
|
|
|
MI_FLUSH_DW_USE_GTT);
|
|
|
intel_ring_emit(signaller, upper_32_bits(gtt_offset));
|
|
|
- intel_ring_emit(signaller, seqno);
|
|
|
+ intel_ring_emit(signaller, signaller_req->seqno);
|
|
|
intel_ring_emit(signaller, MI_SEMAPHORE_SIGNAL |
|
|
|
MI_SEMAPHORE_TARGET(waiter->hw_id));
|
|
|
intel_ring_emit(signaller, 0);
|
|
@@ -1450,11 +1446,9 @@ static int gen6_signal(struct drm_i915_gem_request *signaller_req,
|
|
|
i915_reg_t mbox_reg = signaller->semaphore.mbox.signal[id];
|
|
|
|
|
|
if (i915_mmio_reg_valid(mbox_reg)) {
|
|
|
- u32 seqno = i915_gem_request_get_seqno(signaller_req);
|
|
|
-
|
|
|
intel_ring_emit(signaller, MI_LOAD_REGISTER_IMM(1));
|
|
|
intel_ring_emit_reg(signaller, mbox_reg);
|
|
|
- intel_ring_emit(signaller, seqno);
|
|
|
+ intel_ring_emit(signaller, signaller_req->seqno);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -1490,7 +1484,7 @@ gen6_add_request(struct drm_i915_gem_request *req)
|
|
|
intel_ring_emit(engine, MI_STORE_DWORD_INDEX);
|
|
|
intel_ring_emit(engine,
|
|
|
I915_GEM_HWS_INDEX << MI_STORE_DWORD_INDEX_SHIFT);
|
|
|
- intel_ring_emit(engine, i915_gem_request_get_seqno(req));
|
|
|
+ intel_ring_emit(engine, req->seqno);
|
|
|
intel_ring_emit(engine, MI_USER_INTERRUPT);
|
|
|
__intel_ring_advance(engine);
|
|
|
|
|
@@ -1628,7 +1622,9 @@ static int
|
|
|
pc_render_add_request(struct drm_i915_gem_request *req)
|
|
|
{
|
|
|
struct intel_engine_cs *engine = req->engine;
|
|
|
- u32 scratch_addr = engine->scratch.gtt_offset + 2 * CACHELINE_BYTES;
|
|
|
+ u32 addr = engine->status_page.gfx_addr +
|
|
|
+ (I915_GEM_HWS_INDEX << MI_STORE_DWORD_INDEX_SHIFT);
|
|
|
+ u32 scratch_addr = addr;
|
|
|
int ret;
|
|
|
|
|
|
/* For Ironlake, MI_USER_INTERRUPT was deprecated and apparently
|
|
@@ -1644,12 +1640,12 @@ pc_render_add_request(struct drm_i915_gem_request *req)
|
|
|
return ret;
|
|
|
|
|
|
intel_ring_emit(engine,
|
|
|
- GFX_OP_PIPE_CONTROL(4) | PIPE_CONTROL_QW_WRITE |
|
|
|
+ GFX_OP_PIPE_CONTROL(4) |
|
|
|
+ PIPE_CONTROL_QW_WRITE |
|
|
|
PIPE_CONTROL_WRITE_FLUSH |
|
|
|
PIPE_CONTROL_TEXTURE_CACHE_INVALIDATE);
|
|
|
- intel_ring_emit(engine,
|
|
|
- engine->scratch.gtt_offset | PIPE_CONTROL_GLOBAL_GTT);
|
|
|
- intel_ring_emit(engine, i915_gem_request_get_seqno(req));
|
|
|
+ intel_ring_emit(engine, addr | PIPE_CONTROL_GLOBAL_GTT);
|
|
|
+ intel_ring_emit(engine, req->seqno);
|
|
|
intel_ring_emit(engine, 0);
|
|
|
PIPE_CONTROL_FLUSH(engine, scratch_addr);
|
|
|
scratch_addr += 2 * CACHELINE_BYTES; /* write to separate cachelines */
|
|
@@ -1668,9 +1664,8 @@ pc_render_add_request(struct drm_i915_gem_request *req)
|
|
|
PIPE_CONTROL_WRITE_FLUSH |
|
|
|
PIPE_CONTROL_TEXTURE_CACHE_INVALIDATE |
|
|
|
PIPE_CONTROL_NOTIFY);
|
|
|
- intel_ring_emit(engine,
|
|
|
- engine->scratch.gtt_offset | PIPE_CONTROL_GLOBAL_GTT);
|
|
|
- intel_ring_emit(engine, i915_gem_request_get_seqno(req));
|
|
|
+ intel_ring_emit(engine, addr | PIPE_CONTROL_GLOBAL_GTT);
|
|
|
+ intel_ring_emit(engine, req->seqno);
|
|
|
intel_ring_emit(engine, 0);
|
|
|
__intel_ring_advance(engine);
|
|
|
|
|
@@ -1702,30 +1697,6 @@ gen6_seqno_barrier(struct intel_engine_cs *engine)
|
|
|
spin_unlock_irq(&dev_priv->uncore.lock);
|
|
|
}
|
|
|
|
|
|
-static u32
|
|
|
-ring_get_seqno(struct intel_engine_cs *engine)
|
|
|
-{
|
|
|
- return intel_read_status_page(engine, I915_GEM_HWS_INDEX);
|
|
|
-}
|
|
|
-
|
|
|
-static void
|
|
|
-ring_set_seqno(struct intel_engine_cs *engine, u32 seqno)
|
|
|
-{
|
|
|
- intel_write_status_page(engine, I915_GEM_HWS_INDEX, seqno);
|
|
|
-}
|
|
|
-
|
|
|
-static u32
|
|
|
-pc_render_get_seqno(struct intel_engine_cs *engine)
|
|
|
-{
|
|
|
- return engine->scratch.cpu_page[0];
|
|
|
-}
|
|
|
-
|
|
|
-static void
|
|
|
-pc_render_set_seqno(struct intel_engine_cs *engine, u32 seqno)
|
|
|
-{
|
|
|
- engine->scratch.cpu_page[0] = seqno;
|
|
|
-}
|
|
|
-
|
|
|
static bool
|
|
|
gen5_ring_get_irq(struct intel_engine_cs *engine)
|
|
|
{
|
|
@@ -1856,7 +1827,7 @@ i9xx_add_request(struct drm_i915_gem_request *req)
|
|
|
intel_ring_emit(engine, MI_STORE_DWORD_INDEX);
|
|
|
intel_ring_emit(engine,
|
|
|
I915_GEM_HWS_INDEX << MI_STORE_DWORD_INDEX_SHIFT);
|
|
|
- intel_ring_emit(engine, i915_gem_request_get_seqno(req));
|
|
|
+ intel_ring_emit(engine, req->seqno);
|
|
|
intel_ring_emit(engine, MI_USER_INTERRUPT);
|
|
|
__intel_ring_advance(engine);
|
|
|
|
|
@@ -2675,7 +2646,9 @@ void intel_ring_init_seqno(struct intel_engine_cs *engine, u32 seqno)
|
|
|
memset(engine->semaphore.sync_seqno, 0,
|
|
|
sizeof(engine->semaphore.sync_seqno));
|
|
|
|
|
|
- engine->set_seqno(engine, seqno);
|
|
|
+ intel_write_status_page(engine, I915_GEM_HWS_INDEX, seqno);
|
|
|
+ if (engine->irq_seqno_barrier)
|
|
|
+ engine->irq_seqno_barrier(engine);
|
|
|
engine->last_submitted_seqno = seqno;
|
|
|
|
|
|
engine->hangcheck.seqno = seqno;
|
|
@@ -3021,8 +2994,6 @@ static void intel_ring_default_vfuncs(struct drm_i915_private *dev_priv,
|
|
|
{
|
|
|
engine->init_hw = init_ring_common;
|
|
|
engine->write_tail = ring_write_tail;
|
|
|
- engine->get_seqno = ring_get_seqno;
|
|
|
- engine->set_seqno = ring_set_seqno;
|
|
|
|
|
|
engine->add_request = i9xx_add_request;
|
|
|
if (INTEL_GEN(dev_priv) >= 6)
|
|
@@ -3074,8 +3045,6 @@ int intel_init_render_ring_buffer(struct drm_device *dev)
|
|
|
} else if (IS_GEN5(dev_priv)) {
|
|
|
engine->add_request = pc_render_add_request;
|
|
|
engine->flush = gen4_render_ring_flush;
|
|
|
- engine->get_seqno = pc_render_get_seqno;
|
|
|
- engine->set_seqno = pc_render_set_seqno;
|
|
|
engine->irq_enable_mask = GT_RENDER_USER_INTERRUPT |
|
|
|
GT_RENDER_PIPECTL_NOTIFY_INTERRUPT;
|
|
|
} else {
|