aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorBen Widawsky <ben@bwidawsk.net>2013-02-08 14:49:24 -0500
committerDaniel Vetter <daniel.vetter@ffwll.ch>2013-02-15 04:30:39 -0500
commit4fc7c971c3aedf937f824c063d698779d25c3330 (patch)
tree6f11f375884326cca1bb555cc05c5d58e766c062 /drivers
parent41907ddc1b71aaa4ef5290f46f0ec49d581d6aac (diff)
drm/i915: Extract ring init from hw_init
The ring initialization will differ a bit in upcoming generations, and this split will prepare the code for what's needed. This patch also fixes a bug introduced in: commit 99433931950f33039d9e1a52b4ed9af3f1b58e84 Author: Mika Kuoppala <mika.kuoppala@linux.intel.com> Date: Tue Jan 22 14:12:17 2013 +0200 drm/i915: use gem_set_seqno() on hardware init After doing the extraction, the bad error handling became obvious. I acknowledge that this should be two patches, but it's a pretty small/trivial patch. If requested, I can certainly do the fix as a distinct patch. v2: Should be cleanup blt, not init blt on failure (Chris) v3: Forgot to git add on v2 Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com> Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Ben Widawsky <ben@bwidawsk.net> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/drm/i915/i915_gem.c53
1 files changed, 34 insertions, 19 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 62be74899c2b..d8618f32557e 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -3930,22 +3930,11 @@ intel_enable_blt(struct drm_device *dev)
3930 return true; 3930 return true;
3931} 3931}
3932 3932
3933int 3933static int i915_gem_init_rings(struct drm_device *dev)
3934i915_gem_init_hw(struct drm_device *dev)
3935{ 3934{
3936 drm_i915_private_t *dev_priv = dev->dev_private; 3935 struct drm_i915_private *dev_priv = dev->dev_private;
3937 int ret; 3936 int ret;
3938 3937
3939 if (INTEL_INFO(dev)->gen < 6 && !intel_enable_gtt())
3940 return -EIO;
3941
3942 if (IS_HASWELL(dev) && (I915_READ(0x120010) == 1))
3943 I915_WRITE(0x9008, I915_READ(0x9008) | 0xf0000);
3944
3945 i915_gem_l3_remap(dev);
3946
3947 i915_gem_init_swizzling(dev);
3948
3949 ret = intel_init_render_ring_buffer(dev); 3938 ret = intel_init_render_ring_buffer(dev);
3950 if (ret) 3939 if (ret)
3951 return ret; 3940 return ret;
@@ -3964,6 +3953,38 @@ i915_gem_init_hw(struct drm_device *dev)
3964 3953
3965 ret = i915_gem_set_seqno(dev, ((u32)~0 - 0x1000)); 3954 ret = i915_gem_set_seqno(dev, ((u32)~0 - 0x1000));
3966 if (ret) 3955 if (ret)
3956 goto cleanup_blt_ring;
3957
3958 return 0;
3959
3960cleanup_blt_ring:
3961 intel_cleanup_ring_buffer(&dev_priv->ring[BCS]);
3962cleanup_bsd_ring:
3963 intel_cleanup_ring_buffer(&dev_priv->ring[VCS]);
3964cleanup_render_ring:
3965 intel_cleanup_ring_buffer(&dev_priv->ring[RCS]);
3966
3967 return ret;
3968}
3969
3970int
3971i915_gem_init_hw(struct drm_device *dev)
3972{
3973 drm_i915_private_t *dev_priv = dev->dev_private;
3974 int ret;
3975
3976 if (INTEL_INFO(dev)->gen < 6 && !intel_enable_gtt())
3977 return -EIO;
3978
3979 if (IS_HASWELL(dev) && (I915_READ(0x120010) == 1))
3980 I915_WRITE(0x9008, I915_READ(0x9008) | 0xf0000);
3981
3982 i915_gem_l3_remap(dev);
3983
3984 i915_gem_init_swizzling(dev);
3985
3986 ret = i915_gem_init_rings(dev);
3987 if (ret)
3967 return ret; 3988 return ret;
3968 3989
3969 /* 3990 /*
@@ -3974,12 +3995,6 @@ i915_gem_init_hw(struct drm_device *dev)
3974 i915_gem_init_ppgtt(dev); 3995 i915_gem_init_ppgtt(dev);
3975 3996
3976 return 0; 3997 return 0;
3977
3978cleanup_bsd_ring:
3979 intel_cleanup_ring_buffer(&dev_priv->ring[VCS]);
3980cleanup_render_ring:
3981 intel_cleanup_ring_buffer(&dev_priv->ring[RCS]);
3982 return ret;
3983} 3998}
3984 3999
3985int i915_gem_init(struct drm_device *dev) 4000int i915_gem_init(struct drm_device *dev)