[Intel-gfx] [PATCH 1/9] drm/i915: Disable primary plane if we fail to reconstruct BIOS fb
Maarten Lankhorst
maarten.lankhorst at linux.intel.com
Thu Dec 3 03:40:46 PST 2015
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 at ffwll.ch>
> Cc: Ville Syrjälä <ville.syrjala at intel.com>
> Signed-off-by: Matt Roper <matthew.d.roper at intel.com>
> ---
> 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 at linux.intel.com>
More information about the Intel-gfx
mailing list