diff options
-rw-r--r-- | drivers/gpu/drm/i915/i915_drv.c | 15 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/i915_drv.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/i915_reg.h | 1 |
3 files changed, 12 insertions, 5 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c index 6ed73ae2133a..d988cc350f66 100644 --- a/drivers/gpu/drm/i915/i915_drv.c +++ b/drivers/gpu/drm/i915/i915_drv.c | |||
@@ -348,12 +348,17 @@ void gen6_gt_force_wake_put(struct drm_i915_private *dev_priv) | |||
348 | 348 | ||
349 | void __gen6_gt_wait_for_fifo(struct drm_i915_private *dev_priv) | 349 | void __gen6_gt_wait_for_fifo(struct drm_i915_private *dev_priv) |
350 | { | 350 | { |
351 | int loop = 500; | 351 | if (dev_priv->gt_fifo_count < GT_FIFO_NUM_RESERVED_ENTRIES ) { |
352 | u32 fifo = I915_READ_NOTRACE(GT_FIFO_FREE_ENTRIES); | 352 | int loop = 500; |
353 | while (fifo < 20 && loop--) { | 353 | u32 fifo = I915_READ_NOTRACE(GT_FIFO_FREE_ENTRIES); |
354 | udelay(10); | 354 | while (fifo <= GT_FIFO_NUM_RESERVED_ENTRIES && loop--) { |
355 | fifo = I915_READ_NOTRACE(GT_FIFO_FREE_ENTRIES); | 355 | udelay(10); |
356 | fifo = I915_READ_NOTRACE(GT_FIFO_FREE_ENTRIES); | ||
357 | } | ||
358 | WARN_ON(loop < 0 && fifo <= GT_FIFO_NUM_RESERVED_ENTRIES); | ||
359 | dev_priv->gt_fifo_count = fifo; | ||
356 | } | 360 | } |
361 | dev_priv->gt_fifo_count--; | ||
357 | } | 362 | } |
358 | 363 | ||
359 | static int i915_drm_freeze(struct drm_device *dev) | 364 | static int i915_drm_freeze(struct drm_device *dev) |
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index 00dc59a51ccd..b37146c4526f 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h | |||
@@ -277,6 +277,7 @@ typedef struct drm_i915_private { | |||
277 | int relative_constants_mode; | 277 | int relative_constants_mode; |
278 | 278 | ||
279 | void __iomem *regs; | 279 | void __iomem *regs; |
280 | u32 gt_fifo_count; | ||
280 | 281 | ||
281 | struct intel_gmbus { | 282 | struct intel_gmbus { |
282 | struct i2c_adapter adapter; | 283 | struct i2c_adapter adapter; |
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h index 96fb0fa47c40..02db299f621a 100644 --- a/drivers/gpu/drm/i915/i915_reg.h +++ b/drivers/gpu/drm/i915/i915_reg.h | |||
@@ -3361,6 +3361,7 @@ | |||
3361 | #define FORCEWAKE_ACK 0x130090 | 3361 | #define FORCEWAKE_ACK 0x130090 |
3362 | 3362 | ||
3363 | #define GT_FIFO_FREE_ENTRIES 0x120008 | 3363 | #define GT_FIFO_FREE_ENTRIES 0x120008 |
3364 | #define GT_FIFO_NUM_RESERVED_ENTRIES 20 | ||
3364 | 3365 | ||
3365 | #define GEN6_RPNSWREQ 0xA008 | 3366 | #define GEN6_RPNSWREQ 0xA008 |
3366 | #define GEN6_TURBO_DISABLE (1<<31) | 3367 | #define GEN6_TURBO_DISABLE (1<<31) |