Op 25-11-15 om 17:48 schreef Matt Roper: > If we fail to reconstruct the BIOS fb (e.g., because the FB is too > large), we'll be left with plane state that indicates the primary plane > is visible yet has a NULL fb. This mismatch causes problems later on > (e.g., for the watermark code). Since we've failed to reconstruct the > BIOS FB, the best solution is to just disable the primary plane and > pretend the BIOS never had it enabled. > > Cc: Daniel Vetter <daniel@xxxxxxxx> > Cc: Ville Syrjälä <ville.syrjala@xxxxxxxxx> > Signed-off-by: Matt Roper <matthew.d.roper@xxxxxxxxx> > --- > With this patch, the rest of this series now runs without problems on Jani's > system where the regressions were originally reported. > > Chris pointed out that this might also fix some of the other bugzillas we have > on older platforms where there's a GPU hang on failed FB takeover. I don't > think I have any platforms that can reproduce those types of problems to > verify, but he listed candidate bugs as: > > https://bugs.freedesktop.org/show_bug.cgi?id=89319 > https://bugs.freedesktop.org/show_bug.cgi?id=87677 > https://bugs.freedesktop.org/show_bug.cgi?id=89146 > https://bugs.freedesktop.org/show_bug.cgi?id=91653 > > drivers/gpu/drm/i915/intel_display.c | 13 +++++++++++++ > 1 file changed, 13 insertions(+) > > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c > index 4b21d5e..d03a235 100644 > --- a/drivers/gpu/drm/i915/intel_display.c > +++ b/drivers/gpu/drm/i915/intel_display.c > @@ -2597,6 +2597,8 @@ intel_find_initial_plane_obj(struct intel_crtc *intel_crtc, > struct drm_i915_gem_object *obj; > struct drm_plane *primary = intel_crtc->base.primary; > struct drm_plane_state *plane_state = primary->state; > + struct drm_crtc_state *crtc_state = intel_crtc->base.state; > + struct intel_plane *intel_plane = to_intel_plane(primary); > struct drm_framebuffer *fb; > > if (!plane_config->fb) > @@ -2633,6 +2635,17 @@ intel_find_initial_plane_obj(struct intel_crtc *intel_crtc, > } > } > > + /* > + * We've failed to reconstruct the BIOS FB. Current display state > + * indicates that the primary plane is visible, but has a NULL FB, > + * which will lead to problems later if we don't fix it up. The > + * simplest solution is to just disable the primary plane now and > + * pretend the BIOS never had it enabled. > + */ > + to_intel_plane_state(plane_state)->visible = false; > + crtc_state->plane_mask &= ~(1 << drm_plane_index(primary)); > + intel_plane->disable_plane(primary, &intel_crtc->base); > I think this should be for -fixes, also can you add add a call to intel_pre_disable_primary ? If so, Reviewed-by: Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx> _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx