If the MST payload allocation failed, enabling the output also failed
most probably, so send a uevent accordinly requesting the user to retry
the modeset. While at it remove the driver specific debug message, there
is already one printed by drm_dp_add_payload_part1().

Signed-off-by: Imre Deak <[email protected]>
---
 drivers/gpu/drm/i915/display/intel_dp_mst.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c 
b/drivers/gpu/drm/i915/display/intel_dp_mst.c
index 27ce5c3f5951e..57f29906fa28f 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
@@ -1158,8 +1158,7 @@ static void intel_mst_pre_enable_dp(struct 
intel_atomic_state *state,
        ret = drm_dp_add_payload_part1(&intel_dp->mst_mgr, mst_state,
                                       
drm_atomic_get_mst_payload_state(mst_state, connector->port));
        if (ret < 0)
-               drm_dbg_kms(&dev_priv->drm, "Failed to create MST payload for 
%s: %d\n",
-                           connector->base.name, ret);
+               intel_dp_queue_modeset_retry_for_link(state, &dig_port->base, 
pipe_config);
 
        /*
         * Before Gen 12 this is not done as part of
@@ -1223,6 +1222,7 @@ static void intel_mst_enable_dp(struct intel_atomic_state 
*state,
        enum transcoder trans = pipe_config->cpu_transcoder;
        bool first_mst_stream = intel_dp->active_mst_links == 1;
        struct intel_crtc *pipe_crtc;
+       int ret;
 
        drm_WARN_ON(&dev_priv->drm, pipe_config->has_pch_encoder);
 
@@ -1254,8 +1254,11 @@ static void intel_mst_enable_dp(struct 
intel_atomic_state *state,
        if (first_mst_stream)
                intel_ddi_wait_for_fec_status(encoder, pipe_config, true);
 
-       drm_dp_add_payload_part2(&intel_dp->mst_mgr,
-                                drm_atomic_get_mst_payload_state(mst_state, 
connector->port));
+       ret = drm_dp_add_payload_part2(&intel_dp->mst_mgr,
+                                      
drm_atomic_get_mst_payload_state(mst_state,
+                                                                       
connector->port));
+       if (ret < 0)
+               intel_dp_queue_modeset_retry_for_link(state, &dig_port->base, 
pipe_config);
 
        if (DISPLAY_VER(dev_priv) >= 12)
                intel_de_rmw(dev_priv, hsw_chicken_trans_reg(dev_priv, trans),
-- 
2.44.2

Reply via email to