Re: [PATCH]: USB: Enable IO watchdog for Intel MPH core to resolve USB stick reconnecting issue.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux