Re: [PATCH] drm/i915: revert intel_dp_probe_oui call during HPD interrupt handler

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 06/05/2014 02:26 AM, Daniel Vetter wrote:
On Wed, Jun 04, 2014 at 03:29:41PM -0700, clinton.a.taylor@xxxxxxxxx wrote:
From: Clint Taylor <clinton.a.taylor@xxxxxxxxx>

Remove OUI read function from the lower half interrupt handler. Upon
closing the eDP panel lid an HPD interrupt is generated. The lower half
handler calls intel_dp_probe_oui() as part of intel_dp_detect().
intel_dp_probe_oui() enables eDP VDD and subsequently disables eDP VDD
causing another HPD interrupt. This cycle repeats every 3.6 seconds with
VDD asserted for 3.5 of those seconds until the lid is opened again.

Revert of 0d198328538276c4459ef5de081e68ae60e6c4c2
Revert of 351cfc34db8decb0c5cc1aac7cf1780a0e45c8b1

Signed-off-by: Clint Taylor <clinton.a.taylor@xxxxxxxxx>

Hm, this is funky ... we currently don't handle port A hotplug events, and
we filter hotplug events properly.

This is a Port A panel on ValleyView.


How does this exactly blow up for you? Or is this port D?

[ 219.723752] [drm:ironlake_panel_vdd_off_sync], PP_STATUS: 0x00000000 PP_CONTROL: 0xabcd0000 [ 219.823937] [drm:valleyview_irq_handler], hotplug event received, stat 0x20100000 [ 219.823964] [drm:intel_hpd_irq_handler], Received HPD interrupt on PIN 5 - cnt: 0 [ 219.824153] [drm:i915_hotplug_work_func], running encoder hotplug functions [ 219.824175] [drm:i915_hotplug_work_func], Connector eDP-1 (pin 5) received hotplug event. [ 219.824193] [drm:i915_hotplug_work_func], Connector HDMI-A-1 (pin 5) received hotplug event.
[  219.824213] [drm:intel_dp_detect], [CONNECTOR:14:eDP-1]
[  219.824229] [drm:ironlake_edp_panel_vdd_on], Turn eDP VDD on

The valleyview_irq_handler() is receiving the HPD event and i915_hotplug_work_func() is calling intel_dp_detect().



We might want to have some filtering here checking whether the edp panel
is on or off. Also the delayed work is _way_ too long.

We could filter if the lid is closed, but it seemed a lot safer to remove the function. Or we could move the Sink and branch OUI reads to the training function. If OUI is necessary we should probably also save the values to the context.

-Daniel

---
  drivers/gpu/drm/i915/intel_dp.c |   23 -----------------------
  1 file changed, 23 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 2a00cb8..246d2c1 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -2867,27 +2867,6 @@ intel_dp_get_dpcd(struct intel_dp *intel_dp)
  	return true;
  }

-static void
-intel_dp_probe_oui(struct intel_dp *intel_dp)
-{
-	u8 buf[3];
-
-	if (!(intel_dp->dpcd[DP_DOWN_STREAM_PORT_COUNT] & DP_OUI_SUPPORT))
-		return;
-
-	intel_edp_panel_vdd_on(intel_dp);
-
-	if (intel_dp_dpcd_read_wake(&intel_dp->aux, DP_SINK_OUI, buf, 3) == 3)
-		DRM_DEBUG_KMS("Sink OUI: %02hx%02hx%02hx\n",
-			      buf[0], buf[1], buf[2]);
-
-	if (intel_dp_dpcd_read_wake(&intel_dp->aux, DP_BRANCH_OUI, buf, 3) == 3)
-		DRM_DEBUG_KMS("Branch OUI: %02hx%02hx%02hx\n",
-			      buf[0], buf[1], buf[2]);
-
-	edp_panel_vdd_off(intel_dp, false);
-}
-
  int intel_dp_sink_crc(struct intel_dp *intel_dp, u8 *crc)
  {
  	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
@@ -3178,8 +3157,6 @@ intel_dp_detect(struct drm_connector *connector, bool force)
  	if (status != connector_status_connected)
  		goto out;

-	intel_dp_probe_oui(intel_dp);
-
  	if (intel_dp->force_audio != HDMI_AUDIO_AUTO) {
  		intel_dp->has_audio = (intel_dp->force_audio == HDMI_AUDIO_ON);
  	} else {
--
1.7.9.5

_______________________________________________
Intel-gfx mailing list
Intel-gfx@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/intel-gfx


_______________________________________________
Intel-gfx mailing list
Intel-gfx@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/intel-gfx




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux