Re: edp backtrace spam on MacBookAir4,1

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

 



On Thu, Jun 07, 2012 at 09:26:23AM +0200, Daniel Vetter wrote:
> On Thu, Jun 07, 2012 at 09:21:20AM +0200, Daniel Vetter wrote:
> > On Wed, May 30, 2012 at 08:39:13AM -0700, Linus Torvalds wrote:
> > > On Wed, May 30, 2012 at 1:27 AM, Daniel Vetter <daniel@xxxxxxxx> wrote:
> > > >
> > > > Ok, Chris couldn't reproduce this on his mba. Can you please boot with
> > > > drm.debug=0xe, reproduce the noise and then attach the full dmesg?
> > > 
> > > Hmm. Now *I* can't reproduce it either.
> > > 
> > > I have updated my system in the meantime, so maybe this is related to
> > > that. However, I suspect it's more likely that it's some race
> > > condition, because when I got it, I got a *lot* of it, but they were
> > > all very tightly bunched together:
> > > 
> > >  [ 1588.996413] WARNING: at drivers/gpu/drm/i915/intel_dp.c:350
> > > intel_dp_check_edp+0x5d/0xb0()
> > >  [ 1588.996650] WARNING: at drivers/gpu/drm/i915/intel_dp.c:350
> > > intel_dp_check_edp+0x5d/0xb0()
> > >  [ 1589.000983] WARNING: at drivers/gpu/drm/i915/intel_dp.c:350
> > > intel_dp_check_edp+0x5d/0xb0()
> > >  [ 1589.001225] WARNING: at drivers/gpu/drm/i915/intel_dp.c:350
> > > intel_dp_check_edp+0x5d/0xb0()
> > >  [ 1589.005975] WARNING: at drivers/gpu/drm/i915/intel_dp.c:350
> > > intel_dp_check_edp+0x5d/0xb0()
> > >  [ 1589.006218] WARNING: at drivers/gpu/drm/i915/intel_dp.c:350
> > > intel_dp_check_edp+0x5d/0xb0()
> > >  [ 1589.010980] WARNING: at drivers/gpu/drm/i915/intel_dp.c:350
> > > intel_dp_check_edp+0x5d/0xb0()
> > >  [ 1589.011224] WARNING: at drivers/gpu/drm/i915/intel_dp.c:350
> > > intel_dp_check_edp+0x5d/0xb0()
> > >  [ 1589.015976] WARNING: at drivers/gpu/drm/i915/intel_dp.c:350
> > > intel_dp_check_edp+0x5d/0xb0()
> > >  [ 1589.016211] WARNING: at drivers/gpu/drm/i915/intel_dp.c:350
> > > intel_dp_check_edp+0x5d/0xb0()
> > >  [ 1589.020986] WARNING: at drivers/gpu/drm/i915/intel_dp.c:350
> > > intel_dp_check_edp+0x5d/0xb0()
> > >  [ 1589.021232] WARNING: at drivers/gpu/drm/i915/intel_dp.c:350
> > > intel_dp_check_edp+0x5d/0xb0()
> > > 
> > > ie that's 12 of those warnings (each of them with that huge backtrace
> > > etc), but they are all within 0.03 seconds of each other. So I suspect
> > > it needs to hit some particular timing window, and I was just
> > > (un)lucky.
> > > 
> > > Because when I try it now with DRM debugging, I can't hit it. And just
> > > to make sure, I re-did the test without debugging too (in case the
> > > debugging would have changed timing), but can't reproduce it that way
> > > either.
> > 
> > Meh, I've been totally blind. Note to self: Next time around actually look
> > at the backtrace. And I dunno how that escaped our dear QA that long ...
> 
> Even more meh, this patch might actually work a bit better.
> 
> /me doesn't have an edp panel to test this

v3 is tested by our QA and hopefully works. I'll send it to Dave for
-fixes in a few days, attached below just in case. Please yell if this
doesn't fix your edp dmesg spam.

