drm/i915: Don't update staged config during force restore modesets
authorAnder Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
Tue, 16 Jun 2015 08:49:44 +0000 (11:49 +0300)
committerJani Nikula <jani.nikula@intel.com>
Wed, 17 Jun 2015 11:20:54 +0000 (14:20 +0300)
The force restore path relies on the staged config to preserve the
configuration used before a suspend/resume cycle. The update done to it
in intel_modeset_fixup_state() would cause that information to be lost
after the first modeset, making it impossible to restore the modes for
pipes B and C.

References: https://bugs.freedesktop.org/show_bug.cgi?id=90468
Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
Reviewed-by: Matt Roper <matthew.d.roper@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
drivers/gpu/drm/i915/intel_display.c

index bcf1041b5a1a75cd5f1b79d290822c1a2ab46a70..ff7175b6a013cb81b33e04005e3a533e9ac49687 100644 (file)
@@ -11386,10 +11386,6 @@ static void intel_modeset_fixup_state(struct drm_atomic_state *state)
                crtc->base.enabled = crtc->base.state->enable;
                crtc->config = to_intel_crtc_state(crtc->base.state);
        }
-
-       /* Copy the new configuration to the staged state, to keep the few
-        * pieces of code that haven't been converted yet happy */
-       intel_modeset_update_staged_output_state(state->dev);
 }
 
 static void
@@ -12654,8 +12650,10 @@ static int intel_set_mode_with_config(struct drm_crtc *crtc,
 
        ret = __intel_set_mode(crtc, pipe_config);
 
-       if (ret == 0 && force_restore)
+       if (ret == 0 && force_restore) {
+               intel_modeset_update_staged_output_state(crtc->dev);
                intel_modeset_check_state(crtc->dev);
+       }
 
        return ret;
 }