On Wed, Apr 29, 2020 at 01:10:23PM +0300, Ville Syrjala wrote: > From: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > > Display WA #1105 says that FBC requires PLANE_STRIDE to be a multiple > of 512 bytes on gen9 and glk. > > This is definitely true for glk as certain tests (such as > igt/kms_big_fb/linear-16bpp-rotate-0) are now failing when the > display resolution results in a plane stride which is not a > multiple of 512 bytes. > > Curiously I was not able to reproduce this on a KBL. First I > suspected that our use of the FBC override stride explain this, > but after trying to use the override stride on glk the test > still failed. I did try both the old CHICKEN_MISC_4 way and > the new FBC_CHICKEN way, neither had any effect on the result. > > Anyways, we need this at least on glk. But let's trust the spec > and apply the w/a for all gen9 as well, despite being unable to > reproduce the problem. > > Cc: José Roberto de Souza <jose.souza@xxxxxxxxx> > Fixes: 691f7ba58d52 ("drm/i915/display/fbc: Make fences a nice-to-have for GEN9+") > Signed-off-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > --- > drivers/gpu/drm/i915/display/intel_fbc.c | 9 +++++++-- > 1 file changed, 7 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_fbc.c b/drivers/gpu/drm/i915/display/intel_fbc.c > index c6afa10e814c..7194f9bc62c5 100644 > --- a/drivers/gpu/drm/i915/display/intel_fbc.c > +++ b/drivers/gpu/drm/i915/display/intel_fbc.c > @@ -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) Might be slightly more readable to use !IS_ALIGNED(stride, 512), but either way, Reviewed-by: Matt Roper <matthew.d.roper@xxxxxxxxx> > + 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; > } > -- > 2.24.1 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Matt Roper Graphics Software Engineer VTT-OSGC Platform Enablement Intel Corporation (916) 356-2795 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx