aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/i915/i915_drv.c7
-rw-r--r--drivers/gpu/drm/i915/i915_drv.h2
-rw-r--r--drivers/gpu/drm/i915/i915_gem.c9
-rw-r--r--drivers/gpu/drm/i915/i915_gem_gtt.c3
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
78static void gen6_ppgtt_enable(struct drm_device *dev) 78static 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 */