diff options
-rw-r--r-- | drivers/gpu/drm/i915/i915_drv.c | 7 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/i915_drv.h | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/i915_gem.c | 9 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/i915_gem_gtt.c | 3 |
4 files changed, 15 insertions, 6 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c index 70d10de73bbd..bddb9a50ea76 100644 --- a/drivers/gpu/drm/i915/i915_drv.c +++ b/drivers/gpu/drm/i915/i915_drv.c | |||
@@ -927,8 +927,11 @@ int i915_reset(struct drm_device *dev) | |||
927 | ring->init(ring); | 927 | ring->init(ring); |
928 | 928 | ||
929 | i915_gem_context_init(dev); | 929 | i915_gem_context_init(dev); |
930 | if (dev_priv->mm.aliasing_ppgtt) | 930 | if (dev_priv->mm.aliasing_ppgtt) { |
931 | dev_priv->mm.aliasing_ppgtt->enable(dev); | 931 | ret = dev_priv->mm.aliasing_ppgtt->enable(dev); |
932 | if (ret) | ||
933 | i915_gem_cleanup_aliasing_ppgtt(dev); | ||
934 | } | ||
932 | 935 | ||
933 | /* | 936 | /* |
934 | * It would make sense to re-init all the other hw state, at | 937 | * It would make sense to re-init all the other hw state, at |
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index c1213213e495..f59a388a9e8c 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h | |||
@@ -449,7 +449,7 @@ struct i915_hw_ppgtt { | |||
449 | struct sg_table *st, | 449 | struct sg_table *st, |
450 | unsigned int pg_start, | 450 | unsigned int pg_start, |
451 | enum i915_cache_level cache_level); | 451 | enum i915_cache_level cache_level); |
452 | void (*enable)(struct drm_device *dev); | 452 | int (*enable)(struct drm_device *dev); |
453 | void (*cleanup)(struct i915_hw_ppgtt *ppgtt); | 453 | void (*cleanup)(struct i915_hw_ppgtt *ppgtt); |
454 | }; | 454 | }; |
455 | 455 | ||
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index 8a73a68a79ff..da6d6de0a8b9 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c | |||
@@ -4029,8 +4029,13 @@ i915_gem_init_hw(struct drm_device *dev) | |||
4029 | * contexts before PPGTT. | 4029 | * contexts before PPGTT. |
4030 | */ | 4030 | */ |
4031 | i915_gem_context_init(dev); | 4031 | i915_gem_context_init(dev); |
4032 | if (dev_priv->mm.aliasing_ppgtt) | 4032 | if (dev_priv->mm.aliasing_ppgtt) { |
4033 | dev_priv->mm.aliasing_ppgtt->enable(dev); | 4033 | ret = dev_priv->mm.aliasing_ppgtt->enable(dev); |
4034 | if (ret) { | ||
4035 | i915_gem_cleanup_aliasing_ppgtt(dev); | ||
4036 | DRM_INFO("PPGTT enable failed. This is not fatal, but unexpected\n"); | ||
4037 | } | ||
4038 | } | ||
4034 | 4039 | ||
4035 | return 0; | 4040 | return 0; |
4036 | } | 4041 | } |
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c index d32912e07bad..11143b4982fc 100644 --- a/drivers/gpu/drm/i915/i915_gem_gtt.c +++ b/drivers/gpu/drm/i915/i915_gem_gtt.c | |||
@@ -75,7 +75,7 @@ static inline gen6_gtt_pte_t gen6_pte_encode(struct drm_device *dev, | |||
75 | return pte; | 75 | return pte; |
76 | } | 76 | } |
77 | 77 | ||
78 | static void gen6_ppgtt_enable(struct drm_device *dev) | 78 | static int gen6_ppgtt_enable(struct drm_device *dev) |
79 | { | 79 | { |
80 | drm_i915_private_t *dev_priv = dev->dev_private; | 80 | drm_i915_private_t *dev_priv = dev->dev_private; |
81 | uint32_t pd_offset; | 81 | uint32_t pd_offset; |
@@ -128,6 +128,7 @@ static void gen6_ppgtt_enable(struct drm_device *dev) | |||
128 | I915_WRITE(RING_PP_DIR_DCLV(ring), PP_DIR_DCLV_2G); | 128 | I915_WRITE(RING_PP_DIR_DCLV(ring), PP_DIR_DCLV_2G); |
129 | I915_WRITE(RING_PP_DIR_BASE(ring), pd_offset); | 129 | I915_WRITE(RING_PP_DIR_BASE(ring), pd_offset); |
130 | } | 130 | } |
131 | return 0; | ||
131 | } | 132 | } |
132 | 133 | ||
133 | /* PPGTT support for Sandybdrige/Gen6 and later */ | 134 | /* PPGTT support for Sandybdrige/Gen6 and later */ |