Skip to contentSkip to conversation

Patch "drm/i915/vlv: Reset the ADPA in vlv_display_power_well_init()" has been added to the 4.7-stable tree

PATCH [email protected] 1 participant 1 message Sep 5, 2016

Subsystems (3)
lore
Share & tools
lore

[email protected]

author maintainer Applied
#0 lore raw

This is a note to let you know that I've just added the patch titled

drm/i915/vlv: Reset the ADPA in vlv_display_power_well_init()

to the 4.7-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
drm-i915-vlv-reset-the-adpa-in-vlv_display_power_well_init.patch
and it can be found in the queue-4.7 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.

Quoted 1 line

From 4c732e6ee9e71903934d75b12a021eb3520b6197 Mon Sep 17 00:00:00 2001

From: Lyude <[email protected]>
Date: Tue, 21 Jun 2016 17:03:42 -0400
Subject: drm/i915/vlv: Reset the ADPA in vlv_display_power_well_init()
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

From: Lyude <[email protected]>

commit 4c732e6ee9e71903934d75b12a021eb3520b6197 upstream.

While VGA hotplugging worked(ish) before, it looks like that was mainly because we'd unintentionally enable it in valleyview_crt_detect_hotplug() when we did a force trigger. This doesn't work reliably enough because whenever the display powerwell on vlv gets disabled, the values set in VLV_ADPA get cleared and consequently VGA hotplugging gets disabled. This causes bugs such as one we found on an Intel NUC, where doing the following sequence of hotplugs:

- Disconnect all monitors
- Connect VGA
- Disconnect VGA
- Connect HDMI

Would result in VGA hotplugging becoming disabled, due to the powerwells getting toggled in the process of connecting HDMI.

Changes since v3:
- Expose intel_crt_reset() through intel_drv.h and call that in vlv_display_power_well_init() instead of encoder->base.funcs->reset(&encoder->base);

Changes since v2:
- Use intel_encoder structs instead of drm_encoder structs

Changes since v1:
- Instead of handling the register writes ourself, we just reuse intel_crt_detect()
- Instead of resetting the ADPA during display IRQ installation, we now reset them in vlv_display_power_well_init()

[danvet: Rebase over dev_priv/drm_device embedding.]
(cherry picked from commit 9504a89247595b6c066c68aea0c34af1fc78d021)
---
 drivers/gpu/drm/i915/intel_crt.c        |    2 +-
 drivers/gpu/drm/i915/intel_drv.h        |    2 +-
 drivers/gpu/drm/i915/intel_runtime_pm.c |    7 +++++++
 3 files changed, 9 insertions(+), 2 deletions(-)
drivers/gpu/drm/i915/intel_crt.c +1 -1
@@ -713,7 +713,7 @@ static int intel_crt_set_property(struct
 	return 0;
 }
 
-static void intel_crt_reset(struct drm_encoder *encoder)
+void intel_crt_reset(struct drm_encoder *encoder)
 {
 	struct drm_device *dev = encoder->dev;
 	struct drm_i915_private *dev_priv = dev->dev_private;
drivers/gpu/drm/i915/intel_drv.h +1 -1
@@ -1052,7 +1052,7 @@ void gen8_irq_power_well_pre_disable(str
 
 /* intel_crt.c */
 void intel_crt_init(struct drm_device *dev);
-
+void intel_crt_reset(struct drm_encoder *encoder);
 
 /* intel_ddi.c */
 void intel_ddi_clk_select(struct intel_encoder *encoder,
drivers/gpu/drm/i915/intel_runtime_pm.c +7 -0
@@ -952,6 +952,7 @@ static void vlv_init_display_clock_gatin
 
 static void vlv_display_power_well_init(struct drm_i915_private *dev_priv)
 {
+	struct intel_encoder *encoder;
 	enum pipe pipe;
 
 	/*
@@ -987,6 +988,12 @@ static void vlv_display_power_well_init(
 
 	intel_hpd_init(dev_priv);
 
+	/* Re-enable the ADPA, if we have one */
+	for_each_intel_encoder(dev_priv->dev, encoder) {
+		if (encoder->type == INTEL_OUTPUT_ANALOG)
+			intel_crt_reset(&encoder->base);
+	}
+
 	i915_redisable_vga_power_on(dev_priv->dev);
 }
 

Patches currently in stable-queue which might be from [email protected] are

queue-4.7/drm-i915-vlv-make-intel_crt_reset-per-encoder.patch queue-4.7/drm-i915-vlv-reset-the-adpa-in-vlv_display_power_well_init.patch queue-4.7/drm-i915-enable-polling-when-we-don-t-have-hpd.patch queue-4.7/drm-i915-vlv-disable-hpd-in-valleyview_crt_detect_hotplug.patch