]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.4-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 28 Oct 2016 14:51:51 +0000 (10:51 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 28 Oct 2016 14:51:51 +0000 (10:51 -0400)
added patches:
revert-drm-i915-check-live-status-before-reading-edid.patch

queue-4.4/revert-drm-i915-check-live-status-before-reading-edid.patch [new file with mode: 0644]
queue-4.4/series

diff --git a/queue-4.4/revert-drm-i915-check-live-status-before-reading-edid.patch b/queue-4.4/revert-drm-i915-check-live-status-before-reading-edid.patch
new file mode 100644 (file)
index 0000000..5aab3bf
--- /dev/null
@@ -0,0 +1,134 @@
+From 23f889bdf6ee5cfff012d8b09f6bec920c691696 Mon Sep 17 00:00:00 2001
+From: David Weinehall <david.weinehall@linux.intel.com>
+Date: Wed, 17 Aug 2016 15:47:48 +0300
+Subject: Revert "drm/i915: Check live status before reading edid"
+
+From: David Weinehall <david.weinehall@linux.intel.com>
+
+commit 23f889bdf6ee5cfff012d8b09f6bec920c691696 upstream.
+
+This reverts commit 237ed86c693d8a8e4db476976aeb30df4deac74b.
+
+Our current implementation of live status check (repeat 9 times
+with 10ms delays between each attempt as a workaround for
+buggy displays) imposes a rather serious penalty, time wise,
+on intel_hdmi_detect().  Since we we already skip live status
+checks on platforms before gen 7, and since we seem to have
+coped quite well before the live status check was introduced
+for newer platforms too, the previous behaviour is probably
+preferable, at least unless someone can point to a use-case
+that the live status check improves (apart from "Bspec says so".)
+
+Signed-off-by: David Weinehall <david.weinehall@linux.intel.com>
+Fixes: 237ed86c693d ("drm/i915: Check live status before reading edid")
+Fixes: f8d03ea0053b ("drm/i915: increase the tries for HDMI hotplug live status checking")
+Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97139
+Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=94014
+Acked-by: Chris Wilson <chris@chris-wilson.co.uk>
+Signed-off-by: Jani Nikula <jani.nikula@intel.com>
+Link: http://patchwork.freedesktop.org/patch/msgid/20160817124748.31208-1-david.weinehall@linux.intel.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/i915/intel_dp.c   |    2 +-
+ drivers/gpu/drm/i915/intel_drv.h  |    2 --
+ drivers/gpu/drm/i915/intel_hdmi.c |   36 +++++++-----------------------------
+ 3 files changed, 8 insertions(+), 32 deletions(-)
+
+--- a/drivers/gpu/drm/i915/intel_dp.c
++++ b/drivers/gpu/drm/i915/intel_dp.c
+@@ -4648,7 +4648,7 @@ static bool bxt_digital_port_connected(s
+  *
+  * Return %true if @port is connected, %false otherwise.
+  */
+-bool intel_digital_port_connected(struct drm_i915_private *dev_priv,
++static bool intel_digital_port_connected(struct drm_i915_private *dev_priv,
+                                        struct intel_digital_port *port)
+ {
+       if (HAS_PCH_IBX(dev_priv))
+--- a/drivers/gpu/drm/i915/intel_drv.h
++++ b/drivers/gpu/drm/i915/intel_drv.h
+@@ -1231,8 +1231,6 @@ void intel_edp_drrs_disable(struct intel
+ void intel_edp_drrs_invalidate(struct drm_device *dev,
+               unsigned frontbuffer_bits);
+ void intel_edp_drrs_flush(struct drm_device *dev, unsigned frontbuffer_bits);
+-bool intel_digital_port_connected(struct drm_i915_private *dev_priv,
+-                                       struct intel_digital_port *port);
+ void hsw_dp_set_ddi_pll_sel(struct intel_crtc_state *pipe_config);
+ /* intel_dp_mst.c */
+--- a/drivers/gpu/drm/i915/intel_hdmi.c
++++ b/drivers/gpu/drm/i915/intel_hdmi.c
+@@ -1331,19 +1331,18 @@ intel_hdmi_unset_edid(struct drm_connect
+ }
+ static bool
+-intel_hdmi_set_edid(struct drm_connector *connector, bool force)
++intel_hdmi_set_edid(struct drm_connector *connector)
+ {
+       struct drm_i915_private *dev_priv = to_i915(connector->dev);
+       struct intel_hdmi *intel_hdmi = intel_attached_hdmi(connector);
+-      struct edid *edid = NULL;
++      struct edid *edid;
+       bool connected = false;
+       intel_display_power_get(dev_priv, POWER_DOMAIN_GMBUS);
+-      if (force)
+-              edid = drm_get_edid(connector,
+-                                  intel_gmbus_get_adapter(dev_priv,
+-                                  intel_hdmi->ddc_bus));
++      edid = drm_get_edid(connector,
++                          intel_gmbus_get_adapter(dev_priv,
++                          intel_hdmi->ddc_bus));
+       intel_display_power_put(dev_priv, POWER_DOMAIN_GMBUS);
+@@ -1371,37 +1370,16 @@ static enum drm_connector_status
+ intel_hdmi_detect(struct drm_connector *connector, bool force)
+ {
+       enum drm_connector_status status;
+-      struct intel_hdmi *intel_hdmi = intel_attached_hdmi(connector);
+       struct drm_i915_private *dev_priv = to_i915(connector->dev);
+-      bool live_status = false;
+-      unsigned int try;
+       DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n",
+                     connector->base.id, connector->name);
+       intel_display_power_get(dev_priv, POWER_DOMAIN_GMBUS);
+-      for (try = 0; !live_status && try < 9; try++) {
+-              if (try)
+-                      msleep(10);
+-              live_status = intel_digital_port_connected(dev_priv,
+-                              hdmi_to_dig_port(intel_hdmi));
+-      }
+-
+-      if (!live_status) {
+-              DRM_DEBUG_KMS("HDMI live status down\n");
+-              /*
+-               * Live status register is not reliable on all intel platforms.
+-               * So consider live_status only for certain platforms, for
+-               * others, read EDID to determine presence of sink.
+-               */
+-              if (INTEL_INFO(dev_priv)->gen < 7 || IS_IVYBRIDGE(dev_priv))
+-                      live_status = true;
+-      }
+-
+       intel_hdmi_unset_edid(connector);
+-      if (intel_hdmi_set_edid(connector, live_status)) {
++      if (intel_hdmi_set_edid(connector)) {
+               struct intel_hdmi *intel_hdmi = intel_attached_hdmi(connector);
+               hdmi_to_dig_port(intel_hdmi)->base.type = INTEL_OUTPUT_HDMI;
+@@ -1427,7 +1405,7 @@ intel_hdmi_force(struct drm_connector *c
+       if (connector->status != connector_status_connected)
+               return;
+-      intel_hdmi_set_edid(connector, true);
++      intel_hdmi_set_edid(connector);
+       hdmi_to_dig_port(intel_hdmi)->base.type = INTEL_OUTPUT_HDMI;
+ }
index 140f74802974faa377a677337e228d1ccf62cf61..117ec4d2f2dceac5135cf007e42b90c1360d6ad4 100644 (file)
@@ -11,3 +11,4 @@ drm-radeon-change-vblank_time-s-calculation-method-to-reduce-computational-error
 drm-vmwgfx-limit-the-user-space-command-buffer-size.patch
 xenbus-don-t-look-up-transaction-ids-for-ordinary-writes.patch
 drm-i915-gen9-fix-the-wawmmemoryreadlatency-implementation.patch
+revert-drm-i915-check-live-status-before-reading-edid.patch