On Tue, 12 Dec 2006, Dominik Brodowski wrote:

> > On the other hand, your latest log suggests that the STS_FLR bit gets set 
> > during the ehci_bus_suspend() routine, not the resume routine.  So it will 
> > be best to check at the beginning and end of both routines.
> 
> Unfortunately, it doesn't get set anywhere then, but outside:
> 
> case A:
> http://userweb.kernel.org/~brodo/dmesg-autosuspend-3-sr.txt
> 
> [   26.380849] ehci_bus_resume: intro 37
> [   26.380852] ehci_hcd 0000:00:1d.7: resume root hub
> [   26.400866] ehci_bus_resume: exit 37 (mask was 37)
> [   26.411590] hub 1-0:1.0: state 7 ports 6 chg 0000 evt 0000
> [   26.411679] usb 1-1: usb auto-resume
> [   26.437439] ehci_hcd 0000:00:1d.7: GetStatus port 1 status 001005 POWER 
> sig=se0 PE CONNECT
> [   26.448389] usb 1-1: finish resume
> [   26.448681] ehci_hcd 0000:00:1d.7: IRQ status 8009, intr_enable 37
> ...
> [   26.453427] ehci_hcd 0000:00:1d.7: IRQ status 8028, intr_enable 37
> ...
> [   28.900407] ACPI: CPU0 (power states: C1[C1] C2[C2] C3[C3])
> [   28.900419] ACPI: Processor [CPU0] (supports 8 throttling states)
> [   17.451000] Time: acpi_pm clocksource has been installed.
> [   17.545000] acpi_processor-0740 [00] processor_preregister_: Error while
> parsing _PSD domain information. Assuming no coordination
> [   17.546000] ehci_hcd 0000:00:1d.7: IRQ status 2008, intr_enable 3f
> 
> All of a sudden, it seems...
> 
> 
> Case B:
> http://userweb.kernel.org/~brodo/dmesg-autosuspend-2-sr.txt
> 
> [   15.582559] ehci_hcd 0000:00:1d.7: IRQ status 4, intr_enable 37
> [   16.327713] libata version 2.00 loaded.
> [   17.575888] hub 1-0:1.0: hub_suspend
> [   17.575896] ehci_bus_suspend: intro 37
> [   17.576013] ehci_bus_suspend: exit 37 (mask was 37)
> [   17.576620] usb usb1: usb auto-suspend
> ...
> [   22.312792] ehci_hcd 0000:00:1d.7: IRQ status 8, intr_enable 3f
> 
> 
> For Case B, it seems to happen while the hub is suspended; while for
> Case A, it seems to happen while the hub is resumed. It just gets more and
> more strange. Broken hardware?[*]

I can't find anything in the driver that would set the bit.  Certainly not 
while the controller is suspended and nothing is happening.  It's possible 
that some other driver is setting it by mistake, but that seems pretty 
unlikely.  However I haven't tried running any new kernels recently; I've 
been waiting for 2.6.20-rc1 to appear.  Perhaps the same thing will show 
up on my machine...

But if some other driver is responsible, why wouldn't it happen without 
the autosuspend patch?  More likely the suspend triggers the hardware into 
doing something really funky.

You could try another test: Let the IRQ be disabled, and then rmmod 
ehci-hcd and modprobe it back.  Perhaps then rmmod usb-storage to force 
another suspend, perhaps not.  Anyway, see what happens to intr_enable.  
You can always force interrupts to occur by turning the USB HD off or on.

It would be possible to patch the ehci_irq() routine to have it turn off
the STS_FLR bit whenever necessary.  But first I would like to know what
causes it to turn on at all.  Maybe it really is a hardware problem.

Alan Stern


-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to