From: Ville Syrjala <ville.syrjala@linux.intel.com>
To: intel-gfx@lists.freedesktop.org
Subject: [PATCH 1/3] drm/i915: Precompute disable_pipes bitmask in intel_commit_modeset_disables()
Date: Tue, 5 Mar 2024 10:47:28 +0200 [thread overview]
Message-ID: <20240305084730.19182-2-ville.syrjala@linux.intel.com> (raw)
In-Reply-To: <20240305084730.19182-1-ville.syrjala@linux.intel.com>
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Copy the pipe bitmask based approach skl_commit_modeset_enables()
into intel_commit_modeset_disables(). This avoids doing so many
duplicated checks in all the loops, and also let's us WARN at the
end if we screwed up somewhere and forgot to disable some pipe.
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
drivers/gpu/drm/i915/display/intel_display.c | 27 ++++++++++++--------
1 file 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 ab2f52d21bad..d1c947a310a3 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)
--
2.43.0
next prev parent reply other threads:[~2024-03-05 8:47 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-05 8:47 [PATCH 0/3] drm/i915: Make crtc disable more atomic Ville Syrjala
2024-03-05 8:47 ` Ville Syrjala [this message]
2024-03-05 8:47 ` [PATCH 2/3] drm/i915: Disable planes more atomically during modesets Ville Syrjala
2024-03-05 8:47 ` [PATCH 3/3] drm/i915: Simplify intel_old_crtc_state_disables() calling convention Ville Syrjala
2024-03-05 20:08 ` ✗ Fi.CI.BAT: failure for drm/i915: Make crtc disable more atomic Patchwork
2024-03-06 11:51 ` ✗ Fi.CI.BAT: failure for drm/i915: Make crtc disable more atomic (rev2) Patchwork
2024-03-07 3:26 ` ✓ Fi.CI.BAT: success for drm/i915: Make crtc disable more atomic (rev3) Patchwork
2024-03-07 17:11 ` ✗ Fi.CI.IGT: failure " Patchwork
2024-03-08 6:58 ` [PATCH 0/3] drm/i915: Make crtc disable more atomic Ville Syrjälä
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240305084730.19182-2-ville.syrjala@linux.intel.com \
--to=ville.syrjala@linux.intel.com \
--cc=intel-gfx@lists.freedesktop.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox