]> rtime.felk.cvut.cz Git - linux-imx.git/commitdiff
drm/i915: update FBC maximum fb sizes
authorPaulo Zanoni <paulo.r.zanoni@intel.com>
Tue, 4 Jun 2013 19:53:39 +0000 (16:53 -0300)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Thu, 6 Jun 2013 13:19:04 +0000 (15:19 +0200)
CTG/ILK/SNB/IVB support 4kx2k surfaces. HSW supports 4kx4k, but
without proper front buffer invalidation on the last 2k lines, so
don't enable FBC on these cases for now.

v2: Use gen >= 5, not gen > 4 (Daniel).

Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/intel_pm.c

index 50fe3d7303cbd41344a9e33e8d965b80268b5c45..1e1b48ec6c462e87b28930e94e5fd9f94368d353 100644 (file)
@@ -431,7 +431,7 @@ void intel_disable_fbc(struct drm_device *dev)
  *   - no pixel mulitply/line duplication
  *   - no alpha buffer discard
  *   - no dual wide
- *   - framebuffer <= 2048 in width, 1536 in height
+ *   - framebuffer <= max_hdisplay in width, max_vdisplay in height
  *
  * We can't assume that any compression will take place (worst case),
  * so the compressed buffer has to be the same size as the uncompressed
@@ -449,6 +449,7 @@ void intel_update_fbc(struct drm_device *dev)
        struct intel_framebuffer *intel_fb;
        struct drm_i915_gem_object *obj;
        int enable_fbc;
+       unsigned int max_hdisplay, max_vdisplay;
 
        if (!i915_powersave)
                return;
@@ -507,8 +508,16 @@ void intel_update_fbc(struct drm_device *dev)
                dev_priv->no_fbc_reason = FBC_UNSUPPORTED_MODE;
                goto out_disable;
        }
-       if ((crtc->mode.hdisplay > 2048) ||
-           (crtc->mode.vdisplay > 1536)) {
+
+       if (IS_G4X(dev) || INTEL_INFO(dev)->gen >= 5) {
+               max_hdisplay = 4096;
+               max_vdisplay = 2048;
+       } else {
+               max_hdisplay = 2048;
+               max_vdisplay = 1536;
+       }
+       if ((crtc->mode.hdisplay > max_hdisplay) ||
+           (crtc->mode.vdisplay > max_vdisplay)) {
                DRM_DEBUG_KMS("mode too large for compression, disabling\n");
                dev_priv->no_fbc_reason = FBC_MODE_TOO_LARGE;
                goto out_disable;