On Tue, 11 Aug 2015, Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx> wrote: > This should be much cleaner, with the same effects. > > (cherry picked from commit fb9d6cf8c29bfcb0b3c602f7ded87f128d730382) > Signed-off-by: Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx> > Reviewed-by: Matt Roper <matthew.d.roper@xxxxxxxxx> > Signed-off-by: Jani Nikula <jani.nikula@xxxxxxxxx> > Cc: stable@xxxxxxxxxxxxxxx #v4.2 I don't understand. v4.2 has not been released, and we can still queue fixes for the release. BR, Jani. > References: https://bugs.freedesktop.org/show_bug.cgi?id=90398 > --- > drivers/gpu/drm/i915/intel_display.c | 46 ++++++------------------------------ > 1 file changed, 7 insertions(+), 39 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c > index 30e0f54ba19d..c2579ded0c36 100644 > --- a/drivers/gpu/drm/i915/intel_display.c > +++ b/drivers/gpu/drm/i915/intel_display.c > @@ -12891,20 +12891,11 @@ intel_modeset_stage_output_state(struct drm_device *dev, > return 0; > } > > -static bool primary_plane_visible(struct drm_crtc *crtc) > -{ > - struct intel_plane_state *plane_state = > - to_intel_plane_state(crtc->primary->state); > - > - return plane_state->visible; > -} > - > static int intel_crtc_set_config(struct drm_mode_set *set) > { > struct drm_device *dev; > struct drm_atomic_state *state = NULL; > struct intel_crtc_state *pipe_config; > - bool primary_plane_was_visible; > int ret; > > BUG_ON(!set); > @@ -12943,38 +12934,8 @@ static int intel_crtc_set_config(struct drm_mode_set *set) > > intel_update_pipe_size(to_intel_crtc(set->crtc)); > > - primary_plane_was_visible = primary_plane_visible(set->crtc); > - > ret = intel_set_mode_with_config(set->crtc, pipe_config, true); > > - if (ret == 0 && > - pipe_config->base.enable && > - pipe_config->base.planes_changed && > - !needs_modeset(&pipe_config->base)) { > - struct intel_crtc *intel_crtc = to_intel_crtc(set->crtc); > - > - /* > - * We need to make sure the primary plane is re-enabled if it > - * has previously been turned off. > - */ > - if (ret == 0 && !primary_plane_was_visible && > - primary_plane_visible(set->crtc)) { > - WARN_ON(!intel_crtc->active); > - intel_post_enable_primary(set->crtc); > - } > - > - /* > - * In the fastboot case this may be our only check of the > - * state after boot. It would be better to only do it on > - * the first update, but we don't have a nice way of doing that > - * (and really, set_config isn't used much for high freq page > - * flipping, so increasing its cost here shouldn't be a big > - * deal). > - */ > - if (i915.fastboot && ret == 0) > - intel_modeset_check_state(set->crtc->dev); > - } > - > if (ret) { > DRM_DEBUG_KMS("failed to set mode on [CRTC:%d], err = %d\n", > set->crtc->base.id, ret); > @@ -13305,6 +13266,9 @@ intel_check_primary_plane(struct drm_plane *plane, > */ > if (IS_BROADWELL(dev)) > intel_crtc->atomic.wait_vblank = true; > + > + if (crtc_state && !needs_modeset(&crtc_state->base)) > + intel_crtc->atomic.post_enable_primary = true; > } > > /* > @@ -13317,6 +13281,10 @@ intel_check_primary_plane(struct drm_plane *plane, > if (!state->visible || !fb) > intel_crtc->atomic.disable_ips = true; > > + if (!state->visible && old_state->visible && > + crtc_state && !needs_modeset(&crtc_state->base)) > + intel_crtc->atomic.pre_disable_primary = true; > + > intel_crtc->atomic.fb_bits |= > INTEL_FRONTBUFFER_PRIMARY(intel_crtc->pipe); > > -- > 2.1.0 > -- Jani Nikula, Intel Open Source Technology Center _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx