]> git.baikalelectronics.ru Git - kernel.git/commitdiff
Revert "drm/i915/display: Disable audio, DRRS and PSR before planes"
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Fri, 22 Oct 2021 10:32:57 +0000 (13:32 +0300)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Wed, 27 Oct 2021 10:59:23 +0000 (13:59 +0300)
Disabling planes in the middle of the modeset seuqnece does not make
sense since userspace can anyway disable planes before the modeset
even starts. So when the modeset seuqence starts the set of enabled
planes is entirely arbitrary. Trying to sprinkle the plane disabling
into the modeset sequence just means more randomness and potential
for hard to reproduce bugs.

So it makes most sense to just disable all planes first so that the
rest of the modeset sequence remains identical regardless of which
planes happen to be enabled by userspace at the time.

This reverts commit 84030adb9e27d202a66022488bf0349a8bd45213.

Cc: José Roberto de Souza <jose.souza@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20211022103304.24164-3-ville.syrjala@linux.intel.com
Reviewed-by: José Roberto de Souza <jose.souza@intel.com>
drivers/gpu/drm/i915/display/intel_ddi.c
drivers/gpu/drm/i915/display/intel_display.c
drivers/gpu/drm/i915/display/intel_display_types.h
drivers/gpu/drm/i915/display/intel_dp_mst.c

