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
        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);
 
        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),