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 <[email protected]>
> Cc: Ville Syrjälä <[email protected]>
> Signed-off-by: Matt Roper <[email protected]>
> ---
> 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 <[email protected]>
_______________________________________________
Intel-gfx mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to