aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVille Syrjälä <ville.syrjala@linux.intel.com>2013-04-09 06:02:47 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2013-04-18 03:43:21 -0400
commit42b5aeabe9286cdaabfc9b0ce5fa869bbe04dcd9 (patch)
treee4b999560b685a301ca250853fce17dd285e62e4
parent182642b09311c94898acbc01cc9bac8e02f63da6 (diff)
drm/i915: IVB/HSW have 32 fence register
Increase the number of fence registers to 32 on IVB/HSW. VLV however only has 16 fence registers according to the docs. Increasing the number of fences was attempted before [1], but there was some uncertainty about the maximum CPU fence number for FBC. Since then BSpec has been updated to state that there are in fact 32 fence registers, and the CPU fence number field in the SNB_DPFC_CTL_SA register is 5 bits, and the CPU fence number field in the ILK_DPFC_CONTROL register must be zero. So now it all makes sense. [1] http://lists.freedesktop.org/archives/intel-gfx/2011-October/012865.html v2: Include some background information based on the previous attempt Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r--drivers/gpu/drm/i915/i915_drv.h6
-rw-r--r--drivers/gpu/drm/i915/i915_gem.c4
-rw-r--r--drivers/gpu/drm/i915/i915_irq.c2
3 files changed, 7 insertions, 5 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index a4a8e608649f..b5a495a97ea7 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -195,9 +195,9 @@ struct drm_i915_master_private {
195 struct _drm_i915_sarea *sarea_priv; 195 struct _drm_i915_sarea *sarea_priv;
196}; 196};
197#define I915_FENCE_REG_NONE -1 197#define I915_FENCE_REG_NONE -1
198#define I915_MAX_NUM_FENCES 16 198#define I915_MAX_NUM_FENCES 32
199/* 16 fences + sign bit for FENCE_REG_NONE */ 199/* 32 fences + sign bit for FENCE_REG_NONE */
200#define I915_MAX_NUM_FENCE_BITS 5 200#define I915_MAX_NUM_FENCE_BITS 6
201 201
202struct drm_i915_fence_reg { 202struct drm_i915_fence_reg {
203 struct list_head lru_list; 203 struct list_head lru_list;
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index da6d6de0a8b9..6be940effefd 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -4190,7 +4190,9 @@ i915_gem_load(struct drm_device *dev)
4190 if (!drm_core_check_feature(dev, DRIVER_MODESET)) 4190 if (!drm_core_check_feature(dev, DRIVER_MODESET))
4191 dev_priv->fence_reg_start = 3; 4191 dev_priv->fence_reg_start = 3;
4192 4192
4193 if (INTEL_INFO(dev)->gen >= 4 || IS_I945G(dev) || IS_I945GM(dev) || IS_G33(dev)) 4193 if (INTEL_INFO(dev)->gen >= 7 && !IS_VALLEYVIEW(dev))
4194 dev_priv->num_fence_regs = 32;
4195 else if (INTEL_INFO(dev)->gen >= 4 || IS_I945G(dev) || IS_I945GM(dev) || IS_G33(dev))
4194 dev_priv->num_fence_regs = 16; 4196 dev_priv->num_fence_regs = 16;
4195 else 4197 else
4196 dev_priv->num_fence_regs = 8; 4198 dev_priv->num_fence_regs = 8;
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index b4e237d9927d..e97bbb2abd59 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -1213,7 +1213,7 @@ static void i915_gem_record_fences(struct drm_device *dev,
1213 switch (INTEL_INFO(dev)->gen) { 1213 switch (INTEL_INFO(dev)->gen) {
1214 case 7: 1214 case 7:
1215 case 6: 1215 case 6:
1216 for (i = 0; i < 16; i++) 1216 for (i = 0; i < dev_priv->num_fence_regs; i++)
1217 error->fence[i] = I915_READ64(FENCE_REG_SANDYBRIDGE_0 + (i * 8)); 1217 error->fence[i] = I915_READ64(FENCE_REG_SANDYBRIDGE_0 + (i * 8));
1218 break; 1218 break;
1219 case 5: 1219 case 5: