enum {
        LINK_RATE_REF_FREQ_IN_MHZ = 27,
-       PEAK_FACTOR_X1000 = 1006
+       PEAK_FACTOR_X1000 = 1006,
+       /*
+       * Some receivers fail to train on first try and are good
+       * on subsequent tries. 2 retries should be plenty. If we
+       * don't have a successful training then we don't expect to
+       * ever get one.
+       */
+       LINK_TRAINING_MAX_VERIFY_RETRY = 2
 };
 
 /*******************************************************************************
                                 */
 
                                /* deal with non-mst cases */
-                               dp_verify_link_cap(link, &link->reported_link_cap);
+                               for (i = 0; i < LINK_TRAINING_MAX_VERIFY_RETRY; i++) {
+                                       int fail_count = 0;
+
+                                       dp_verify_link_cap(link,
+                                                         &link->reported_link_cap,
+                                                         &fail_count);
+
+                                       if (fail_count == 0)
+                                               break;
+                               }
                        }
 
                        /* HDMI-DVI Dongle */
 
 
 bool dp_verify_link_cap(
        struct dc_link *link,
-       struct dc_link_settings *known_limit_link_setting)
+       struct dc_link_settings *known_limit_link_setting,
+       int *fail_count)
 {
        struct dc_link_settings max_link_cap = {0};
        struct dc_link_settings cur_link_setting = {0};
                                                        skip_video_pattern);
                        if (status == LINK_TRAINING_SUCCESS)
                                success = true;
+                       else
+                               (*fail_count)++;
                }
 
                if (success)