On Tue, 14 Feb 2017, Jack Coulter wrote: > Hi, > > I'm using an external multiple-disk enclosure (specifically a Hotway > H82-SU3S2), which from lsusb appears to use a JMS567 SATA-USB bridge: > > > Bus 002 Device 002: ID 152d:0567 JMicron Technology Corp. / JMicron > > USA Technology Corp. JMS567 SATA 6Gb/s bridge > > > According to the manufacturer's product sheet [1] for this chip, it > supports the UAS protocol, but when connected to my system (running > kernel 4.9.8), it falls back to the older usb-storage driver: > > > /: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M > > |__ Port 3: Dev 2, If 0, Class=Mass Storage, Driver=usb-storage, 5000M > > > I had a look at uas-detect.h, specifically uas_use_uas_driver, but I > didn't see any of the warning messages within that function printed to > dmesg when the device is attached. I added some extra dev_warn calls > earlier in the function and determined that uas_find_uas_alt_setting is > returning a negative value. This prompted me to look at the output of > lsusb -v for this device: > > > Bus 002 Device 002: ID 152d:0567 JMicron Technology Corp. / JMicron > > USA Technology Corp. JMS567 SATA 6Gb/s bridge > > Device Descriptor: > > bLength 18 > > bDescriptorType 1 > > bcdUSB 3.00 > > bDeviceClass 0 > > bDeviceSubClass 0 > > bDeviceProtocol 0 > > bMaxPacketSize0 9 > > idVendor 0x152d JMicron Technology Corp. / JMicron USA > > Technology Corp. > > idProduct 0x0567 JMS567 SATA 6Gb/s bridge > > bcdDevice 2.05 > > iManufacturer 10 JMicron > > iProduct 11 USB to ATA/ATAPI Bridge > > iSerial 5 152D00539000 > > bNumConfigurations 1 > > Configuration Descriptor: > > bLength 9 > > bDescriptorType 2 > > wTotalLength 44 > > bNumInterfaces 1 > > bConfigurationValue 1 > > iConfiguration 0 > > bmAttributes 0xc0 > > Self Powered > > MaxPower 2mA > > Interface Descriptor: > > bLength 9 > > bDescriptorType 4 > > bInterfaceNumber 0 > > bAlternateSetting 0 > > bNumEndpoints 2 > > bInterfaceClass 8 Mass Storage > > bInterfaceSubClass 6 SCSI > > bInterfaceProtocol 80 Bulk-Only > > iInterface 0 > > Endpoint Descriptor: > > bLength 7 > > bDescriptorType 5 > > bEndpointAddress 0x81 EP 1 IN > > bmAttributes 2 > > Transfer Type Bulk > > Synch Type None > > Usage Type Data > > wMaxPacketSize 0x0400 1x 1024 bytes > > bInterval 0 > > bMaxBurst 15 > > Endpoint Descriptor: > > bLength 7 > > bDescriptorType 5 > > bEndpointAddress 0x02 EP 2 OUT > > bmAttributes 2 > > Transfer Type Bulk > > Synch Type None > > Usage Type Data > > wMaxPacketSize 0x0400 1x 1024 bytes > > bInterval 0 > > bMaxBurst 15 > > Binary Object Store Descriptor: > > bLength 5 > > bDescriptorType 15 > > wTotalLength 22 > > bNumDeviceCaps 2 > > USB 2.0 Extension Device Capability: > > bLength 7 > > bDescriptorType 16 > > bDevCapabilityType 2 > > bmAttributes 0x00000002 > > HIRD Link Power Management (LPM) Supported > > SuperSpeed USB Device Capability: > > bLength 10 > > bDescriptorType 16 > > bDevCapabilityType 3 > > bmAttributes 0x00 > > wSpeedsSupported 0x000e > > Device can operate at Full Speed (12Mbps) > > Device can operate at High Speed (480Mbps) > > Device can operate at SuperSpeed (5Gbps) > > bFunctionalitySupport 1 > > Lowest fully-functional device speed is Full Speed (12Mbps) > > bU1DevExitLat 10 micro seconds > > bU2DevExitLat 2047 micro seconds > > Device Status: 0x000d > > Self Powered > > U1 Enabled > > U2 Enabled > > It seems that it's lacking the interface descriptor for UAS, when I > compared it to the output from a different enclosure with which UAS > works correctly: > > > Bus 002 Device 092: ID 174c:1351 ASMedia Technology Inc. > > Device Descriptor: > > bLength 18 > > bDescriptorType 1 > > bcdUSB 3.10 > > bDeviceClass 0 > > bDeviceSubClass 0 > > bDeviceProtocol 0 > > bMaxPacketSize0 9 > > idVendor 0x174c ASMedia Technology Inc. > > idProduct 0x1351 > > bcdDevice 0.01 > > iManufacturer 2 > > iProduct 3 > > iSerial 1 > > bNumConfigurations 1 > > Configuration Descriptor: > > bLength 9 > > bDescriptorType 2 > > wTotalLength 121 > > bNumInterfaces 1 > > bConfigurationValue 1 > > iConfiguration 0 > > bmAttributes 0xc0 > > Self Powered > > MaxPower 0mA > > Interface Descriptor: > > bLength 9 > > bDescriptorType 4 > > bInterfaceNumber 0 > > bAlternateSetting 0 > > bNumEndpoints 2 > > bInterfaceClass 8 Mass Storage > > bInterfaceSubClass 6 SCSI > > bInterfaceProtocol 80 Bulk-Only > > iInterface 0 > > Endpoint Descriptor: > > bLength 7 > > bDescriptorType 5 > > bEndpointAddress 0x81 EP 1 IN > > bmAttributes 2 > > Transfer Type Bulk > > Synch Type None > > Usage Type Data > > wMaxPacketSize 0x0400 1x 1024 bytes > > bInterval 0 > > bMaxBurst 15 > > Endpoint Descriptor: > > bLength 7 > > bDescriptorType 5 > > bEndpointAddress 0x02 EP 2 OUT > > bmAttributes 2 > > Transfer Type Bulk > > Synch Type None > > Usage Type Data > > wMaxPacketSize 0x0400 1x 1024 bytes > > bInterval 0 > > bMaxBurst 15 > > Interface Descriptor: > > bLength 9 > > bDescriptorType 4 > > bInterfaceNumber 0 > > bAlternateSetting 1 > > bNumEndpoints 4 > > bInterfaceClass 8 Mass Storage > > bInterfaceSubClass 6 SCSI > > bInterfaceProtocol 98 > > iInterface 0 > > Endpoint Descriptor: > > bLength 7 > > bDescriptorType 5 > > bEndpointAddress 0x81 EP 1 IN > > bmAttributes 2 > > Transfer Type Bulk > > Synch Type None > > Usage Type Data > > wMaxPacketSize 0x0400 1x 1024 bytes > > bInterval 0 > > bMaxBurst 15 > > MaxStreams 32 > > Data-in pipe (0x03) > > Endpoint Descriptor: > > bLength 7 > > bDescriptorType 5 > > bEndpointAddress 0x02 EP 2 OUT > > bmAttributes 2 > > Transfer Type Bulk > > Synch Type None > > Usage Type Data > > wMaxPacketSize 0x0400 1x 1024 bytes > > bInterval 0 > > bMaxBurst 15 > > MaxStreams 32 > > Data-out pipe (0x04) > > Endpoint Descriptor: > > bLength 7 > > bDescriptorType 5 > > bEndpointAddress 0x83 EP 3 IN > > bmAttributes 2 > > Transfer Type Bulk > > Synch Type None > > Usage Type Data > > wMaxPacketSize 0x0400 1x 1024 bytes > > bInterval 0 > > bMaxBurst 15 > > MaxStreams 32 > > Status pipe (0x02) > > Endpoint Descriptor: > > bLength 7 > > bDescriptorType 5 > > bEndpointAddress 0x04 EP 4 OUT > > bmAttributes 2 > > Transfer Type Bulk > > Synch Type None > > Usage Type Data > > wMaxPacketSize 0x0400 1x 1024 bytes > > bInterval 0 > > bMaxBurst 0 > > Command pipe (0x01) > > What would cause the missing interface descriptor? Looking at > unusual_uas.h, I can see this device's USB product id listed with some > quirks, but if my understanding is correct, it should still work, and > given the presence of the exact ID, I imagine that this device is indeed > supported by the current kernel, but I don't understand why it's not > working as it should. Is this a hardware issue with the JMS567-based > enclosure, or is it a kernel issue? > > > [1] http://www.jmicron.com/PDF/brief/jms567.pdf The problem is caused by the firwmware in the enclosure. The UAS alternate setting was not included. Perhaps it wasn't working correctly, or perhaps it was just left out by mistake. Alan Stern -- 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