Split calling the CRTC/encoder disabling hooks and updating the CRTC and
DPLL object states from updating the CRTC and atomic state and other
global state (BW, CDCLK, DBUF) into separate functions. When disabling a
bigjoiner configuration the latter step can be done only after all the
linked pipes are disabled, so this change prepares for that.

No functional changes.

Cc: Ville Syrjälä <ville.syrj...@linux.intel.com>
Reviewed-by: Ville Syrjälä <ville.syrj...@linux.intel.com>
Signed-off-by: Imre Deak <imre.d...@intel.com>
---
 .../drm/i915/display/intel_modeset_setup.c    | 34 +++++++++++++------
 1 file changed, 24 insertions(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_modeset_setup.c 
b/drivers/gpu/drm/i915/display/intel_modeset_setup.c
index 66796e8eef90a..2c93f4c5dc8cf 100644
--- a/drivers/gpu/drm/i915/display/intel_modeset_setup.c
+++ b/drivers/gpu/drm/i915/display/intel_modeset_setup.c
@@ -30,23 +30,15 @@
 #include "intel_wm.h"
 #include "skl_watermark.h"
 
-static void intel_crtc_disable_noatomic(struct intel_crtc *crtc,
-                                       struct drm_modeset_acquire_ctx *ctx)
+static void intel_crtc_disable_noatomic_begin(struct intel_crtc *crtc,
+                                             struct drm_modeset_acquire_ctx 
*ctx)
 {
-       struct intel_encoder *encoder;
        struct drm_i915_private *i915 = to_i915(crtc->base.dev);
-       struct intel_bw_state *bw_state =
-               to_intel_bw_state(i915->display.bw.obj.state);
-       struct intel_cdclk_state *cdclk_state =
-               to_intel_cdclk_state(i915->display.cdclk.obj.state);
-       struct intel_dbuf_state *dbuf_state =
-               to_intel_dbuf_state(i915->display.dbuf.obj.state);
        struct intel_crtc_state *crtc_state =
                to_intel_crtc_state(crtc->base.state);
        struct intel_plane *plane;
        struct drm_atomic_state *state;
        struct intel_crtc_state *temp_crtc_state;
-       enum pipe pipe = crtc->pipe;
        int ret;
 
        if (!crtc_state->hw.active)
@@ -92,6 +84,21 @@ static void intel_crtc_disable_noatomic(struct intel_crtc 
*crtc,
                intel_unreference_shared_dpll_crtc(crtc,
                                                   crtc_state->shared_dpll,
                                                   
&crtc_state->shared_dpll->state);
+}
+
+static void intel_crtc_disable_noatomic_complete(struct intel_crtc *crtc)
+{
+       struct intel_encoder *encoder;
+       struct drm_i915_private *i915 = to_i915(crtc->base.dev);
+       struct intel_bw_state *bw_state =
+               to_intel_bw_state(i915->display.bw.obj.state);
+       struct intel_cdclk_state *cdclk_state =
+               to_intel_cdclk_state(i915->display.cdclk.obj.state);
+       struct intel_dbuf_state *dbuf_state =
+               to_intel_dbuf_state(i915->display.dbuf.obj.state);
+       struct intel_crtc_state *crtc_state =
+               to_intel_crtc_state(crtc->base.state);
+       enum pipe pipe = crtc->pipe;
 
        __drm_atomic_helper_crtc_destroy_state(&crtc_state->uapi);
        intel_crtc_free_hw_state(crtc_state);
@@ -115,6 +122,13 @@ static void intel_crtc_disable_noatomic(struct intel_crtc 
*crtc,
        bw_state->num_active_planes[pipe] = 0;
 }
 
+static void intel_crtc_disable_noatomic(struct intel_crtc *crtc,
+                                       struct drm_modeset_acquire_ctx *ctx)
+{
+       intel_crtc_disable_noatomic_begin(crtc, ctx);
+       intel_crtc_disable_noatomic_complete(crtc);
+}
+
 static void intel_modeset_update_connector_atomic_state(struct 
drm_i915_private *i915)
 {
        struct intel_connector *connector;
-- 
2.37.2

Reply via email to