On Fri, Oct 21, 2016 at 01:55:45PM -0200, Paulo Zanoni wrote: > Broadwell and newer actually compress up to 2560 lines instead of 2048 > (as documented in the FBC_CTL page). If we don't take this into > consideration we end up reserving too little stolen memory for the > CFB, so we may allocate something else (such as a ring) right after > what we reserved, and the hardware will overwrite it with the contents > of the CFB when FBC is active, causing GPU hangs. Another possibility > is that the CFB may be allocated at the very end of the available > space, so the CFB will overlap the reserved stolen area, leading to > FIFO underruns. > > This bug has always been a problem on BDW (the only affected platform > where FBC is enabled by default), but it's much easier to reproduce > since the following commit: > commit c58b735fc762e891481e92af7124b85cb0a51fce > Author: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> > Date: Thu Aug 18 17:16:57 2016 +0100 > drm/i915: Allocate rings from stolen > > Of course, you can only reproduce the bug if your screen is taller > than 2048 lines. > > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=98213 > Fixes: a98ee79317b4 ("drm/i915/fbc: enable FBC by default on HSW and BDW") > Cc: <stable@xxxxxxxxxxxxxxx> # v4.6+ > Signed-off-by: Paulo Zanoni <paulo.r.zanoni@xxxxxxxxx> Reviewed-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > --- > drivers/gpu/drm/i915/intel_fbc.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/i915/intel_fbc.c b/drivers/gpu/drm/i915/intel_fbc.c > index 617189a..6345cb8 100644 > --- a/drivers/gpu/drm/i915/intel_fbc.c > +++ b/drivers/gpu/drm/i915/intel_fbc.c > @@ -104,8 +104,10 @@ static int intel_fbc_calculate_cfb_size(struct drm_i915_private *dev_priv, > int lines; > > intel_fbc_get_plane_source_size(cache, NULL, &lines); > - if (INTEL_INFO(dev_priv)->gen >= 7) > + if (INTEL_GEN(dev_priv) == 7) > lines = min(lines, 2048); > + else if (INTEL_GEN(dev_priv) >= 8) > + lines = min(lines, 2560); > > /* Hardware needs the full buffer stride, not just the active area. */ > return lines * cache->fb.stride; > -- > 2.7.4 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Ville Syrjälä Intel OTC _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx