Hi all, I recently bought two X-craft 360 HDD cases and I realized that the USB stack in Linux plays badly with them. The google found that people were working on this issue, but no definitive solution was found: http://bugzilla.kernel.org/show_bug.cgi?id=8639 http://forum.coolermaster.com/viewtopic.php?f=23&t=8487 http://www.mail-archive.com/linux-usb@vger.kernel.org/msg02007.html After some testing, I figured that the used chip (see bellow) requrires in some cases (try turn HDD box off and on when connected) about 10 seconds to reply to USB_REQ_GET_DESCRIPTOR . But include/linux/usb.h says that USB specification identifies just 5 second timeouts thus USB_CTRL_GET_TIMEOUT is set to 5000 milliseconds. This device gets confused with the short timeout. Device identification: Sep 16 14:09:52 master kernel: usb 1-1: New USB device found, idVendor=ed06, idProduct=8000 Sep 16 14:09:52 master kernel: usb 1-1: New USB device strings: Mfr=16, Product=32, SerialNumber=48 Sep 16 14:09:52 master kernel: usb 1-1: Product: SATA8000 FW1.0 Sep 16 14:09:52 master kernel: usb 1-1: Manufacturer: DATAST0R Technology Corp Sep 16 14:09:52 master kernel: usb 1-1: SerialNumber: 1966051022645658 USB_REQ_GET_DESCRIPTOR 10 second delay (witch patched kernel): Sep 16 14:36:42 master kernel: usb 1-1: new high speed USB device using ehci_hcd and address 6 Sep 16 14:36:52 master kernel: usb 1-1: configuration #1 chosen from 1 choice Possible fixes: a) modify include/linux/usb.h #define USB_CTRL_GET_TIMEOUT 12000 b) modify drivers/usb/core/hub.c (probably better solution) ======== Subj: USB: hub.c: Increase USB_REQ_GET_DESCRIPTOR timeout (for SATA8000) This patch increases timeout to 12 seconds for the SATA8000 device from DATAST0R Technology Corp (measured maximum response time is 10 seconds). Signed-off-by: Jaroslav Kysela <perex@perex.cz> --- drivers/usb/core/hub.c.old 2008-09-15 15:45:54.000000000 +0200 +++ drivers/usb/core/hub.c 2008-09-16 14:42:11.000000000 +0200 @@ -2399,11 +2399,16 @@ */ for (j = 0; j < 3; ++j) { buf->bMaxPacketSize0 = 0; + /* + * Device SATA8000 FW1.0 from DATAST0R Technology Corp + * requires about 10 seconds to send reply for + * the descriptor request. + */ r = usb_control_msg(udev, usb_rcvaddr0pipe(), USB_REQ_GET_DESCRIPTOR, USB_DIR_IN, USB_DT_DEVICE << 8, 0, buf, GET_DESCRIPTOR_BUFSIZE, - USB_CTRL_GET_TIMEOUT); + 12000); switch (buf->bMaxPacketSize0) { case 8: case 16: case 32: case 64: case 255: if (buf->bDescriptorType == ======== ----- Jaroslav Kysela <perex@perex.cz> Linux Kernel Sound Maintainer ALSA Project, Red Hat, Inc. -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
