The original commit 206645910b97
"drm/i915: check for audio and infoframe changes across mode sets v2"
added checking when has_audio and has_infoframe were changed.

It seems the original commit added both checks for the fastboot case.
By setting crtc_state->mode_changed the code will disable the crtc,
and re-enable it.

This doesn't work on boot, so there we just turn off the crtc.
Later on it should re-enable the crtc anyway, with the correct
settings.

Cc: Jesse Barnes <jbar...@virtuousgeek.org>
Cc: Ander Conselvan de Oliveira <ander.conselvan.de.olive...@intel.com>
Signed-off-by: Maarten Lankhorst <maarten.lankho...@linux.intel.com>
---
 drivers/gpu/drm/i915/intel_display.c | 40 ++++++++++++++----------------------
 1 file changed, 15 insertions(+), 25 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_display.c 
b/drivers/gpu/drm/i915/intel_display.c
index 4dc07602248b..0f75b1e206f6 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -11866,19 +11866,6 @@ encoder_retry:
        DRM_DEBUG_KMS("plane bpp: %i, pipe bpp: %i, dithering: %i\n",
                      base_bpp, pipe_config->pipe_bpp, pipe_config->dither);
 
-       /* Check if we need to force a modeset */
-       if (pipe_config->has_audio !=
-           to_intel_crtc_state(crtc->state)->has_audio) {
-               pipe_config->base.mode_changed = true;
-               ret = drm_atomic_add_affected_planes(state, crtc);
-       }
-
-       /*
-        * Note we have an issue here with infoframes: current code
-        * only updates them on the full mode set path per hw
-        * requirements.  So here we should be checking for any
-        * required changes and forcing a mode set.
-        */
 fail:
        return ret;
 }
@@ -12645,19 +12632,9 @@ intel_modeset_compute_config(struct drm_atomic_state 
*state)
                return ret;
 
        for_each_crtc_in_state(state, crtc, crtc_state, i) {
-               if (!crtc_state->enable &&
-                   WARN_ON(crtc_state->active))
-                       crtc_state->active = false;
-
-               if (!crtc_state->enable)
+               if (!needs_modeset(crtc_state) || !crtc_state->enable)
                        continue;
 
-               if (!needs_modeset(crtc_state)) {
-                       ret = drm_atomic_add_affected_connectors(state, crtc);
-                       if (ret)
-                               return ret;
-               }
-
                ret = intel_modeset_pipe_config(crtc,
                                        to_intel_crtc_state(crtc_state));
                if (ret)
@@ -15239,18 +15216,31 @@ void intel_modeset_setup_hw_state(struct drm_device 
*dev,
                crtc_state->mode_changed =
                crtc_state->planes_changed = false;
 
-               if (crtc->enabled) {
+               if (crtc->state->enable) {
                        intel_mode_from_pipe_config(&crtc->state->mode,
                                to_intel_crtc_state(crtc->state));
 
                        drm_mode_copy(&crtc->mode, &crtc->state->mode);
                        drm_mode_copy(&crtc->hwmode,
                                      &crtc->state->adjusted_mode);
+
+                       /* Check if we need to force a modeset */
+                       if (to_intel_crtc_state(crtc_state)->has_audio !=
+                           to_intel_crtc_state(crtc->state)->has_audio)
+                               crtc_state->mode_changed = true;
+
+                       if (to_intel_crtc_state(crtc_state)->has_infoframe !=
+                           to_intel_crtc_state(crtc->state)->has_infoframe)
+                               crtc_state->mode_changed = true;
                }
 
                intel_sanitize_crtc(intel_crtc, !force_restore ? NULL :
                                    to_intel_crtc_state(crtc_state));
 
+               /* turn CRTC off if a modeset is requested. */
+               if (crtc_state->mode_changed && !force_restore)
+                       intel_crtc_control(crtc, false, true);
+
                /*
                 * sanitize_crtc may have forced an update of crtc->state,
                 * so reload in intel_dump_pipe_config
-- 
2.1.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to