index ab52eab346fe900a677dad8092c81da2689a0a91..6c11992496f265d9b3f4a05e13cd23b5679c5be2 100644 (file)
@@ -3061,6 +3061,12 @@ static void intel_disable_ddi_dp(struct intel_atomic_state *state,
 
        intel_dp->link_trained = false;
 
+       if (old_crtc_state->has_audio)
+               intel_audio_codec_disable(encoder,
+                                         old_crtc_state, old_conn_state);
+
+       intel_drrs_disable(intel_dp, old_crtc_state);
+       intel_psr_disable(intel_dp, old_crtc_state);
        intel_edp_backlight_off(old_conn_state);
        /* Disable the decompression in DP Sink */
        intel_dp_sink_set_decompression_state(intel_dp, old_crtc_state,
@@ -3078,6 +3084,10 @@ static void intel_disable_ddi_hdmi(struct intel_atomic_state *state,
        struct drm_i915_private *i915 = to_i915(encoder->base.dev);
        struct drm_connector *connector = old_conn_state->connector;
 
+       if (old_crtc_state->has_audio)
+               intel_audio_codec_disable(encoder,
+                                         old_crtc_state, old_conn_state);
+
        if (!intel_hdmi_handle_sink_scrambling(encoder, connector,
                                               false, false))
                drm_dbg_kms(&i915->drm,
@@ -3085,25 +3095,6 @@ static void intel_disable_ddi_hdmi(struct intel_atomic_state *state,
                            connector->base.id, connector->name);
 }
 
-static void intel_pre_disable_ddi(struct intel_atomic_state *state,
-                                 struct intel_encoder *encoder,
-                                 const struct intel_crtc_state *old_crtc_state,
-                                 const struct drm_connector_state *old_conn_state)
-{
-       struct intel_dp *intel_dp;
-
-       if (old_crtc_state->has_audio)
-               intel_audio_codec_disable(encoder, old_crtc_state,
-                                         old_conn_state);
-
-       if (intel_crtc_has_type(old_crtc_state, INTEL_OUTPUT_HDMI))
-               return;
-
-       intel_dp = enc_to_intel_dp(encoder);
-       intel_drrs_disable(intel_dp, old_crtc_state);
-       intel_psr_disable(intel_dp, old_crtc_state);
-}
-
 static void intel_disable_ddi(struct intel_atomic_state *state,
                              struct intel_encoder *encoder,
                              const struct intel_crtc_state *old_crtc_state,
@@ -4437,7 +4428,6 @@ void intel_ddi_init(struct drm_i915_private *dev_priv, enum port port)
        encoder->enable = intel_enable_ddi;
        encoder->pre_pll_enable = intel_ddi_pre_pll_enable;
        encoder->pre_enable = intel_ddi_pre_enable;
-       encoder->pre_disable = intel_pre_disable_ddi;
        encoder->disable = intel_disable_ddi;
        encoder->post_disable = intel_ddi_post_disable;
        encoder->update_pipe = intel_ddi_update_pipe;
index 5201d6cdd5dbc785bfe9228cc91a5c5a79c32183..3d2a1cba78c15788a5b2e3f9aac3657c191e22b0 100644 (file)
@@ -1693,28 +1693,6 @@ static void intel_encoders_enable(struct intel_atomic_state *state,
        }
 }
 
-static void intel_encoders_pre_disable(struct intel_atomic_state *state,
-                                      struct intel_crtc *crtc)
-{
-       const struct intel_crtc_state *old_crtc_state =
-               intel_atomic_get_old_crtc_state(state, crtc);
-       const struct drm_connector_state *old_conn_state;
-       struct drm_connector *conn;
-       int i;
-
-       for_each_old_connector_in_state(&state->base, conn, old_conn_state, i) {
-               struct intel_encoder *encoder =
-                       to_intel_encoder(old_conn_state->best_encoder);
-
-               if (old_conn_state->crtc != &crtc->base)
-                       continue;
-
-               if (encoder->pre_disable)
-                       encoder->pre_disable(state, encoder, old_crtc_state,
-                                            old_conn_state);
-       }
-}
-
 static void intel_encoders_disable(struct intel_atomic_state *state,
                                   struct intel_crtc *crtc)
 {
@@ -8273,8 +8251,6 @@ static void intel_old_crtc_state_disables(struct intel_atomic_state *state,
 
        drm_WARN_ON(&dev_priv->drm, old_crtc_state->bigjoiner_slave);
 
-       intel_encoders_pre_disable(state, crtc);
-
        intel_crtc_disable_planes(state, crtc);
 
        /*
index 85cb55034bb028af5965b82e9a36f2a905b039a1..3568d33be096b09c7f3a7324f3a08e897a974a68 100644 (file)
@@ -194,10 +194,6 @@ struct intel_encoder {
        void (*update_complete)(struct intel_atomic_state *,
                                struct intel_encoder *,
                                struct intel_crtc *);
-       void (*pre_disable)(struct intel_atomic_state *,
-                           struct intel_encoder *,
-                           const struct intel_crtc_state *,
-                           const struct drm_connector_state *);
        void (*disable)(struct intel_atomic_state *,
                        struct intel_encoder *,
                        const struct intel_crtc_state *,
index 16620172abf79625d11fd548a98c58d6fca65523..a3faea3201054ded487588cbdd02382eac918a16 100644 (file)
@@ -346,16 +346,6 @@ static void wait_for_act_sent(struct intel_encoder *encoder,
        drm_dp_check_act_status(&intel_dp->mst_mgr);
 }
 
-static void intel_mst_pre_disable_dp(struct intel_atomic_state *state,
-                                    struct intel_encoder *encoder,
-                                    const struct intel_crtc_state *old_crtc_state,
-                                    const struct drm_connector_state *old_conn_state)
-{
-       if (old_crtc_state->has_audio)
-               intel_audio_codec_disable(encoder, old_crtc_state,
-                                         old_conn_state);
-}
-
 static void intel_mst_disable_dp(struct intel_atomic_state *state,
                                 struct intel_encoder *encoder,
                                 const struct intel_crtc_state *old_crtc_state,
@@ -380,6 +370,9 @@ static void intel_mst_disable_dp(struct intel_atomic_state *state,
        if (ret) {
                drm_dbg_kms(&i915->drm, "failed to update payload %d\n", ret);
        }
+       if (old_crtc_state->has_audio)
+               intel_audio_codec_disable(encoder,
+                                         old_crtc_state, old_conn_state);
 }
 
 static void intel_mst_post_disable_dp(struct intel_atomic_state *state,
@@ -914,7 +907,6 @@ intel_dp_create_fake_mst_encoder(struct intel_digital_port *dig_port, enum pipe
 
        intel_encoder->compute_config = intel_dp_mst_compute_config;
        intel_encoder->compute_config_late = intel_dp_mst_compute_config_late;
-       intel_encoder->pre_disable = intel_mst_pre_disable_dp;
        intel_encoder->disable = intel_mst_disable_dp;
        intel_encoder->post_disable = intel_mst_post_disable_dp;
        intel_encoder->update_pipe = intel_ddi_update_pipe;