diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gpu/drm/i915/i915_gem.c | 53 |
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 | ||
3933 | int | 3933 | static int i915_gem_init_rings(struct drm_device *dev) |
3934 | i915_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 | |||
3960 | cleanup_blt_ring: | ||
3961 | intel_cleanup_ring_buffer(&dev_priv->ring[BCS]); | ||
3962 | cleanup_bsd_ring: | ||
3963 | intel_cleanup_ring_buffer(&dev_priv->ring[VCS]); | ||
3964 | cleanup_render_ring: | ||
3965 | intel_cleanup_ring_buffer(&dev_priv->ring[RCS]); | ||
3966 | |||
3967 | return ret; | ||
3968 | } | ||
3969 | |||
3970 | int | ||
3971 | i915_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 | |||
3978 | cleanup_bsd_ring: | ||
3979 | intel_cleanup_ring_buffer(&dev_priv->ring[VCS]); | ||
3980 | cleanup_render_ring: | ||
3981 | intel_cleanup_ring_buffer(&dev_priv->ring[RCS]); | ||
3982 | return ret; | ||
3983 | } | 3998 | } |
3984 | 3999 | ||
3985 | int i915_gem_init(struct drm_device *dev) | 4000 | int i915_gem_init(struct drm_device *dev) |