aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBen Widawsky <benjamin.widawsky@intel.com>2013-04-08 21:43:56 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2013-04-18 03:43:16 -0400
commitb7c36d25461ae41e6562a2f70cb3423bcf8af2d2 (patch)
tree6b6a9bb0d909fb2ee7c90bdb79aa1b316ddc69ed
parent5963cf049a044f41be7dc90c83756fb245f038b4 (diff)
drm/i915: Allow PPGTT enable to fail
I'm really not happy that we have to support this, but this will be the simplest way to handle cases where PPGTT init can fail, which I promise will be coming in the future. v2: Resolve conflicts due to patch series reordering. Signed-off-by: Ben Widawsky <ben@bwidawsk.net> (v1) Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-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 */