]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/i915: Split wm sanitize from readout
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Thu, 6 Mar 2025 16:34:17 +0000 (18:34 +0200)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Fri, 7 Mar 2025 17:02:55 +0000 (19:02 +0200)
I'll need to move the wm readout to an earlier point in the
sequence (since the bw state readout will need ddb information
from the wm readout). But (at least for now) the wm sanitation
will need to stay put as it needs to also sanitize things for
any pipes/planes we disable later during the hw state takeover.

Reviewed-by: Vinod Govindapillai <vinod.govindapillai@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250306163420.3961-16-ville.syrjala@linux.intel.com
drivers/gpu/drm/i915/display/i9xx_wm.c
drivers/gpu/drm/i915/display/intel_display_core.h
drivers/gpu/drm/i915/display/intel_modeset_setup.c
drivers/gpu/drm/i915/display/intel_wm.c
drivers/gpu/drm/i915/display/intel_wm.h
drivers/gpu/drm/i915/display/skl_watermark.c

index 497850a6ac811e06406742e46afee53233ca15bc..7c80e37c1c5f7f5deaa627acd4952178740e1328 100644 (file)
@@ -3902,12 +3902,6 @@ static void g4x_wm_sanitize(struct drm_i915_private *dev_priv)
        mutex_unlock(&dev_priv->display.wm.wm_mutex);
 }
 
-static void g4x_wm_get_hw_state_and_sanitize(struct drm_i915_private *i915)
-{
-       g4x_wm_get_hw_state(i915);
-       g4x_wm_sanitize(i915);
-}
-
 static void vlv_wm_get_hw_state(struct drm_i915_private *dev_priv)
 {
        struct vlv_wm_values *wm = &dev_priv->display.wm.vlv;
@@ -4055,12 +4049,6 @@ static void vlv_wm_sanitize(struct drm_i915_private *dev_priv)
        mutex_unlock(&dev_priv->display.wm.wm_mutex);
 }
 
-static void vlv_wm_get_hw_state_and_sanitize(struct drm_i915_private *i915)
-{
-       vlv_wm_get_hw_state(i915);
-       vlv_wm_sanitize(i915);
-}
-
 /*
  * FIXME should probably kill this and improve
  * the real watermark readout/sanitation instead
@@ -4122,14 +4110,16 @@ static const struct intel_wm_funcs vlv_wm_funcs = {
        .initial_watermarks = vlv_initial_watermarks,
        .optimize_watermarks = vlv_optimize_watermarks,
        .atomic_update_watermarks = vlv_atomic_update_fifo,
-       .get_hw_state = vlv_wm_get_hw_state_and_sanitize,
+       .get_hw_state = vlv_wm_get_hw_state,
+       .sanitize = vlv_wm_sanitize,
 };
 
 static const struct intel_wm_funcs g4x_wm_funcs = {
        .compute_watermarks = g4x_compute_watermarks,
        .initial_watermarks = g4x_initial_watermarks,
        .optimize_watermarks = g4x_optimize_watermarks,
-       .get_hw_state = g4x_wm_get_hw_state_and_sanitize,
+       .get_hw_state = g4x_wm_get_hw_state,
+       .sanitize = g4x_wm_sanitize,
 };
 
 static const struct intel_wm_funcs pnv_wm_funcs = {
index 7360ad39b1cca651c091381ee46e6d96534da78e..eeb7ae3eaea878e8a73c09bd18dc87124d6d7044 100644 (file)
@@ -91,6 +91,7 @@ struct intel_wm_funcs {
                                    struct intel_crtc *crtc);
        int (*compute_global_watermarks)(struct intel_atomic_state *state);
        void (*get_hw_state)(struct drm_i915_private *i915);
+       void (*sanitize)(struct drm_i915_private *i915);
 };
 
 struct intel_audio_state {
index 70fad9f89cea1631f17116b26d750b6f7fb2bd4b..03c0facfad7a0ce3308476ee7d5c59e42f9ed344 100644 (file)
@@ -991,6 +991,7 @@ void intel_modeset_setup_hw_state(struct drm_i915_private *i915,
        intel_dpll_sanitize_state(display);
 
        intel_wm_get_hw_state(i915);
+       intel_wm_sanitize(i915);
 
        for_each_intel_crtc(&i915->drm, crtc) {
                struct intel_crtc_state *crtc_state =
index d7dc49aecd27a2eaa7814ec51f0cfc5e440cda24..f00f4cfc58e56b7478c205078f890ed64ccb7ae5 100644 (file)
@@ -108,6 +108,12 @@ void intel_wm_get_hw_state(struct drm_i915_private *i915)
                return i915->display.funcs.wm->get_hw_state(i915);
 }
 
+void intel_wm_sanitize(struct drm_i915_private *i915)
+{
+       if (i915->display.funcs.wm->sanitize)
+               return i915->display.funcs.wm->sanitize(i915);
+}
+
 bool intel_wm_plane_visible(const struct intel_crtc_state *crtc_state,
                            const struct intel_plane_state *plane_state)
 {
index e97cdca89a5c02e5cbc69e94c0c94decd1d2ae67..7d3a447054b30e779794835dea33963be9efb1c5 100644 (file)
@@ -25,6 +25,7 @@ void intel_optimize_watermarks(struct intel_atomic_state *state,
                               struct intel_crtc *crtc);
 int intel_compute_global_watermarks(struct intel_atomic_state *state);
 void intel_wm_get_hw_state(struct drm_i915_private *i915);
+void intel_wm_sanitize(struct drm_i915_private *i915);
 bool intel_wm_plane_visible(const struct intel_crtc_state *crtc_state,
                            const struct intel_plane_state *plane_state);
 void intel_print_wm_latency(struct drm_i915_private *i915,
index da7ffcfd9478d50eedb1b5b827afcd9c93843894..0bd7aa3b2877e19405479b5930616efa1bbfab3a 100644 (file)
@@ -3837,10 +3837,8 @@ static void skl_dbuf_sanitize(struct drm_i915_private *i915)
        }
 }
 
-static void skl_wm_get_hw_state_and_sanitize(struct drm_i915_private *i915)
+static void skl_wm_sanitize(struct drm_i915_private *i915)
 {
-       skl_wm_get_hw_state(i915);
-
        skl_mbus_sanitize(i915);
        skl_dbuf_sanitize(i915);
 }
@@ -4016,7 +4014,8 @@ void intel_wm_state_verify(struct intel_atomic_state *state,
 
 static const struct intel_wm_funcs skl_wm_funcs = {
        .compute_global_watermarks = skl_compute_wm,
-       .get_hw_state = skl_wm_get_hw_state_and_sanitize,
+       .get_hw_state = skl_wm_get_hw_state,
+       .sanitize = skl_wm_sanitize,
 };
 
 void skl_wm_init(struct drm_i915_private *i915)