aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
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)