static bool
 intel_dp_get_sink_irq_esi(struct intel_dp *intel_dp, u8 *esi)
 {
+       struct intel_display *display = to_intel_display(intel_dp);
+
+       /*
+        * Display WA for HSD #13013007775: mtl/arl/lnl
+        * Read the sink count and link service IRQ registers in separate
+        * transactions to prevent disconnecting the sink on a TBT link
+        * inadvertently.
+        */
+       if (IS_DISPLAY_VER(display, 14, 20) && !display->platform.battlemage) {
+               if (drm_dp_dpcd_read(&intel_dp->aux, DP_SINK_COUNT_ESI, esi, 3) != 3)
+                       return false;
+
+               /* DP_SINK_COUNT_ESI + 3 == DP_LINK_SERVICE_IRQ_VECTOR_ESI0 */
+               return drm_dp_dpcd_readb(&intel_dp->aux, DP_LINK_SERVICE_IRQ_VECTOR_ESI0,
+                                        &esi[3]) == 1;
+       }
+
        return drm_dp_dpcd_read(&intel_dp->aux, DP_SINK_COUNT_ESI, esi, 4) == 4;
 }