diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
index ac6b89d01856518873317385e8e4392e60bb7623..1151e785c8b2a3caeb23feaf6013c678c4815213 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
@@ -863,14 +863,18 @@ void dm_handle_mst_sideband_msg_ready_event(
 		DRM_DEBUG_DRIVER("Loop exceeded max iterations\n");
 }
 
+#ifdef HAVE_DRM_DP_MST_TOPOLOGY_CBS_POLL_HPD_IRQ
 static void dm_handle_mst_down_rep_msg_ready(struct drm_dp_mst_topology_mgr *mgr)
 {
 	dm_handle_mst_sideband_msg_ready_event(mgr, DOWN_REP_MSG_RDY_EVENT);
 }
+#endif
 
 static const struct drm_dp_mst_topology_cbs dm_mst_cbs = {
 	.add_connector = dm_dp_add_mst_connector,
+#ifdef HAVE_DRM_DP_MST_TOPOLOGY_CBS_POLL_HPD_IRQ
 	.poll_hpd_irq = dm_handle_mst_down_rep_msg_ready,
+#endif
 #ifdef HAVE_DRM_DP_MST_TOPOLOGY_CBS_DESTROY_CONNECTOR
 	.destroy_connector = dm_dp_destroy_mst_connector,
 #endif
diff --git a/drivers/gpu/drm/amd/dkms/config/config.h b/drivers/gpu/drm/amd/dkms/config/config.h
index 300b02d3740d1d35ff6a24218af90a0b7cfd596b..56acef694a5b7941b1485aa5982444310ace97cb 100644
--- a/drivers/gpu/drm/amd/dkms/config/config.h
+++ b/drivers/gpu/drm/amd/dkms/config/config.h
@@ -332,6 +332,9 @@
 /* struct drm_dp_mst_topology_cbs has hotplug member */
 /* #undef HAVE_DRM_DP_MST_TOPOLOGY_CBS_HOTPLUG */
 
+/* struct drm_dp_mst_topology_cbs->poll_hpd_irq is available */
+#define HAVE_DRM_DP_MST_TOPOLOGY_CBS_POLL_HPD_IRQ 1
+
 /* struct drm_dp_mst_topology_cbs->register_connector is available */
 /* #undef HAVE_DRM_DP_MST_TOPOLOGY_CBS_REGISTER_CONNECTOR */
 
diff --git a/drivers/gpu/drm/amd/dkms/m4/drm-dp-mst-topology-cbs.m4 b/drivers/gpu/drm/amd/dkms/m4/drm-dp-mst-topology-cbs.m4
index 683d563cfc7bb36fe45fe72ef5fa7a714ebc219a..02dac4390e913624185186bd0b5049663b29f9e4 100644
--- a/drivers/gpu/drm/amd/dkms/m4/drm-dp-mst-topology-cbs.m4
+++ b/drivers/gpu/drm/amd/dkms/m4/drm-dp-mst-topology-cbs.m4
@@ -68,10 +68,33 @@ AC_DEFUN([AC_AMDGPU_DRM_DP_MST_TOPOLOGY_CBS_DESTROY_CONNECTOR], [
 	])
 ])
 
+dnl #
+dnl # commit v5.7-rc1-646-g471bdd0df0d5
+dnl # drm/i915/dp_mst: Work around out-of-spec adapters filtering short pulses
+dnl #
+AC_DEFUN([AC_AMDGPU_DRM_DP_MST_TOPOLOGY_CBS_POLL_HPD_IRQ], [
+	AC_KERNEL_TRY_COMPILE([
+		#if defined(HAVE_DRM_DISPLAY_DRM_DP_MST_HELPER_H)
+		#include <drm/display/drm_dp_mst_helper.h>
+		#elif defined(HAVE_DRM_DP_DRM_DP_MST_HELPER_H)
+		#include <drm/dp/drm_dp_mst_helper.h>
+		#else
+		#include <drm/drm_dp_mst_helper.h>
+		#endif
+	], [
+		struct drm_dp_mst_topology_cbs *dp_mst_cbs = NULL;
+		dp_mst_cbs->poll_hpd_irq(NULL);
+	], [
+		AC_DEFINE(HAVE_DRM_DP_MST_TOPOLOGY_CBS_POLL_HPD_IRQ, 1,
+			[struct drm_dp_mst_topology_cbs->poll_hpd_irq is available])
+	])
+])
+
 AC_DEFUN([AC_AMDGPU_DRM_DP_MST_TOPOLOGY_CBS], [
 	AC_KERNEL_DO_BACKGROUND([
 		AC_AMDGPU_DRM_DP_MST_TOPOLOGY_CBS_HOTPLUG
 		AC_AMDGPU_DRM_DP_MST_TOPOLOGY_CBS_REGISTER_CONNECTOR
 		AC_AMDGPU_DRM_DP_MST_TOPOLOGY_CBS_DESTROY_CONNECTOR
+		AC_AMDGPU_DRM_DP_MST_TOPOLOGY_CBS_POLL_HPD_IRQ
 	])
 ])