On Fri, Jun 12, 2015 at 10:19:42AM +0300, Ander Conselvan de Oliveira wrote: > The code in intel_crtc_restore_mode() sets the enabled value of all the > CRTCs when restoring the mode after a suspend/resume cycle. When more > than one CRTC is enabled, that causes drm_atomic_helper_check_modeset() > to fail if there is more than one pipe enabled, since only one CRTC has > valid connector data. Instead, set only the enabled value for the CRTC > passed as an argument. > > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=90468 > References: https://bugs.freedesktop.org/show_bug.cgi?id=90396 > Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira@xxxxxxxxx> > --- > drivers/gpu/drm/i915/intel_display.c | 27 ++++++++++----------------- > 1 file changed, 10 insertions(+), 17 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c > index 49c6698..736e653 100644 > --- a/drivers/gpu/drm/i915/intel_display.c > +++ b/drivers/gpu/drm/i915/intel_display.c > @@ -12683,7 +12683,6 @@ void intel_crtc_restore_mode(struct drm_crtc *crtc) > { > struct drm_device *dev = crtc->dev; > struct drm_atomic_state *state; > - struct intel_crtc *intel_crtc; > struct intel_encoder *encoder; > struct intel_connector *connector; > struct drm_connector_state *connector_state; > @@ -12726,24 +12725,18 @@ void intel_crtc_restore_mode(struct drm_crtc *crtc) > } > } > > - for_each_intel_crtc(dev, intel_crtc) { > - if (intel_crtc->new_enabled == intel_crtc->base.enabled) > - continue; > - > - crtc_state = intel_atomic_get_crtc_state(state, intel_crtc); > - if (IS_ERR(crtc_state)) { > - DRM_DEBUG_KMS("Failed to add [CRTC:%d] to state: %ld\n", > - intel_crtc->base.base.id, > - PTR_ERR(crtc_state)); > - continue; > - } > + crtc_state = intel_atomic_get_crtc_state(state, to_intel_crtc(crtc)); > + if (IS_ERR(crtc_state)) { > + DRM_DEBUG_KMS("Failed to add [CRTC:%d] to state: %ld\n", > + crtc->base.id, PTR_ERR(crtc_state)); > + /* FIXME: leaking drm atomic state */ I'm not sure I understand why we need to leak here? Can't we just call drm_atomic_state_free() before returning? Aside from that, Reviewed-by: Matt Roper <matthew.d.roper@xxxxxxxxx> > + return; > + } > > - crtc_state->base.active = crtc_state->base.enable = > - intel_crtc->new_enabled; > + crtc_state->base.active = crtc_state->base.enable = > + to_intel_crtc(crtc)->new_enabled; > > - if (&intel_crtc->base == crtc) > - drm_mode_copy(&crtc_state->base.mode, &crtc->mode); > - } > + drm_mode_copy(&crtc_state->base.mode, &crtc->mode); > > intel_modeset_setup_plane_state(state, crtc, &crtc->mode, > crtc->primary->fb, crtc->x, crtc->y); > -- > 2.1.0 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@xxxxxxxxxxxxxxxxxxxxx > http://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Matt Roper Graphics Software Engineer IoTG Platform Enabling & Development Intel Corporation (916) 356-2795 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx