drm_dp_as_sdp_supported(&intel_dp->aux, intel_dp->dpcd);
 }
 
+static bool intel_dp_needs_dpcd_probe(struct intel_dp *intel_dp, bool force_on_external)
+{
+       struct intel_connector *connector = intel_dp->attached_connector;
+
+       if (intel_dp_is_edp(intel_dp))
+               return false;
+
+       if (force_on_external)
+               return true;
+
+       if (intel_dp->is_mst)
+               return false;
+
+       return drm_edid_has_quirk(&connector->base, DRM_EDID_QUIRK_DP_DPCD_PROBE);
+}
+
+void intel_dp_dpcd_set_probe(struct intel_dp *intel_dp, bool force_on_external)
+{
+       drm_dp_dpcd_set_probe(&intel_dp->aux,
+                             intel_dp_needs_dpcd_probe(intel_dp, force_on_external));
+}
+
 static int
 intel_dp_detect(struct drm_connector *_connector,
                struct drm_modeset_acquire_ctx *ctx,
        if (status != connector_status_connected && !intel_dp->is_mst)
                intel_dp_unset_edid(intel_dp);
 
+       intel_dp_dpcd_set_probe(intel_dp, false);
+
        if (!intel_dp_is_edp(intel_dp))
                drm_dp_set_subconnector_property(&connector->base,
                                                 status,
                return;
 
        intel_dp_set_edid(intel_dp);
+
+       intel_dp_dpcd_set_probe(intel_dp, false);
 }
 
 static int intel_dp_get_modes(struct drm_connector *_connector)
         * complete the DP tunnel BW request for the latter connector/encoder
         * waiting for this encoder's DPRX read, perform a dummy read here.
         */
-       if (long_hpd)
+       if (long_hpd) {
+               intel_dp_dpcd_set_probe(intel_dp, true);
+
                intel_dp_read_dprx_caps(intel_dp, dpcd);
 
-       if (long_hpd) {
                intel_dp->reset_link_params = true;
                intel_dp_invalidate_source_oui(intel_dp);
 
 
 #include "intel_display_core.h"
 #include "intel_display_rpm.h"
 #include "intel_display_types.h"
+#include "intel_dp.h"
 #include "intel_hdcp.h"
 #include "intel_hotplug.h"
 #include "intel_hotplug_irq.h"
  */
 void intel_hpd_poll_disable(struct intel_display *display)
 {
+       struct intel_encoder *encoder;
+
        if (!HAS_DISPLAY(display))
                return;
 
+       for_each_intel_dp(display->drm, encoder)
+               intel_dp_dpcd_set_probe(enc_to_intel_dp(encoder), true);
+
        WRITE_ONCE(display->hotplug.poll_enabled, false);
 
        spin_lock_irq(&display->irq.lock);