void intel_dp_start_link_train(struct intel_dp *intel_dp,
                               const struct intel_crtc_state *crtc_state)
 {
+       struct drm_i915_private *i915 = dp_to_i915(intel_dp);
+       struct intel_connector *connector = intel_dp->attached_connector;
+       struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base;
        bool passed;
+
        /*
         * TODO: Reiniting LTTPRs here won't be needed once proper connector
         * HW state readout is added.
        else
                passed = intel_dp_link_train_all_phys(intel_dp, crtc_state, lttpr_count);
 
+       /*
+        * Ignore the link failure in CI
+        *
+        * In fixed enviroments like CI, sometimes unexpected long HPDs are
+        * generated by the displays. If ignore_long_hpd flag is set, such long
+        * HPDs are ignored. And probably as a consequence of these ignored
+        * long HPDs, subsequent link trainings are failed resulting into CI
+        * execution failures.
+        *
+        * For test cases which rely on the link training or processing of HPDs
+        * ignore_long_hpd flag can unset from the testcase.
+        */
+       if (!passed && i915->display.hotplug.ignore_long_hpd) {
+               drm_dbg_kms(&i915->drm,
+                           "[CONNECTOR:%d:%s][ENCODER:%d:%s] Ignore the link failure\n",
+                           connector->base.base.id, connector->base.name,
+                           encoder->base.base.id, encoder->base.name);
+               return;
+       }
+
        if (!passed)
                intel_dp_schedule_fallback_link_training(intel_dp, crtc_state);
 }