| From 2f2dde6ba89b1ef1fe23c1138131b315d9aa4019 Mon Sep 17 00:00:00 2001 |
| From: Harry Pan <harry.pan@intel.com> |
| Date: Thu, 29 Nov 2018 00:40:41 +0800 |
| Subject: usb: quirk: add no-LPM quirk on SanDisk Ultra Flair device |
| |
| From: Harry Pan <harry.pan@intel.com> |
| |
| commit 2f2dde6ba89b1ef1fe23c1138131b315d9aa4019 upstream. |
| |
| Some lower volume SanDisk Ultra Flair in 16GB, which the VID:PID is |
| in 0781:5591, will aggressively request LPM of U1/U2 during runtime, |
| when using this thumb drive as the OS installation key we found the |
| device will generate failure during U1 exit path making it dropped |
| from the USB bus, this causes a corrupted installation in system at |
| the end. |
| |
| i.e., |
| [ 166.918296] hub 2-0:1.0: state 7 ports 7 chg 0000 evt 0004 |
| [ 166.918327] usb usb2-port2: link state change |
| [ 166.918337] usb usb2-port2: do warm reset |
| [ 166.970039] usb usb2-port2: not warm reset yet, waiting 50ms |
| [ 167.022040] usb usb2-port2: not warm reset yet, waiting 200ms |
| [ 167.276043] usb usb2-port2: status 02c0, change 0041, 5.0 Gb/s |
| [ 167.276050] usb 2-2: USB disconnect, device number 2 |
| [ 167.276058] usb 2-2: unregistering device |
| [ 167.276060] usb 2-2: unregistering interface 2-2:1.0 |
| [ 167.276170] xhci_hcd 0000:00:15.0: shutdown urb ffffa3c7cc695cc0 ep1in-bulk |
| [ 167.284055] sd 0:0:0:0: [sda] tag#0 FAILED Result: hostbyte=DID_NO_CONNECT driverbyte=DRIVER_OK |
| [ 167.284064] sd 0:0:0:0: [sda] tag#0 CDB: Read(10) 28 00 00 33 04 90 00 01 00 00 |
| ... |
| |
| Analyzed the USB trace in the link layer we realized it is because |
| of the 6-ms timer of tRecoveryConfigurationTimeout which documented |
| on the USB 3.2 Revision 1.0, the section 7.5.10.4.2 of "Exit from |
| Recovery.Configuration"; device initiates U1 exit -> Recovery.Active |
| -> Recovery.Configuration, then the host timer timeout makes the link |
| transits to eSS.Inactive -> Rx.Detect follows by a Warm Reset. |
| |
| Interestingly, the other higher volume of SanDisk Ultra Flair sharing |
| the same VID:PID, such as 64GB, would not request LPM during runtime, |
| it sticks at U0 always, thus disabling LPM does not affect those thumb |
| drives at all. |
| |
| The same odd occures in SanDisk Ultra Fit 16GB, VID:PID in 0781:5583. |
| |
| Signed-off-by: Harry Pan <harry.pan@intel.com> |
| Cc: stable <stable@vger.kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/usb/core/quirks.c | 4 ++++ |
| 1 file changed, 4 insertions(+) |
| |
| --- a/drivers/usb/core/quirks.c |
| +++ b/drivers/usb/core/quirks.c |
| @@ -177,6 +177,10 @@ static const struct usb_device_id usb_qu |
| /* Midiman M-Audio Keystation 88es */ |
| { USB_DEVICE(0x0763, 0x0192), .driver_info = USB_QUIRK_RESET_RESUME }, |
| |
| + /* SanDisk Ultra Fit and Ultra Flair */ |
| + { USB_DEVICE(0x0781, 0x5583), .driver_info = USB_QUIRK_NO_LPM }, |
| + { USB_DEVICE(0x0781, 0x5591), .driver_info = USB_QUIRK_NO_LPM }, |
| + |
| /* M-Systems Flash Disk Pioneers */ |
| { USB_DEVICE(0x08ec, 0x1000), .driver_info = USB_QUIRK_RESET_RESUME }, |
| |