drm/i915: Disable planes more atomically during modesets
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Tue, 5 Mar 2024 08:47:29 +0000 (10:47 +0200)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Fri, 8 Mar 2024 06:53:17 +0000 (08:53 +0200)
Follow in the footsteps of commit c610e841f19d ("drm/i915:
Do plane/etc. updates more atomically across pipes") and
do the plane disables back to back for all pipes also when
we are disabling pipes.

This should provide for a potentially more atomic user
experience, which might be especially nice when using
joiner or tiled displays.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240305084730.19182-3-ville.syrjala@linux.intel.com
Reviewed-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
drivers/gpu/drm/i915/display/intel_display.c

index 49d920f86106d171a8721e84e4aeecff642ea361..be882ffc1be6c2da6d980996ec932883f2c372ba 100644 (file)
@@ -6788,11 +6788,16 @@ static void intel_commit_modeset_disables(struct intel_atomic_state *state)
                if (!old_crtc_state->hw.active)
                        continue;
 
-               intel_crtc_disable_planes(state, crtc);
-
                disable_pipes |= BIT(crtc->pipe);
        }
 
+       for_each_old_intel_crtc_in_state(state, crtc, old_crtc_state, i) {
+               if ((disable_pipes & BIT(crtc->pipe)) == 0)
+                       continue;
+
+               intel_crtc_disable_planes(state, crtc);
+       }
+
        /* Only disable port sync and MST slaves */
        for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state,
                                            new_crtc_state, i) {