intel_enable_crtc(state, crtc);
                intel_pre_update_crtc(state, crtc);
+       }
+
+       for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) {
+               if (!new_crtc_state->hw.active)
+                       continue;
+
                intel_update_crtc(state, crtc);
        }
 }
         * So first lets enable all pipes that do not need a fullmodeset as
         * those don't have any external dependency.
         */
+       for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) {
+               enum pipe pipe = crtc->pipe;
+
+               if ((update_pipes & BIT(pipe)) == 0)
+                       continue;
+
+               intel_pre_update_crtc(state, crtc);
+       }
+
        while (update_pipes) {
                for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state,
                                                    new_crtc_state, i) {
                        entries[pipe] = new_crtc_state->wm.skl.ddb;
                        update_pipes &= ~BIT(pipe);
 
-                       intel_pre_update_crtc(state, crtc);
                        intel_update_crtc(state, crtc);
 
                        /*
        /*
         * Finally we do the plane updates/etc. for all pipes that got enabled.
         */
+       for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) {
+               enum pipe pipe = crtc->pipe;
+
+               if ((update_pipes & BIT(pipe)) == 0)
+                       continue;
+
+               intel_pre_update_crtc(state, crtc);
+       }
+
        for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) {
                enum pipe pipe = crtc->pipe;
 
                entries[pipe] = new_crtc_state->wm.skl.ddb;
                update_pipes &= ~BIT(pipe);
 
-               intel_pre_update_crtc(state, crtc);
                intel_update_crtc(state, crtc);
        }