OSDN Git Service

drm/i915/fbc: Require linear fb stride to be multiple of 512 bytes on gen9/glk
[tomoyo/tomoyo-test1.git] / drivers / gpu / drm / i915 / display / intel_fbc.c
index c6afa10..7194f9b 100644 (file)
@@ -564,7 +564,7 @@ void intel_fbc_cleanup_cfb(struct drm_i915_private *dev_priv)
 }
 
 static bool stride_is_valid(struct drm_i915_private *dev_priv,
-                           unsigned int stride)
+                           u64 modifier, unsigned int stride)
 {
        /* This should have been caught earlier. */
        if (drm_WARN_ON_ONCE(&dev_priv->drm, (stride & (64 - 1)) != 0))
@@ -580,6 +580,11 @@ static bool stride_is_valid(struct drm_i915_private *dev_priv,
        if (IS_GEN(dev_priv, 4) && !IS_G4X(dev_priv) && stride < 2048)
                return false;
 
+       /* Display WA #1105: skl,bxt,kbl,cfl,glk */
+       if (IS_GEN(dev_priv, 9) &&
+           modifier == DRM_FORMAT_MOD_LINEAR && stride & 511)
+               return false;
+
        if (stride > 16384)
                return false;
 
@@ -810,7 +815,7 @@ static bool intel_fbc_can_activate(struct intel_crtc *crtc)
                return false;
        }
 
-       if (!stride_is_valid(dev_priv, cache->fb.stride)) {
+       if (!stride_is_valid(dev_priv, cache->fb.modifier, cache->fb.stride)) {
                fbc->no_fbc_reason = "framebuffer stride not supported";
                return false;
        }