aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_ringbuffer.c
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2014-10-27 22:37:58 -0400
committerDave Airlie <airlied@redhat.com>2014-10-27 22:37:58 -0400
commitbbf0ef0334f2267687a92ec6d8114fd67b8157a3 (patch)
tree668abebfb74a9221b47e93518b679b2a4eec156f /drivers/gpu/drm/i915/intel_ringbuffer.c
parentcac7f2429872d3733dc3f9915857b1691da2eb2f (diff)
parentcacc6c837b799b058d59d2af02c11140640cc1d2 (diff)
Merge tag 'drm-intel-next-2014-10-03-no-ppgtt' of git://anongit.freedesktop.org/drm-intel into drm-next
Ok, new attempt, this time around with full ppgtt disabled again. drm-intel-next-2014-10-03: - first batch of skl stage 1 enabling - fixes from Rodrigo to the PSR, fbc and sink crc code - kerneldoc for the frontbuffer tracking code, runtime pm code and the basic interrupt enable/disable functions - smaller stuff all over drm-intel-next-2014-09-19: - bunch more i830M fixes from Ville - full ppgtt now again enabled by default - more ppgtt fixes from Michel Thierry and Chris Wilson - plane config work from Gustavo Padovan - spinlock clarifications - piles of smaller improvements all over, as usual * tag 'drm-intel-next-2014-10-03-no-ppgtt' of git://anongit.freedesktop.org/drm-intel: (114 commits) Revert "drm/i915: Enable full PPGTT on gen7" drm/i915: Update DRIVER_DATE to 20141003 drm/i915: Remove the duplicated logic between the two shrink phases drm/i915: kerneldoc for interrupt enable/disable functions drm/i915: Use dev_priv instead of dev in irq setup functions drm/i915: s/pm._irqs_disabled/pm.irqs_enabled/ drm/i915: Clear TX FIFO reset master override bits on chv drm/i915: Make sure hardware uses the correct swing margin/deemph bits on chv drm/i915: make sink_crc return -EIO on aux read/write failure drm/i915: Constify send buffer for intel_dp_aux_ch drm/i915: De-magic the PSR AUX message drm/i915: Reinstate error level message for non-simulated gpu hangs drm/i915: Kerneldoc for intel_runtime_pm.c drm/i915: Call runtime_pm_disable directly drm/i915: Move intel_display_set_init_power to intel_runtime_pm.c drm/i915: Bikeshed rpm functions name a bit. drm/i915: Extract intel_runtime_pm.c drm/i915: Remove intel_modeset_suspend_hw drm/i915: spelling fixes for frontbuffer tracking kerneldoc drm/i915: Tighting frontbuffer tracking around flips ...
Diffstat (limited to 'drivers/gpu/drm/i915/intel_ringbuffer.c')
-rw-r--r--drivers/gpu/drm/i915/intel_ringbuffer.c34
1 files changed, 20 insertions, 14 deletions
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
index 0a80e419b589..816a6926df28 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
@@ -729,8 +729,12 @@ static int bdw_init_workarounds(struct intel_engine_cs *ring)
729 * workaround for for a possible hang in the unlikely event a TLB 729 * workaround for for a possible hang in the unlikely event a TLB
730 * invalidation occurs during a PSD flush. 730 * invalidation occurs during a PSD flush.
731 */ 731 */
732 /* WaDisableFenceDestinationToSLM:bdw (GT3 pre-production) */
732 intel_ring_emit_wa(ring, HDC_CHICKEN0, 733 intel_ring_emit_wa(ring, HDC_CHICKEN0,
733 _MASKED_BIT_ENABLE(HDC_FORCE_NON_COHERENT)); 734 _MASKED_BIT_ENABLE(HDC_FORCE_NON_COHERENT |
735 (IS_BDW_GT3(dev) ?
736 HDC_FENCE_DEST_SLM_DISABLE : 0)
737 ));
734 738
735 /* Wa4x4STCOptimizationDisable:bdw */ 739 /* Wa4x4STCOptimizationDisable:bdw */
736 intel_ring_emit_wa(ring, CACHE_MODE_1, 740 intel_ring_emit_wa(ring, CACHE_MODE_1,
@@ -812,7 +816,7 @@ static int init_render_ring(struct intel_engine_cs *ring)
812 * 816 *
813 * WaDisableAsyncFlipPerfMode:snb,ivb,hsw,vlv,bdw,chv 817 * WaDisableAsyncFlipPerfMode:snb,ivb,hsw,vlv,bdw,chv
814 */ 818 */
815 if (INTEL_INFO(dev)->gen >= 6) 819 if (INTEL_INFO(dev)->gen >= 6 && INTEL_INFO(dev)->gen < 9)
816 I915_WRITE(MI_MODE, _MASKED_BIT_ENABLE(ASYNC_FLIP_PERF_DISABLE)); 820 I915_WRITE(MI_MODE, _MASKED_BIT_ENABLE(ASYNC_FLIP_PERF_DISABLE));
817 821
818 /* Required for the hardware to program scanline values for waiting */ 822 /* Required for the hardware to program scanline values for waiting */
@@ -1186,7 +1190,7 @@ gen5_ring_get_irq(struct intel_engine_cs *ring)
1186 struct drm_i915_private *dev_priv = dev->dev_private; 1190 struct drm_i915_private *dev_priv = dev->dev_private;
1187 unsigned long flags; 1191 unsigned long flags;
1188 1192
1189 if (!dev->irq_enabled) 1193 if (WARN_ON(!intel_irqs_enabled(dev_priv)))
1190 return false; 1194 return false;
1191 1195
1192 spin_lock_irqsave(&dev_priv->irq_lock, flags); 1196 spin_lock_irqsave(&dev_priv->irq_lock, flags);
@@ -1217,7 +1221,7 @@ i9xx_ring_get_irq(struct intel_engine_cs *ring)
1217 struct drm_i915_private *dev_priv = dev->dev_private; 1221 struct drm_i915_private *dev_priv = dev->dev_private;
1218 unsigned long flags; 1222 unsigned long flags;
1219 1223
1220 if (!dev->irq_enabled) 1224 if (!intel_irqs_enabled(dev_priv))
1221 return false; 1225 return false;
1222 1226
1223 spin_lock_irqsave(&dev_priv->irq_lock, flags); 1227 spin_lock_irqsave(&dev_priv->irq_lock, flags);
@@ -1254,7 +1258,7 @@ i8xx_ring_get_irq(struct intel_engine_cs *ring)
1254 struct drm_i915_private *dev_priv = dev->dev_private; 1258 struct drm_i915_private *dev_priv = dev->dev_private;
1255 unsigned long flags; 1259 unsigned long flags;
1256 1260
1257 if (!dev->irq_enabled) 1261 if (!intel_irqs_enabled(dev_priv))
1258 return false; 1262 return false;
1259 1263
1260 spin_lock_irqsave(&dev_priv->irq_lock, flags); 1264 spin_lock_irqsave(&dev_priv->irq_lock, flags);
@@ -1388,8 +1392,8 @@ gen6_ring_get_irq(struct intel_engine_cs *ring)
1388 struct drm_i915_private *dev_priv = dev->dev_private; 1392 struct drm_i915_private *dev_priv = dev->dev_private;
1389 unsigned long flags; 1393 unsigned long flags;
1390 1394
1391 if (!dev->irq_enabled) 1395 if (WARN_ON(!intel_irqs_enabled(dev_priv)))
1392 return false; 1396 return false;
1393 1397
1394 spin_lock_irqsave(&dev_priv->irq_lock, flags); 1398 spin_lock_irqsave(&dev_priv->irq_lock, flags);
1395 if (ring->irq_refcount++ == 0) { 1399 if (ring->irq_refcount++ == 0) {
@@ -1431,7 +1435,7 @@ hsw_vebox_get_irq(struct intel_engine_cs *ring)
1431 struct drm_i915_private *dev_priv = dev->dev_private; 1435 struct drm_i915_private *dev_priv = dev->dev_private;
1432 unsigned long flags; 1436 unsigned long flags;
1433 1437
1434 if (!dev->irq_enabled) 1438 if (WARN_ON(!intel_irqs_enabled(dev_priv)))
1435 return false; 1439 return false;
1436 1440
1437 spin_lock_irqsave(&dev_priv->irq_lock, flags); 1441 spin_lock_irqsave(&dev_priv->irq_lock, flags);
@@ -1451,9 +1455,6 @@ hsw_vebox_put_irq(struct intel_engine_cs *ring)
1451 struct drm_i915_private *dev_priv = dev->dev_private; 1455 struct drm_i915_private *dev_priv = dev->dev_private;
1452 unsigned long flags; 1456 unsigned long flags;
1453 1457
1454 if (!dev->irq_enabled)
1455 return;
1456
1457 spin_lock_irqsave(&dev_priv->irq_lock, flags); 1458 spin_lock_irqsave(&dev_priv->irq_lock, flags);
1458 if (--ring->irq_refcount == 0) { 1459 if (--ring->irq_refcount == 0) {
1459 I915_WRITE_IMR(ring, ~0); 1460 I915_WRITE_IMR(ring, ~0);
@@ -1469,7 +1470,7 @@ gen8_ring_get_irq(struct intel_engine_cs *ring)
1469 struct drm_i915_private *dev_priv = dev->dev_private; 1470 struct drm_i915_private *dev_priv = dev->dev_private;
1470 unsigned long flags; 1471 unsigned long flags;
1471 1472
1472 if (!dev->irq_enabled) 1473 if (WARN_ON(!intel_irqs_enabled(dev_priv)))
1473 return false; 1474 return false;
1474 1475
1475 spin_lock_irqsave(&dev_priv->irq_lock, flags); 1476 spin_lock_irqsave(&dev_priv->irq_lock, flags);
@@ -2229,6 +2230,7 @@ static int gen6_ring_flush(struct intel_engine_cs *ring,
2229 u32 invalidate, u32 flush) 2230 u32 invalidate, u32 flush)
2230{ 2231{
2231 struct drm_device *dev = ring->dev; 2232 struct drm_device *dev = ring->dev;
2233 struct drm_i915_private *dev_priv = dev->dev_private;
2232 uint32_t cmd; 2234 uint32_t cmd;
2233 int ret; 2235 int ret;
2234 2236
@@ -2259,8 +2261,12 @@ static int gen6_ring_flush(struct intel_engine_cs *ring,
2259 } 2261 }
2260 intel_ring_advance(ring); 2262 intel_ring_advance(ring);
2261 2263
2262 if (IS_GEN7(dev) && !invalidate && flush) 2264 if (!invalidate && flush) {
2263 return gen7_ring_fbc_flush(ring, FBC_REND_CACHE_CLEAN); 2265 if (IS_GEN7(dev))
2266 return gen7_ring_fbc_flush(ring, FBC_REND_CACHE_CLEAN);
2267 else if (IS_BROADWELL(dev))
2268 dev_priv->fbc.need_sw_cache_clean = true;
2269 }
2264 2270
2265 return 0; 2271 return 0;
2266} 2272}