On Fri, Jan 13, 2017 at 11:54:10AM -0800, Matt Roper wrote: > When a plane is fully clipped (either because it's positioned offscreen, > or because the CRTC is currently off), the clipping calculations we do > during check_plane will leave nonsense/negative coordinates in plane's > source rectangle. This is generally harmless since we recognize that > the plane should be turned off and we don't try to actually do anything > with those values. However on gen9 platforms, we still try to do > surface offset math in skl_check_plane_surface() which gets confused and > reports "Unable to find suitable display surface offset." Given that > the plane will be disabled anyway, none of these calculations are > actually necessary, so just skip calling the function on non-visible > planes. > > Cc: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > Fixes: b63a16f6cd ("drm/i915: Compute display surface offset in the plane check hook for SKL+") > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=98258 > Testcase: igt/pm_rpm/legacy-planes > Testcase: igt/pm_rpm/universal-planes > Signed-off-by: Matt Roper <matthew.d.roper@xxxxxxxxx> > --- > There may be additional IGT tests (e.g., in kms_plane) that also trip over > this. I only listed the two that I was using for debugging when I tracked this > down. > > drivers/gpu/drm/i915/intel_display.c | 2 +- > drivers/gpu/drm/i915/intel_sprite.c | 2 +- > 2 files changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c > index 0a38de9..9295f8a 100644 > --- a/drivers/gpu/drm/i915/intel_display.c > +++ b/drivers/gpu/drm/i915/intel_display.c > @@ -15149,7 +15149,7 @@ intel_check_primary_plane(struct drm_plane *plane, > if (!state->base.fb) > return 0; > > - if (INTEL_GEN(dev_priv) >= 9) { > + if (INTEL_GEN(dev_priv) >= 9 && state->base.visible) { > ret = skl_check_plane_surface(state); > if (ret) > return ret; > diff --git a/drivers/gpu/drm/i915/intel_sprite.c b/drivers/gpu/drm/i915/intel_sprite.c > index ada8f7a..5cedea4 100644 > --- a/drivers/gpu/drm/i915/intel_sprite.c > +++ b/drivers/gpu/drm/i915/intel_sprite.c > @@ -967,7 +967,7 @@ intel_check_sprite_plane(struct drm_plane *plane, > dst->y1 = crtc_y; > dst->y2 = crtc_y + crtc_h; > > - if (INTEL_GEN(dev) >= 9) { > + if (INTEL_GEN(dev) >= 9 && state->base.visible) { > ret = skl_check_plane_surface(state); > if (ret) > return ret; So kinda like https://patchwork.freedesktop.org/patch/120204/ -- Ville Syrjälä Intel OTC _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx