[Intel-gfx] [PATCH 3/3] drm/i915: Don't set enabled value of all CRTCs when restoring the mode
Matt Roper
matthew.d.roper at intel.com
Mon Jun 15 19:00:57 PDT 2015
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 at intel.com>
> ---
> 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 at intel.com>
> + 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 at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Matt Roper
Graphics Software Engineer
IoTG Platform Enabling & Development
Intel Corporation
(916) 356-2795
More information about the Intel-gfx
mailing list