Commit 618e4ca7 authored by Chris Wilson's avatar Chris Wilson

drm/i915/ringbuffer: Specialise SNB+ request emission for semaphores

As gen6_emit_request() only differs from i9xx_emit_request() when
semaphores are enabled, only use the specialised vfunc in that scenario.

v2: Reorder semaphore init so as to keep engine->emit_request default
vfunc selection compact.
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Link: http://patchwork.freedesktop.org/patch/msgid/1469432687-22756-27-git-send-email-chris@chris-wilson.co.ukReviewed-by: default avatarJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1470174640-18242-18-git-send-email-chris@chris-wilson.co.uk
parent b0411e7d
...@@ -1444,22 +1444,20 @@ static int i9xx_emit_request(struct drm_i915_gem_request *req) ...@@ -1444,22 +1444,20 @@ static int i9xx_emit_request(struct drm_i915_gem_request *req)
} }
/** /**
* gen6_emit_request - Update the semaphore mailbox registers * gen6_sema_emit_request - Update the semaphore mailbox registers
* *
* @request - request to write to the ring * @request - request to write to the ring
* *
* Update the mailbox registers in the *other* rings with the current seqno. * Update the mailbox registers in the *other* rings with the current seqno.
* This acts like a signal in the canonical semaphore. * This acts like a signal in the canonical semaphore.
*/ */
static int gen6_emit_request(struct drm_i915_gem_request *req) static int gen6_sema_emit_request(struct drm_i915_gem_request *req)
{ {
if (req->engine->semaphore.signal) { int ret;
int ret;
ret = req->engine->semaphore.signal(req); ret = req->engine->semaphore.signal(req);
if (ret) if (ret)
return ret; return ret;
}
return i9xx_emit_request(req); return i9xx_emit_request(req);
} }
...@@ -2785,11 +2783,14 @@ static void intel_ring_init_irq(struct drm_i915_private *dev_priv, ...@@ -2785,11 +2783,14 @@ static void intel_ring_init_irq(struct drm_i915_private *dev_priv,
static void intel_ring_default_vfuncs(struct drm_i915_private *dev_priv, static void intel_ring_default_vfuncs(struct drm_i915_private *dev_priv,
struct intel_engine_cs *engine) struct intel_engine_cs *engine)
{ {
intel_ring_init_irq(dev_priv, engine);
intel_ring_init_semaphores(dev_priv, engine);
engine->init_hw = init_ring_common; engine->init_hw = init_ring_common;
engine->emit_request = i9xx_emit_request; engine->emit_request = i9xx_emit_request;
if (INTEL_GEN(dev_priv) >= 6) if (i915.semaphores)
engine->emit_request = gen6_emit_request; engine->emit_request = gen6_sema_emit_request;
engine->submit_request = i9xx_submit_request; engine->submit_request = i9xx_submit_request;
if (INTEL_GEN(dev_priv) >= 8) if (INTEL_GEN(dev_priv) >= 8)
...@@ -2802,9 +2803,6 @@ static void intel_ring_default_vfuncs(struct drm_i915_private *dev_priv, ...@@ -2802,9 +2803,6 @@ static void intel_ring_default_vfuncs(struct drm_i915_private *dev_priv,
engine->emit_bb_start = i830_emit_bb_start; engine->emit_bb_start = i830_emit_bb_start;
else else
engine->emit_bb_start = i915_emit_bb_start; engine->emit_bb_start = i915_emit_bb_start;
intel_ring_init_irq(dev_priv, engine);
intel_ring_init_semaphores(dev_priv, engine);
} }
int intel_init_render_ring_buffer(struct intel_engine_cs *engine) int intel_init_render_ring_buffer(struct intel_engine_cs *engine)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment