-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Imre Deak <imre.deak@intel.com>
-Date: Mon, 28 Oct 2019 20:15:17 +0200
-Subject: [PATCH] drm/i915: Avoid HPD poll detect triggering a new detect cycle
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-For the HPD interrupt functionality the HW depends on power wells in the
-display core domain to be on. Accordingly when enabling these power
-wells the HPD polling logic will force an HPD detection cycle to account
-for hotplug events that may have happened when such a power well was
-off.
-
-Thus a detect cycle started by polling could start a new detect cycle if
-a power well in the display core domain gets enabled during detect and
-stays enabled after detect completes. That in turn can lead to a
-detection cycle runaway.
-
-To prevent re-triggering a poll-detect cycle make sure we drop all power
-references we acquired during detect synchronously by the end of detect.
-This will let the poll-detect logic continue with polling (matching the
-off state of the corresponding power wells) instead of scheduling a new
-detection cycle.
-
-Fixes: 6cfe7ec02e85 ("drm/i915: Remove the unneeded AUX power ref from intel_dp_detect()")
-Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=112125
-Reported-and-tested-by: Val Kulkov <val.kulkov@gmail.com>
-Reported-and-tested-by: wangqr <wqr.prg@gmail.com>
-Cc: Val Kulkov <val.kulkov@gmail.com>
-Cc: wangqr <wqr.prg@gmail.com>
-Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
-Signed-off-by: Imre Deak <imre.deak@intel.com>
-Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
-Link: https://patchwork.freedesktop.org/patch/msgid/20191028181517.22602-1-imre.deak@intel.com
-(cherry picked from commit a8ddac7c9f06a12227a4f5febd1cbe0575a33179)
-Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
----
- drivers/gpu/drm/i915/display/intel_crt.c | 7 +++++++
- drivers/gpu/drm/i915/display/intel_dp.c | 6 ++++++
- drivers/gpu/drm/i915/display/intel_hdmi.c | 6 ++++++
- 3 files changed, 19 insertions(+)
-
-diff --git a/drivers/gpu/drm/i915/display/intel_crt.c b/drivers/gpu/drm/i915/display/intel_crt.c
-index 3fcf2f84bcce..da1d6be46a0c 100644
---- a/drivers/gpu/drm/i915/display/intel_crt.c
-+++ b/drivers/gpu/drm/i915/display/intel_crt.c
-@@ -867,6 +867,13 @@ intel_crt_detect(struct drm_connector *connector,
-
- out:
- intel_display_power_put(dev_priv, intel_encoder->power_domain, wakeref);
-+
-+ /*
-+ * Make sure the refs for power wells enabled during detect are
-+ * dropped to avoid a new detect cycle triggered by HPD polling.
-+ */
-+ intel_display_power_flush_work(dev_priv);
-+
- return status;
- }
-
-diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
-index 305abddc274a..dbdd46ba9bfe 100644
---- a/drivers/gpu/drm/i915/display/intel_dp.c
-+++ b/drivers/gpu/drm/i915/display/intel_dp.c
-@@ -5649,6 +5649,12 @@ intel_dp_detect(struct drm_connector *connector,
- if (status != connector_status_connected && !intel_dp->is_mst)
- intel_dp_unset_edid(intel_dp);
-
-+ /*
-+ * Make sure the refs for power wells enabled during detect are
-+ * dropped to avoid a new detect cycle triggered by HPD polling.
-+ */
-+ intel_display_power_flush_work(dev_priv);
-+
- return status;
- }
-
-diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c
-index 7ffdfaae7188..5d5453461a6f 100644
---- a/drivers/gpu/drm/i915/display/intel_hdmi.c
-+++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
-@@ -2571,6 +2571,12 @@ intel_hdmi_detect(struct drm_connector *connector, bool force)
- if (status != connector_status_connected)
- cec_notifier_phys_addr_invalidate(intel_hdmi->cec_notifier);
-
-+ /*
-+ * Make sure the refs for power wells enabled during detect are
-+ * dropped to avoid a new detect cycle triggered by HPD polling.
-+ */
-+ intel_display_power_flush_work(dev_priv);
-+
- return status;
- }
-