aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_ringbuffer.c
diff options
context:
space:
mode:
authorOscar Mateo <oscar.mateo@intel.com>2014-07-24 12:04:24 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2014-08-11 11:03:28 -0400
commit9b1136d505b1de5478e11b59ca59cf8ce2a33217 (patch)
tree5a8275267b643ed3b4628c6bf0069c677899a771 /drivers/gpu/drm/i915/intel_ringbuffer.c
parent48d823878d64f93163f5a949623346748bbce1b4 (diff)
drm/i915/bdw: GEN-specific logical ring init
Logical rings do not need most of the initialization their legacy ringbuffer counterparts do: we just need the pipe control object for the render ring, enable Execlists on the hardware and a few workarounds. v2: Squash with: "drm/i915: Extract pipe control fini & make init outside accesible". Signed-off-by: Oscar Mateo <oscar.mateo@intel.com> Reviewed-by: Damien Lespiau <damien.lespiau@intel.com> [danvet: Make checkpatch happy.] 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.c34
1 files changed, 21 insertions, 13 deletions
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
index e4b97f5c5797..dab5e7c79036 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
@@ -597,8 +597,25 @@ out:
597 return ret; 597 return ret;
598} 598}
599 599
600static int 600void
601init_pipe_control(struct intel_engine_cs *ring) 601intel_fini_pipe_control(struct intel_engine_cs *ring)
602{
603 struct drm_device *dev = ring->dev;
604
605 if (ring->scratch.obj == NULL)
606 return;
607
608 if (INTEL_INFO(dev)->gen >= 5) {
609 kunmap(sg_page(ring->scratch.obj->pages->sgl));
610 i915_gem_object_ggtt_unpin(ring->scratch.obj);
611 }
612
613 drm_gem_object_unreference(&ring->scratch.obj->base);
614 ring->scratch.obj = NULL;
615}
616
617int
618intel_init_pipe_control(struct intel_engine_cs *ring)
602{ 619{
603 int ret; 620 int ret;
604 621
@@ -673,7 +690,7 @@ static int init_render_ring(struct intel_engine_cs *ring)
673 _MASKED_BIT_ENABLE(GFX_REPLAY_MODE)); 690 _MASKED_BIT_ENABLE(GFX_REPLAY_MODE));
674 691
675 if (INTEL_INFO(dev)->gen >= 5) { 692 if (INTEL_INFO(dev)->gen >= 5) {
676 ret = init_pipe_control(ring); 693 ret = intel_init_pipe_control(ring);
677 if (ret) 694 if (ret)
678 return ret; 695 return ret;
679 } 696 }
@@ -708,16 +725,7 @@ static void render_ring_cleanup(struct intel_engine_cs *ring)
708 dev_priv->semaphore_obj = NULL; 725 dev_priv->semaphore_obj = NULL;
709 } 726 }
710 727
711 if (ring->scratch.obj == NULL) 728 intel_fini_pipe_control(ring);
712 return;
713
714 if (INTEL_INFO(dev)->gen >= 5) {
715 kunmap(sg_page(ring->scratch.obj->pages->sgl));
716 i915_gem_object_ggtt_unpin(ring->scratch.obj);
717 }
718
719 drm_gem_object_unreference(&ring->scratch.obj->base);
720 ring->scratch.obj = NULL;
721} 729}
722 730
723static int gen8_rcs_signal(struct intel_engine_cs *signaller, 731static int gen8_rcs_signal(struct intel_engine_cs *signaller,