Hi Alan, I've switched to kernel 4.2 for the latest debug sessions. In drivers/usb/host/ehci-hcd.c, ehci_stop calls ehci_silence_controller which calls ehci_halt: static int ehci_halt (struct ehci_hcd *ehci) { u32 temp; printk(KERN_INFO "ehci_halt: entry\n"); spin_lock_irq(&ehci->lock); printk(KERN_INFO "ehci_halt: after spin_lock_irq\n"); /* disable any irqs left enabled by previous code */ ehci_writel(ehci, 0, &ehci->regs->intr_enable); printk(KERN_INFO "ehci_halt: after first ehci_writel\n"); if (ehci_is_TDI(ehci) && !tdi_in_host_mode(ehci)) { // this branch is not entered printk(KERN_INFO "ehci_halt: before early spin_unlock_irq\n"); spin_unlock_irq(&ehci->lock); printk(KERN_INFO "ehci_halt: early exit\n"); return 0; } /* * This routine gets called during probe before ehci->command * has been initialized, so we can't rely on its value. */ ehci->command &= ~CMD_RUN; printk(KERN_INFO "ehci_halt: before ehci_readl\n"); temp = ehci_readl(ehci, &ehci->regs->command); // this point is never reached printk(KERN_INFO "ehci_halt: after ehci_readl, before ehci_writel\n"); There's one call to ehci_writel in the first part, which succeeds. Then the call of ehci_readl freezes. The name sounds like a generic communication primitive which is used from various places, so I didn't drill further down. If you think it might help, I will. Here's a transcript of the output I see: ehci-pci 0000:00:1d.0: remove, state 4 ehci-pci 0000:00:1d.0: roothub graceful disconnect usb usb3: USB disconnect, device number 1 usb3-1: USB disconnect, device number 2 usb3-1: ep 81: release intr @ 8+64 (1.0+256) [1/0 us] mask 0001 usb_remove_hcd: calling stop ehci-pci 0000:00:1d.0: stop ehci_silence_controller: entry ehci_halt: entry ehci_halt: after spin_lock_irq ehci_halt: after first ehci_writel ehci_halt: before ehci_readl thanks and cheers, Roland -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html