mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-18 22:14:16 +00:00
drm/i915: Extract vfunc setup from logical ring initializers
Majority of them was duplicated code and only render ring currently overrides some of them. We can save some lines of code and also take away the confusion on why bsd2 did not do the seqno coherency workaround. (VCS2 ring does not exist on platforms where workaround is needed but that was not documented in the code.) Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Cc: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> Link: http://patchwork.freedesktop.org/patch/msgid/1452619956-27014-1-git-send-email-tvrtko.ursulin@linux.intel.com
This commit is contained in:
parent
f11a0f46a2
commit
c9cacf9349
1 changed files with 29 additions and 59 deletions
|
@ -1942,7 +1942,28 @@ void intel_logical_ring_cleanup(struct intel_engine_cs *ring)
|
|||
ring->dev = NULL;
|
||||
}
|
||||
|
||||
static int logical_ring_init(struct drm_device *dev, struct intel_engine_cs *ring)
|
||||
static void
|
||||
logical_ring_default_vfuncs(struct drm_device *dev,
|
||||
struct intel_engine_cs *ring)
|
||||
{
|
||||
/* Default vfuncs which can be overriden by each engine. */
|
||||
ring->init_hw = gen8_init_common_ring;
|
||||
ring->emit_request = gen8_emit_request;
|
||||
ring->emit_flush = gen8_emit_flush;
|
||||
ring->irq_get = gen8_logical_ring_get_irq;
|
||||
ring->irq_put = gen8_logical_ring_put_irq;
|
||||
ring->emit_bb_start = gen8_emit_bb_start;
|
||||
if (IS_BXT_REVID(dev, 0, BXT_REVID_A1)) {
|
||||
ring->get_seqno = bxt_a_get_seqno;
|
||||
ring->set_seqno = bxt_a_set_seqno;
|
||||
} else {
|
||||
ring->get_seqno = gen8_get_seqno;
|
||||
ring->set_seqno = gen8_set_seqno;
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
logical_ring_init(struct drm_device *dev, struct intel_engine_cs *ring)
|
||||
{
|
||||
int ret;
|
||||
|
||||
|
@ -2003,24 +2024,16 @@ static int logical_render_ring_init(struct drm_device *dev)
|
|||
if (HAS_L3_DPF(dev))
|
||||
ring->irq_keep_mask |= GT_RENDER_L3_PARITY_ERROR_INTERRUPT;
|
||||
|
||||
logical_ring_default_vfuncs(dev, ring);
|
||||
|
||||
/* Override some for render ring. */
|
||||
if (INTEL_INFO(dev)->gen >= 9)
|
||||
ring->init_hw = gen9_init_render_ring;
|
||||
else
|
||||
ring->init_hw = gen8_init_render_ring;
|
||||
ring->init_context = gen8_init_rcs_context;
|
||||
ring->cleanup = intel_fini_pipe_control;
|
||||
if (IS_BXT_REVID(dev, 0, BXT_REVID_A1)) {
|
||||
ring->get_seqno = bxt_a_get_seqno;
|
||||
ring->set_seqno = bxt_a_set_seqno;
|
||||
} else {
|
||||
ring->get_seqno = gen8_get_seqno;
|
||||
ring->set_seqno = gen8_set_seqno;
|
||||
}
|
||||
ring->emit_request = gen8_emit_request;
|
||||
ring->emit_flush = gen8_emit_flush_render;
|
||||
ring->irq_get = gen8_logical_ring_get_irq;
|
||||
ring->irq_put = gen8_logical_ring_put_irq;
|
||||
ring->emit_bb_start = gen8_emit_bb_start;
|
||||
|
||||
ring->dev = dev;
|
||||
|
||||
|
@ -2060,19 +2073,7 @@ static int logical_bsd_ring_init(struct drm_device *dev)
|
|||
ring->irq_keep_mask =
|
||||
GT_CONTEXT_SWITCH_INTERRUPT << GEN8_VCS1_IRQ_SHIFT;
|
||||
|
||||
ring->init_hw = gen8_init_common_ring;
|
||||
if (IS_BXT_REVID(dev, 0, BXT_REVID_A1)) {
|
||||
ring->get_seqno = bxt_a_get_seqno;
|
||||
ring->set_seqno = bxt_a_set_seqno;
|
||||
} else {
|
||||
ring->get_seqno = gen8_get_seqno;
|
||||
ring->set_seqno = gen8_set_seqno;
|
||||
}
|
||||
ring->emit_request = gen8_emit_request;
|
||||
ring->emit_flush = gen8_emit_flush;
|
||||
ring->irq_get = gen8_logical_ring_get_irq;
|
||||
ring->irq_put = gen8_logical_ring_put_irq;
|
||||
ring->emit_bb_start = gen8_emit_bb_start;
|
||||
logical_ring_default_vfuncs(dev, ring);
|
||||
|
||||
return logical_ring_init(dev, ring);
|
||||
}
|
||||
|
@ -2090,14 +2091,7 @@ static int logical_bsd2_ring_init(struct drm_device *dev)
|
|||
ring->irq_keep_mask =
|
||||
GT_CONTEXT_SWITCH_INTERRUPT << GEN8_VCS2_IRQ_SHIFT;
|
||||
|
||||
ring->init_hw = gen8_init_common_ring;
|
||||
ring->get_seqno = gen8_get_seqno;
|
||||
ring->set_seqno = gen8_set_seqno;
|
||||
ring->emit_request = gen8_emit_request;
|
||||
ring->emit_flush = gen8_emit_flush;
|
||||
ring->irq_get = gen8_logical_ring_get_irq;
|
||||
ring->irq_put = gen8_logical_ring_put_irq;
|
||||
ring->emit_bb_start = gen8_emit_bb_start;
|
||||
logical_ring_default_vfuncs(dev, ring);
|
||||
|
||||
return logical_ring_init(dev, ring);
|
||||
}
|
||||
|
@ -2115,19 +2109,7 @@ static int logical_blt_ring_init(struct drm_device *dev)
|
|||
ring->irq_keep_mask =
|
||||
GT_CONTEXT_SWITCH_INTERRUPT << GEN8_BCS_IRQ_SHIFT;
|
||||
|
||||
ring->init_hw = gen8_init_common_ring;
|
||||
if (IS_BXT_REVID(dev, 0, BXT_REVID_A1)) {
|
||||
ring->get_seqno = bxt_a_get_seqno;
|
||||
ring->set_seqno = bxt_a_set_seqno;
|
||||
} else {
|
||||
ring->get_seqno = gen8_get_seqno;
|
||||
ring->set_seqno = gen8_set_seqno;
|
||||
}
|
||||
ring->emit_request = gen8_emit_request;
|
||||
ring->emit_flush = gen8_emit_flush;
|
||||
ring->irq_get = gen8_logical_ring_get_irq;
|
||||
ring->irq_put = gen8_logical_ring_put_irq;
|
||||
ring->emit_bb_start = gen8_emit_bb_start;
|
||||
logical_ring_default_vfuncs(dev, ring);
|
||||
|
||||
return logical_ring_init(dev, ring);
|
||||
}
|
||||
|
@ -2145,19 +2127,7 @@ static int logical_vebox_ring_init(struct drm_device *dev)
|
|||
ring->irq_keep_mask =
|
||||
GT_CONTEXT_SWITCH_INTERRUPT << GEN8_VECS_IRQ_SHIFT;
|
||||
|
||||
ring->init_hw = gen8_init_common_ring;
|
||||
if (IS_BXT_REVID(dev, 0, BXT_REVID_A1)) {
|
||||
ring->get_seqno = bxt_a_get_seqno;
|
||||
ring->set_seqno = bxt_a_set_seqno;
|
||||
} else {
|
||||
ring->get_seqno = gen8_get_seqno;
|
||||
ring->set_seqno = gen8_set_seqno;
|
||||
}
|
||||
ring->emit_request = gen8_emit_request;
|
||||
ring->emit_flush = gen8_emit_flush;
|
||||
ring->irq_get = gen8_logical_ring_get_irq;
|
||||
ring->irq_put = gen8_logical_ring_put_irq;
|
||||
ring->emit_bb_start = gen8_emit_bb_start;
|
||||
logical_ring_default_vfuncs(dev, ring);
|
||||
|
||||
return logical_ring_init(dev, ring);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue