drm/i915: Extract mbus_ctl_join_update()
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Thu, 31 Oct 2024 15:56:44 +0000 (17:56 +0200)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Wed, 6 Nov 2024 14:41:42 +0000 (16:41 +0200)
We'll be wanting to reprogram the MBUS_CTL register during an
upcoming MBUS sanitation stage. Extract the reprogramming
into a helper that doesn't depend on the full atomic state
so that it can be reused.

We'll stick to sturct drm_i915_private for now (instead of
struct intel_display) since the rest of the skl wm code does the
same, and we might need to bakport this.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20241031155646.15165-5-ville.syrjala@linux.intel.com
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
drivers/gpu/drm/i915/display/skl_watermark.c

index 8a31508..2eefeff 100644 (file)
@@ -3427,22 +3427,13 @@ static enum pipe intel_mbus_joined_pipe(struct intel_atomic_state *state,
                return INVALID_PIPE;
 }
 
-static void intel_dbuf_mbus_join_update(struct intel_atomic_state *state,
-                                       enum pipe pipe)
+static void mbus_ctl_join_update(struct drm_i915_private *i915,
+                                const struct intel_dbuf_state *dbuf_state,
+                                enum pipe pipe)
 {
-       struct drm_i915_private *i915 = to_i915(state->base.dev);
-       const struct intel_dbuf_state *old_dbuf_state =
-               intel_atomic_get_old_dbuf_state(state);
-       const struct intel_dbuf_state *new_dbuf_state =
-               intel_atomic_get_new_dbuf_state(state);
        u32 mbus_ctl;
 
-       drm_dbg_kms(&i915->drm, "Changing mbus joined: %s -> %s (pipe: %c)\n",
-                   str_yes_no(old_dbuf_state->joined_mbus),
-                   str_yes_no(new_dbuf_state->joined_mbus),
-                   pipe != INVALID_PIPE ? pipe_name(pipe) : '*');
-
-       if (new_dbuf_state->joined_mbus)
+       if (dbuf_state->joined_mbus)
                mbus_ctl = MBUS_HASHING_MODE_1x4 | MBUS_JOIN;
        else
                mbus_ctl = MBUS_HASHING_MODE_2x2;
@@ -3457,6 +3448,23 @@ static void intel_dbuf_mbus_join_update(struct intel_atomic_state *state,
                     MBUS_JOIN_PIPE_SELECT_MASK, mbus_ctl);
 }
 
+static void intel_dbuf_mbus_join_update(struct intel_atomic_state *state,
+                                       enum pipe pipe)
+{
+       struct drm_i915_private *i915 = to_i915(state->base.dev);
+       const struct intel_dbuf_state *old_dbuf_state =
+               intel_atomic_get_old_dbuf_state(state);
+       const struct intel_dbuf_state *new_dbuf_state =
+               intel_atomic_get_new_dbuf_state(state);
+
+       drm_dbg_kms(&i915->drm, "Changing mbus joined: %s -> %s (pipe: %c)\n",
+                   str_yes_no(old_dbuf_state->joined_mbus),
+                   str_yes_no(new_dbuf_state->joined_mbus),
+                   pipe != INVALID_PIPE ? pipe_name(pipe) : '*');
+
+       mbus_ctl_join_update(i915, new_dbuf_state, pipe);
+}
+
 void intel_dbuf_mbus_pre_ddb_update(struct intel_atomic_state *state)
 {
        const struct intel_dbuf_state *new_dbuf_state =