Bug 19173 - [845G] Horizontal jerking + pipe A underrun after suspend
Summary: [845G] Horizontal jerking + pipe A underrun after suspend
Status: RESOLVED DUPLICATE of bug 18702
Alias: None
Product: xorg
Classification: Unclassified
Component: Driver/intel (show other bugs)
Version: unspecified
Hardware: x86 (IA32) Linux (All)
: medium minor
Assignee: Jesse Barnes
QA Contact: Xorg Project Team
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2008-12-19 01:36 UTC by Joey Adams
Modified: 2009-01-06 13:32 UTC (History)
2 users (show)

See Also:
i915 platform:
i915 features:


Attachments
First invocation of X (31.06 KB, application/octet-stream)
2008-12-19 01:36 UTC, Joey Adams
no flags Details
Second invocation of X, before suspend (32.68 KB, application/octet-stream)
2008-12-19 01:37 UTC, Joey Adams
no flags Details
Second invocation of X, after suspend (35.61 KB, text/plain)
2008-12-19 01:37 UTC, Joey Adams
no flags Details
Third invocation of X (37.32 KB, text/plain)
2008-12-19 01:38 UTC, Joey Adams
no flags Details
Separate but possibly related bug: blank screen on startup + underruns w/ NoAccel (40.60 KB, text/plain)
2008-12-19 01:39 UTC, Joey Adams
no flags Details
dmesg after suspend and restarting X (39.53 KB, text/plain)
2008-12-19 01:40 UTC, Joey Adams
no flags Details
lsmod after suspend and restarting X (4.33 KB, text/plain)
2008-12-19 01:40 UTC, Joey Adams
no flags Details

Description Joey Adams 2008-12-19 01:36:15 UTC
Created attachment 21297 [details]
First invocation of X

On my HP Pavilion with Intel 82845G/GL on a 17-inch LCD running Ubuntu Intrepid, 2.6.27-9-generic, Xorg 1.5.2-2ubuntu3, I get a horizontal jerk every once in a while after resuming from suspend.  These jerks seem to last less than a tenth of a second, and they occur in greater frequency when resolution is higher or when a lot of 2D accelerated effects are taking place.  It is particularly bad, for instance, when GNOME's progress bar is visible.  The jerking does not go away even if X is restarted; only a reboot will get rid of it, apparently.  Moreover, each instance of a jerking corresponds to the following output from /var/log/Xorg.0.log:

(EE) intel(0): underrun on pipe A!

On the first invocation of X, this appears in my Xorg.0.log:

(II) intel(0): Comparing regs from server start up to After PreInit
(WW) intel(0): Register 0x70024 (PIPEASTAT) changed from 0x80000207 to 0x00000000
(WW) intel(0): PIPEASTAT before: status: FIFO_UNDERRUN VSYNC_INT_STATUS SVBLANK_INT_STATUS VBLANK_INT_STATUS OREG_UPDATE_STATUS
(WW) intel(0): PIPEASTAT after: status:

On the second invocation, it does not appear.  After suspending, nothing like it appears either.  However, when X is killed and started again after suspending, this appears in Xorg.0.log instead:

(II) intel(0): Comparing regs from server start up to After PreInit
(WW) intel(0): Register 0x61180 (LVDS) changed from 0x0000b011 to 0x0000b001
(WW) intel(0): LVDS before: disabled, pipe A, 18 bit, 1 channel
(WW) intel(0): LVDS after: disabled, pipe A, 18 bit, 1 channel

While poking around in the source code, I noticed that static void i830_stop_ring(ScrnInfoPtr pScrn, Bool flush) in i830_driver.c ignores its flush argument (except for an ineffectual debugging trace).  Is this a bug?

I did determine that i830_stop_ring is executing all its nooks and crannies all except one time, which is when the system is resumed from boot.  Here, the if (temp & RING_VALID) fails.  However, it does manage to succeed later on, but starting X again does not get rid of the jerks.  Only rebooting will, it seems.

I tried adding { PCI_CHIP_845_G, SUBSYS_ANY, SUBSYS_ANY, quirk_ignore_lvds } to the quirk array in i830_quirks.c, but that didn't get rid of the LVDS before/after or the jerking problem.

Adding Option "NoAccel" "On" to my Device section makes the jerks go away, but the PIPEASTAT->LVDS thing still appears in the log.

Attached are complete logs, dmesg, and lsmod.  Also attached is a fishy Xorg.0.log (Xorg.0.log_blanknoaccel) that occurred when I had a different but possibly related bug, which is X showing a blank black screen but accepting clients.  This log reports underruns on pipe A even though acceleration is disabled.  Shouldn't disabled acceleration mean there shouldn't be underruns because there shouldn't be a ring buffer?

Thanks in advance for the help!

P.S.:  I really don't know much about graphics drivers at all (I know C well), but I'm picking up what snippets I can :)  Also, my Xorg logs are slightly polluted with my own traces.  You can safely ignore all lines starting with Joey: , but there are other traces I added that may blend in with the rest and might actually be a little useful.
Comment 1 Joey Adams 2008-12-19 01:37:04 UTC
Created attachment 21298 [details]
Second invocation of X, before suspend
Comment 2 Joey Adams 2008-12-19 01:37:41 UTC
Created attachment 21299 [details]
Second invocation of X, after suspend
Comment 3 Joey Adams 2008-12-19 01:38:07 UTC
Created attachment 21300 [details]
Third invocation of X
Comment 4 Joey Adams 2008-12-19 01:39:46 UTC
Created attachment 21301 [details]
Separate but possibly related bug:  blank screen on startup + underruns w/ NoAccel
Comment 5 Joey Adams 2008-12-19 01:40:19 UTC
Created attachment 21302 [details]
dmesg after suspend and restarting X
Comment 6 Joey Adams 2008-12-19 01:40:42 UTC
Created attachment 21303 [details]
lsmod after suspend and restarting X
Comment 7 aguertin+freedesktop 2009-01-03 03:59:54 UTC
Same as bug 18702?
Comment 8 Jesse Barnes 2009-01-06 13:32:44 UTC
Yeah, marking as a dup.

*** This bug has been marked as a duplicate of bug 18702 ***


Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.