Summary: | [845G] Horizontal jerking + pipe A underrun after suspend | ||
---|---|---|---|
Product: | xorg | Reporter: | Joey Adams <joeyadams3.14159> |
Component: | Driver/intel | Assignee: | Jesse Barnes <jbarnes> |
Status: | RESOLVED DUPLICATE | QA Contact: | Xorg Project Team <xorg-team> |
Severity: | minor | ||
Priority: | medium | CC: | aguertin+freedesktop, ling.ma |
Version: | unspecified | ||
Hardware: | x86 (IA32) | ||
OS: | Linux (All) | ||
Whiteboard: | |||
i915 platform: | i915 features: | ||
Attachments: |
Created attachment 21298 [details]
Second invocation of X, before suspend
Created attachment 21299 [details]
Second invocation of X, after suspend
Created attachment 21300 [details]
Third invocation of X
Created attachment 21301 [details]
Separate but possibly related bug: blank screen on startup + underruns w/ NoAccel
Created attachment 21302 [details]
dmesg after suspend and restarting X
Created attachment 21303 [details]
lsmod after suspend and restarting X
|
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.
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.