On Sun, 5 Aug 2012, Tomas Sokorai wrote:

> Here's after plugging in, but before the hang:
> -----------------------------------------------------
> bus pci, device 0000:00:04.0
> OHCI Host Controller
> ohci_hcd
> OHCI 1.0, NO legacy support registers, rh state running
> control 0x68f RWE RWC HCFS=operational IE PLE CBSR=3
> cmdstatus 0x00000 SOC=0
> intrstatus 0x00000024 FNO SF
> intrenable 0x8000005a MIE RHSC UE RD WDH
...

> And finally the one after the USB is hung:
> -----------------------------------------------------
> bus pci, device 0000:00:04.0
> OHCI Host Controller
> ohci_hcd
> OHCI 1.0, NO legacy support registers, rh state running
> control 0x68f RWE RWC HCFS=operational IE PLE CBSR=3
> cmdstatus 0x00000 SOC=0
> intrstatus 0x00000020 FNO
> intrenable 0x8000005e MIE RHSC UE RD SF WDH

There is a notable difference: After the hang, SF is set in intrenable.  
The driver does this in only a few places, basically when an Endpoint
Descriptor is unlinked or when the ZFMicro quirk is set.  Do you see
any lines in the dmesg log from boot-up about "enabled Compaq ZFMicro
chipset quirks"?

> The "async" pseudofile yields nothing, every time .

Most likely something is going wrong with the ED unlink.

Are you comfortable writing your own debugging patches, or would you 
prefer me to send you something?  The place to check is these lines 
near the end of ohci_irq() in drivers/usb/host/ohci-hcd.c:

        if (ohci->ed_rm_list)
                finish_unlinks (ohci, ohci_frame_no(ohci));
        if ((ints & OHCI_INTR_SF) != 0
                        && !ohci->ed_rm_list
                        && !ohci->ed_to_check
                        && ohci->rh_state == OHCI_RH_RUNNING)
                ohci_writel (ohci, OHCI_INTR_SF, &regs->intrdisable);

My guess is that ed_rm_list is non-NULL, but for some reason
finish_unlinks() doesn't do anything -- in particular, it doesn't clear
ed_rm_list.  As a result the condition in the "if" statement fails and
OHCI_INTR_SF doesn't get written to regs->intrdisable.

If we can verify that, the next step will be to look inside 
finish_unlinks() to see why it's not doing anything.

Alan Stern

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to