diff options
author | Daniel Vetter <daniel.vetter@ffwll.ch> | 2014-11-19 18:33:06 -0500 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2014-12-03 03:35:27 -0500 |
commit | 99be1dfe06e56b6e32f522979e9cf354dad5dc2e (patch) | |
tree | 2097727ef4e142da54d9a83ca853457a05397a8c | |
parent | ecfe00d802d47af797f09cf8c88ad5ee7aa8d11b (diff) |
drm/i915: Move intel_init_pipe_control out of engine->init_hw
With this all the ->init_hw hooks really only set up hw state needed
to start the ring, all the software state setup and memory/buffer
allocations happen beforehand.
v2: We need to call intel_init_pipe_control after the ring init since
otherwise engine->dev is NULL and it falls over. Currently that's
now after the hw ring is enabled but a) we'll be fine as long as no
one submits a batch b) this will change soon.
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Reviewed-by: Dave Gordon <david.s.gordon@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r-- | drivers/gpu/drm/i915/intel_lrc.c | 12 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_ringbuffer.c | 18 |
2 files changed, 18 insertions, 12 deletions
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c index 5e9bb531aeef..542382f2b1d5 100644 --- a/drivers/gpu/drm/i915/intel_lrc.c +++ b/drivers/gpu/drm/i915/intel_lrc.c | |||
@@ -1161,10 +1161,6 @@ static int gen8_init_render_ring(struct intel_engine_cs *ring) | |||
1161 | */ | 1161 | */ |
1162 | I915_WRITE(MI_MODE, _MASKED_BIT_ENABLE(ASYNC_FLIP_PERF_DISABLE)); | 1162 | I915_WRITE(MI_MODE, _MASKED_BIT_ENABLE(ASYNC_FLIP_PERF_DISABLE)); |
1163 | 1163 | ||
1164 | ret = intel_init_pipe_control(ring); | ||
1165 | if (ret) | ||
1166 | return ret; | ||
1167 | |||
1168 | I915_WRITE(INSTPM, _MASKED_BIT_ENABLE(INSTPM_FORCE_ORDERING)); | 1164 | I915_WRITE(INSTPM, _MASKED_BIT_ENABLE(INSTPM_FORCE_ORDERING)); |
1169 | 1165 | ||
1170 | return init_workarounds_ring(ring); | 1166 | return init_workarounds_ring(ring); |
@@ -1406,6 +1402,7 @@ static int logical_render_ring_init(struct drm_device *dev) | |||
1406 | { | 1402 | { |
1407 | struct drm_i915_private *dev_priv = dev->dev_private; | 1403 | struct drm_i915_private *dev_priv = dev->dev_private; |
1408 | struct intel_engine_cs *ring = &dev_priv->ring[RCS]; | 1404 | struct intel_engine_cs *ring = &dev_priv->ring[RCS]; |
1405 | int ret; | ||
1409 | 1406 | ||
1410 | ring->name = "render ring"; | 1407 | ring->name = "render ring"; |
1411 | ring->id = RCS; | 1408 | ring->id = RCS; |
@@ -1428,7 +1425,12 @@ static int logical_render_ring_init(struct drm_device *dev) | |||
1428 | ring->irq_put = gen8_logical_ring_put_irq; | 1425 | ring->irq_put = gen8_logical_ring_put_irq; |
1429 | ring->emit_bb_start = gen8_emit_bb_start; | 1426 | ring->emit_bb_start = gen8_emit_bb_start; |
1430 | 1427 | ||
1431 | return logical_ring_init(dev, ring); | 1428 | ring->dev = dev; |
1429 | ret = logical_ring_init(dev, ring); | ||
1430 | if (ret) | ||
1431 | return ret; | ||
1432 | |||
1433 | return intel_init_pipe_control(ring); | ||
1432 | } | 1434 | } |
1433 | 1435 | ||
1434 | static int logical_bsd_ring_init(struct drm_device *dev) | 1436 | static int logical_bsd_ring_init(struct drm_device *dev) |
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c index 2a87b2261350..f0ffcf7c7eb3 100644 --- a/drivers/gpu/drm/i915/intel_ringbuffer.c +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c | |||
@@ -865,12 +865,6 @@ static int init_render_ring(struct intel_engine_cs *ring) | |||
865 | _MASKED_BIT_ENABLE(GFX_TLB_INVALIDATE_EXPLICIT) | | 865 | _MASKED_BIT_ENABLE(GFX_TLB_INVALIDATE_EXPLICIT) | |
866 | _MASKED_BIT_ENABLE(GFX_REPLAY_MODE)); | 866 | _MASKED_BIT_ENABLE(GFX_REPLAY_MODE)); |
867 | 867 | ||
868 | if (INTEL_INFO(dev)->gen >= 5) { | ||
869 | ret = intel_init_pipe_control(ring); | ||
870 | if (ret) | ||
871 | return ret; | ||
872 | } | ||
873 | |||
874 | if (IS_GEN6(dev)) { | 868 | if (IS_GEN6(dev)) { |
875 | /* From the Sandybridge PRM, volume 1 part 3, page 24: | 869 | /* From the Sandybridge PRM, volume 1 part 3, page 24: |
876 | * "If this bit is set, STCunit will have LRA as replacement | 870 | * "If this bit is set, STCunit will have LRA as replacement |
@@ -2459,7 +2453,17 @@ int intel_init_render_ring_buffer(struct drm_device *dev) | |||
2459 | ring->scratch.gtt_offset = i915_gem_obj_ggtt_offset(obj); | 2453 | ring->scratch.gtt_offset = i915_gem_obj_ggtt_offset(obj); |
2460 | } | 2454 | } |
2461 | 2455 | ||
2462 | return intel_init_ring_buffer(dev, ring); | 2456 | ret = intel_init_ring_buffer(dev, ring); |
2457 | if (ret) | ||
2458 | return ret; | ||
2459 | |||
2460 | if (INTEL_INFO(dev)->gen >= 5) { | ||
2461 | ret = intel_init_pipe_control(ring); | ||
2462 | if (ret) | ||
2463 | return ret; | ||
2464 | } | ||
2465 | |||
2466 | return 0; | ||
2463 | } | 2467 | } |
2464 | 2468 | ||
2465 | int intel_init_bsd_ring_buffer(struct drm_device *dev) | 2469 | int intel_init_bsd_ring_buffer(struct drm_device *dev) |