goto fail;
                }
 
+               /*
+                * TODO: Check VSDB bits to decide whether this should
+                * be enabled or not.
+                */
+               new_stream->triggered_crtc_reset.enabled =
+                       dm->force_timing_sync;
+
                dm_new_crtc_state->abm_level = dm_new_conn_state->abm_level;
 
                ret = fill_hdr_info_packet(drm_new_conn_state,
 
        return dc_link_set_psr_allow_active(stream->link, false, true);
 }
+
+void amdgpu_dm_trigger_timing_sync(struct drm_device *dev)
+{
+       struct amdgpu_device *adev = dev->dev_private;
+       struct dc *dc = adev->dm.dc;
+       int i;
+
+       mutex_lock(&adev->dm.dc_lock);
+       if (dc->current_state) {
+               for (i = 0; i < dc->current_state->stream_count; ++i)
+                       dc->current_state->streams[i]
+                               ->triggered_crtc_reset.enabled =
+                               adev->dm.force_timing_sync;
+
+               dm_enable_per_frame_crtc_master_sync(dc->current_state);
+               dc_trigger_sync(dc, dc->current_state);
+       }
+       mutex_unlock(&adev->dm.dc_lock);
+}
 
         * fake encoders used for DP MST.
         */
        struct amdgpu_encoder mst_encoders[AMDGPU_DM_MAX_CRTC];
+        bool force_timing_sync;
 };
 
 struct dsc_preferred_settings {
 void amdgpu_dm_update_freesync_caps(struct drm_connector *connector,
                                        struct edid *edid);
 
+void amdgpu_dm_trigger_timing_sync(struct drm_device *dev);
+
 #define MAX_COLOR_LUT_ENTRIES 4096
 /* Legacy gamm LUT users such as X doesn't like large LUT sizes */
 #define MAX_COLOR_LEGACY_LUT_ENTRIES 256
 
        {"amdgpu_mst_topology", &mst_topo},
 };
 
+/*
+ * Sets the force_timing_sync debug optino from the given string.
+ * All connected displays will be force synchronized immediately.
+ * Usage: echo 1 > /sys/kernel/debug/dri/0/amdgpu_dm_force_timing_sync
+ */
+static int force_timing_sync_set(void *data, u64 val)
+{
+       struct amdgpu_device *adev = data;
+
+       adev->dm.force_timing_sync = (bool)val;
+
+       amdgpu_dm_trigger_timing_sync(adev->ddev);
+
+       return 0;
+}
+
+/*
+ * Gets the force_timing_sync debug option value into the given buffer.
+ * Usage: cat /sys/kernel/debug/dri/0/amdgpu_dm_force_timing_sync
+ */
+static int force_timing_sync_get(void *data, u64 *val)
+{
+       struct amdgpu_device *adev = data;
+
+       *val = adev->dm.force_timing_sync;
+
+       return 0;
+}
+
+DEFINE_DEBUGFS_ATTRIBUTE(force_timing_sync_ops, force_timing_sync_get,
+                        force_timing_sync_set, "%llu\n");
+
 /*
  * Sets the DC visual confirm debug option from the given string.
  * Example usage: echo 1 > /sys/kernel/debug/dri/0/amdgpu_visual_confirm
        debugfs_create_file_unsafe("amdgpu_dm_dmub_fw_state", 0644, root,
                                   adev, &dmub_fw_state_fops);
 
+       debugfs_create_file_unsafe("amdgpu_dm_force_timing_sync", 0644, root,
+                                  adev, &force_timing_sync_ops);
+
        return 0;
 }
 
        return ret;
 }
 
+void dc_trigger_sync(struct dc *dc, struct dc_state *context)
+{
+       if (context->stream_count > 1 && !dc->debug.disable_timing_sync) {
+               enable_timing_multisync(dc, context);
+               program_timing_sync(dc, context);
+       }
+}
+
 /*
  * Applies given context to HW and copy it into current context.
  * It's up to the user to release the src context afterwards.
        if (result != DC_OK)
                return result;
 
-       if (context->stream_count > 1 && !dc->debug.disable_timing_sync) {
-               enable_timing_multisync(dc, context);
-               program_timing_sync(dc, context);
-       }
+       dc_trigger_sync(dc, context);
 
        /* Program all planes within new context*/
        if (dc->hwss.program_front_end_for_ctx) {
 
        struct dc_stream_state *streams[],
        uint8_t stream_count);
 
+/* Triggers multi-stream synchronization. */
+void dc_trigger_sync(struct dc *dc, struct dc_state *context);
 
 enum surface_update_type dc_check_update_surfaces_for_stream(
                struct dc *dc,