Please drop this. This is a duplicate of https://bugzilla.kernel.org/show_bug.cgi?id=32432. 2011/8/17 Alan Stern <stern@xxxxxxxxxxxxxxxxxxx>: > On Wed, 17 Aug 2011, River Wang wrote: > >> From: Wang Zhi <zhi.wang@xxxxxxxxxxxxx> >> Date: Wed, 17 Aug 2011 03:35:43 -0700 >> Subject: [PATCH]: USB: Enable IO watchdog for Intel MPH core to >> resolve USB stick reconnecting issue. >> >> On Intel Oaktrail platform, the USBSTS.USBINT interrupt may come too >> early before data is really ready especially when USB mass storage >> device is doing busy IO transactions: USBINT comes, but >> ehci_work()->scan_async() doesn't complete any urb from QHs. This will >> cause USB reconnecting issue on some SanDisk and SSK card reader.So we >> enable IO watchdog to kick this. >> >> Here is the log: >> >> [ 95.454965] scan_async() - 1262: Scan. qh: 0xf4ad2448. >> [ 95.455018] ehci_hcd 0000:0c:16.0: submit_async 1.4.4 urb f479f5e8 >> ep1in len 122880, qtd f4b6a060 [qh f53da2e8] >> [ 95.460048] scan_async() - 1262: Scan. qh: 0xf4ad2448. >> [ 95.460063] start_unlink_async() - 1246: S CMD_IAAD, qh: 0xf4ad2448. >> >> /* Interrupt comes too early. */ >> [ 95.460131] ehci_hcd 0000:0c:16.0: irq status 7c0a9 PPCE Async >> Periodic IAA FLR INT >> [ 95.460141] end_unlink_async() - 1187: qh: 0xf4ad2448. >> >> /* but scan_async doesn't complete any urb, so we really HANG here.*/ >> [ 95.460148] scan_async() - 1262: Scan. qh: 0xf53da2e8. >> >> /* ehci_dbg_timer() is used to monitor registers when interrupt doesn't come. */ >> [ 96.912107] ehci_dbg_timer() - 146: USBCMD: 0x00018005, USBSTS: 0x00000088. >> [ 98.904196] ehci_dbg_timer() - 146: USBCMD: 0x00018035, USBSTS: 0x0007c088. >> [ 98.916117] ehci_dbg_timer() - 146: USBCMD: 0x00018005, USBSTS: 0x00000088. >> [ 100.908183] ehci_dbg_timer() - 146: USBCMD: 0x00018035, USBSTS: 0x0007c088. >> [ 100.920114] ehci_dbg_timer() - 146: USBCMD: 0x00018005, USBSTS: 0x00000088. >> [ 102.912182] ehci_dbg_timer() - 146: USBCMD: 0x00018035, USBSTS: 0x0007c088. >> [ 102.924114] ehci_dbg_timer() - 146: USBCMD: 0x00018005, USBSTS: 0x00000088. >> [ 104.916150] ehci_dbg_timer() - 146: USBCMD: 0x00018035, USBSTS: 0x0007c088. >> [ 104.928110] ehci_dbg_timer() - 146: USBCMD: 0x00018005, USBSTS: 0x00000088. >> [ 106.920167] ehci_dbg_timer() - 146: USBCMD: 0x00018035, USBSTS: 0x0007c088. >> [ 106.932112] ehci_dbg_timer() - 146: USBCMD: 0x00018005, USBSTS: 0x00000088. >> [ 108.924161] ehci_dbg_timer() - 146: USBCMD: 0x00018035, USBSTS: 0x0007e088. >> [ 108.936113] ehci_dbg_timer() - 146: USBCMD: 0x00018005, USBSTS: 0x00000088. >> >> /* I type a key on my USB keyboard. Interrupt comes again. 2 urb is >> completed. We are alive again.*/ >> [ 109.279368] ehci_hcd 0000:0c:16.0: irq status 7c089 PPCE Async >> Periodic FLR INT >> >> [ 109.279393] scan_async() - 1262: Scan. qh: 0xf53da2e8. >> >> /* This is the urb comes late. */ >> [ 109.279423] ehci_hcd 0000:0c:16.0: ehci_urb_done 1.4.4 urb f479f5e8 >> ep1in status 0 len 122880/122880 >> >> [ 109.279499] scan_async() - 1262: Scan. qh: 0xf53da2e8. >> >> /* This is the interrupt urb from keyboard. */ >> [ 109.279534] ehci_hcd 0000:0c:16.0: ehci_urb_done 1.4.1 urb f46924b8 >> ep1in status 0 len 8/8 >> >> Signed-off-by: Wang Zhi <zhi.wang@xxxxxxxxxxxxx> >> --- >> ehci-pci.c | 14 ++++++++++++++ >> 1 file changed, 14 insertions(+) >> >> diff --git a/drivers/usb/host/ehci-pci.c b/drivers/usb/host/ehci-pci.c >> index 1102ce6..a96b13c 100644 >> --- a/drivers/usb/host/ehci-pci.c >> +++ b/drivers/usb/host/ehci-pci.c >> @@ -139,6 +139,20 @@ static int ehci_pci_setup(struct usb_hcd *hcd) >> || pdev->device == 0x0829) { >> ehci_info(ehci, "disable lpm for langwell/penwell\n"); >> ehci->has_lpm = 0; >> + >> + /* On Intel Oaktrail platform, the USBSTS.USBINT >> + * interrupt may come too early before data is >> + * ready especially when USB mass storage device >> + * is doing busy IO transactions: USBINT comes, >> + * but ehci_work()->scan_async() doesn't complete >> + * any urb from QHs. This will cause USB reconnecting >> + * issue on some SanDisk stick and SSK card reader. >> + * >> + * So we enable IO watchdog to kick this. */ >> + >> + ehci_info(ehci, "enable IO watchdog for " >> + "langwell/penwell\n"); >> + ehci->need_io_watchdog = 1; >> } >> if (pdev->device == PCI_DEVICE_ID_INTEL_CE4100_USB) { >> hcd->has_tt = 1; > > Signed-off-by: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> > > -- 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