diff options
Diffstat (limited to 'drivers/gpu/drm/i915/i915_dma.c')
-rw-r--r-- | drivers/gpu/drm/i915/i915_dma.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c index bf7d601fc37d..851a2f8ed6e6 100644 --- a/drivers/gpu/drm/i915/i915_dma.c +++ b/drivers/gpu/drm/i915/i915_dma.c | |||
@@ -1358,17 +1358,29 @@ static void i915_setup_compression(struct drm_device *dev, int size) | |||
1358 | dev_priv->cfb_size = size; | 1358 | dev_priv->cfb_size = size; |
1359 | 1359 | ||
1360 | intel_disable_fbc(dev); | 1360 | intel_disable_fbc(dev); |
1361 | dev_priv->compressed_fb = compressed_fb; | ||
1362 | |||
1361 | if (IS_GM45(dev)) { | 1363 | if (IS_GM45(dev)) { |
1362 | I915_WRITE(DPFC_CB_BASE, compressed_fb->start); | 1364 | I915_WRITE(DPFC_CB_BASE, compressed_fb->start); |
1363 | } else { | 1365 | } else { |
1364 | I915_WRITE(FBC_CFB_BASE, cfb_base); | 1366 | I915_WRITE(FBC_CFB_BASE, cfb_base); |
1365 | I915_WRITE(FBC_LL_BASE, ll_base); | 1367 | I915_WRITE(FBC_LL_BASE, ll_base); |
1368 | dev_priv->compressed_llb = compressed_llb; | ||
1366 | } | 1369 | } |
1367 | 1370 | ||
1368 | DRM_DEBUG("FBC base 0x%08lx, ll base 0x%08lx, size %dM\n", cfb_base, | 1371 | DRM_DEBUG("FBC base 0x%08lx, ll base 0x%08lx, size %dM\n", cfb_base, |
1369 | ll_base, size >> 20); | 1372 | ll_base, size >> 20); |
1370 | } | 1373 | } |
1371 | 1374 | ||
1375 | static void i915_cleanup_compression(struct drm_device *dev) | ||
1376 | { | ||
1377 | struct drm_i915_private *dev_priv = dev->dev_private; | ||
1378 | |||
1379 | drm_mm_put_block(dev_priv->compressed_fb); | ||
1380 | if (!IS_GM45(dev)) | ||
1381 | drm_mm_put_block(dev_priv->compressed_llb); | ||
1382 | } | ||
1383 | |||
1372 | /* true = enable decode, false = disable decoder */ | 1384 | /* true = enable decode, false = disable decoder */ |
1373 | static unsigned int i915_vga_set_decode(void *cookie, bool state) | 1385 | static unsigned int i915_vga_set_decode(void *cookie, bool state) |
1374 | { | 1386 | { |
@@ -1788,6 +1800,8 @@ int i915_driver_unload(struct drm_device *dev) | |||
1788 | mutex_lock(&dev->struct_mutex); | 1800 | mutex_lock(&dev->struct_mutex); |
1789 | i915_gem_cleanup_ringbuffer(dev); | 1801 | i915_gem_cleanup_ringbuffer(dev); |
1790 | mutex_unlock(&dev->struct_mutex); | 1802 | mutex_unlock(&dev->struct_mutex); |
1803 | if (I915_HAS_FBC(dev) && i915_powersave) | ||
1804 | i915_cleanup_compression(dev); | ||
1791 | drm_mm_takedown(&dev_priv->vram); | 1805 | drm_mm_takedown(&dev_priv->vram); |
1792 | i915_gem_lastclose(dev); | 1806 | i915_gem_lastclose(dev); |
1793 | 1807 | ||