diff options
| author | Ville Syrjälä <[email protected]> | 2024-03-05 10:47:28 +0200 |
|---|---|---|
| committer | Ville Syrjälä <[email protected]> | 2024-03-08 08:52:53 +0200 |
| commit | 5efb03ce90cc2fba3920de8fa0f04bed0476abeb (patch) | |
| tree | 471a82b1a8934167bdd82742dd77483335c97334 /drivers/gpu | |
| parent | f26b6af51d713227ff6fa40d013ea5bf426ec0e6 (diff) | |
drm/i915: Precompute disable_pipes bitmask in intel_commit_modeset_disables()
Copy the pipe bitmask based approach from skl_commit_modeset_enables()
into intel_commit_modeset_disables(). This avoids doing so many
duplicated checks in all the loops, and also let's WARN at the
end if we screwed up somewhere and forgot to disable some pipe.
Signed-off-by: Ville Syrjälä <[email protected]>
Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
Reviewed-by: Stanislav Lisovskiy <[email protected]>
Diffstat (limited to 'drivers/gpu')
| -rw-r--r-- | drivers/gpu/drm/i915/display/intel_display.c | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c index 153d9c79f554..49d920f86106 100644 --- a/drivers/gpu/drm/i915/display/intel_display.c +++ b/drivers/gpu/drm/i915/display/intel_display.c @@ -6768,9 +6768,10 @@ static void intel_old_crtc_state_disables(struct intel_atomic_state *state, static void intel_commit_modeset_disables(struct intel_atomic_state *state) { + struct drm_i915_private *i915 = to_i915(state->base.dev); struct intel_crtc_state *new_crtc_state, *old_crtc_state; struct intel_crtc *crtc; - u32 handled = 0; + u8 disable_pipes = 0; int i; for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state, @@ -6778,21 +6779,24 @@ static void intel_commit_modeset_disables(struct intel_atomic_state *state) if (!intel_crtc_needs_modeset(new_crtc_state)) continue; + /* + * Needs to be done even for pipes + * that weren't enabled previously. + */ intel_pre_plane_update(state, crtc); if (!old_crtc_state->hw.active) continue; intel_crtc_disable_planes(state, crtc); + + disable_pipes |= BIT(crtc->pipe); } /* Only disable port sync and MST slaves */ for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state, new_crtc_state, i) { - if (!intel_crtc_needs_modeset(new_crtc_state)) - continue; - - if (!old_crtc_state->hw.active) + if ((disable_pipes & BIT(crtc->pipe)) == 0) continue; /* In case of Transcoder port Sync master slave CRTCs can be @@ -6807,22 +6811,23 @@ static void intel_commit_modeset_disables(struct intel_atomic_state *state) intel_old_crtc_state_disables(state, old_crtc_state, new_crtc_state, crtc); - handled |= BIT(crtc->pipe); + + disable_pipes &= ~BIT(crtc->pipe); } /* Disable everything else left on */ for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state, new_crtc_state, i) { - if (!intel_crtc_needs_modeset(new_crtc_state) || - (handled & BIT(crtc->pipe))) - continue; - - if (!old_crtc_state->hw.active) + if ((disable_pipes & BIT(crtc->pipe)) == 0) continue; intel_old_crtc_state_disables(state, old_crtc_state, new_crtc_state, crtc); + + disable_pipes &= ~BIT(crtc->pipe); } + + drm_WARN_ON(&i915->drm, disable_pipes); } static void intel_commit_modeset_enables(struct intel_atomic_state *state) |