Thanks, Daniel
---
>From 2b64c5549c000a1c552b8c617129569e3784336f Mon Sep 17 00:00:00 2001
From: Daniel Vetter <daniel.vetter@xxxxxxxx>
Date: Thu, 7 Jun 2012 08:59:49 +0200
Subject: [PATCH] drm/i915: enable edp vdd in intel_dp_detect

We need this for dp aux communication. This issue can fill the dmesg
with WARN spam when the panel is disable (e.g. while reconfiguring the
mode or while resuming).

v2: Actually enable edp vdd early enough. I've missed one dp aux
channel thingy ...

v3: We also enable/disable vdd in get_edid, which is called from
within ->detect if a monitor is connected. But because we do some
more dp aux transfers afterwards, vdd is actually off and we hit the
WARN again. Hence move vdd enabling/disabling out of get_edid into the
callsite.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=50808
Reported-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
Bugreport: http://permalink.gmane.org/gmane.comp.video.dri.devel/69695
Tested-by: Yang Guang <guang.a.yang@xxxxxxxxx>
Cc: stable@xxxxxxxxxxxxxxx
Signed-Off-by: Daniel Vetter <daniel.vetter@xxxxxxxx>
---
 drivers/gpu/drm/i915/intel_dp.c |   16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 296cfc2..941edbf 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -2114,13 +2114,7 @@ g4x_dp_detect(struct intel_dp *intel_dp)
 static struct edid *
 intel_dp_get_edid(struct drm_connector *connector, struct i2c_adapter *adapter)
 {
-	struct intel_dp *intel_dp = intel_attached_dp(connector);
-	struct edid	*edid;
-
-	ironlake_edp_panel_vdd_on(intel_dp);
-	edid = drm_get_edid(connector, adapter);
-	ironlake_edp_panel_vdd_off(intel_dp, false);
-	return edid;
+	return drm_get_edid(connector, adapter);
 }
 
 static int
@@ -2152,6 +2146,7 @@ intel_dp_detect(struct drm_connector *connector, bool force)
 
 	intel_dp->has_audio = false;
 
+	ironlake_edp_panel_vdd_on(intel_dp);
 	if (HAS_PCH_SPLIT(dev))
 		status = ironlake_dp_detect(intel_dp);
 	else
@@ -2162,8 +2157,10 @@ intel_dp_detect(struct drm_connector *connector, bool force)
 		      intel_dp->dpcd[3], intel_dp->dpcd[4], intel_dp->dpcd[5],
 		      intel_dp->dpcd[6], intel_dp->dpcd[7]);
 
-	if (status != connector_status_connected)
+	if (status != connector_status_connected) {
+		ironlake_edp_panel_vdd_off(intel_dp, false);
 		return status;
+	}
 
 	intel_dp_probe_oui(intel_dp);
 
@@ -2177,6 +2174,7 @@ intel_dp_detect(struct drm_connector *connector, bool force)
 			kfree(edid);
 		}
 	}
+	ironlake_edp_panel_vdd_off(intel_dp, false);
 
 	return connector_status_connected;
 }
@@ -2235,6 +2233,7 @@ intel_dp_detect_audio(struct drm_connector *connector)
 	struct edid *edid;
 	bool has_audio = false;
 
+	ironlake_edp_panel_vdd_on(intel_dp);
 	edid = intel_dp_get_edid(connector, &intel_dp->adapter);
 	if (edid) {
 		has_audio = drm_detect_monitor_audio(edid);
@@ -2242,6 +2241,7 @@ intel_dp_detect_audio(struct drm_connector *connector)
 		connector->display_info.raw_edid = NULL;
 		kfree(edid);
 	}
+	ironlake_edp_panel_vdd_off(intel_dp, false);
 
 	return has_audio;
 }
-- 
Daniel Vetter
Mail: daniel@xxxxxxxx
Mobile: +41 (0)79 365 57 48
_______________________________________________
dri-devel mailing list
dri-devel@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/dri-devel


[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux