]> git.baikalelectronics.ru Git - kernel.git/commit
USB: fix bug of device descriptor got from superspeed device
authorElric Fu <elricfu1@gmail.com>
Mon, 26 Mar 2012 13:16:02 +0000 (21:16 +0800)
committerSarah Sharp <sarah.a.sharp@linux.intel.com>
Wed, 11 Apr 2012 15:28:58 +0000 (08:28 -0700)
commita2ffae4f2aed16563b4a91bf43f8b1a8c95c707f
treede495a5bbd9f0399f3673ee9b00d69543a72630c
parent06b0e706703b384a9bd33b9ccac435268cf1faad
USB: fix bug of device descriptor got from superspeed device

When the Seagate Goflex USB3.0 device is attached to VIA xHCI
host, sometimes the device will downgrade mode to high speed.
By the USB analyzer, I found the device finished the link
training process and worked at superspeed mode. But the device
descriptor got from the device shows the device works at 2.1.
It is very strange and seems like the device controller of
Seagate Goflex has a little confusion.

The first 8 bytes of device descriptor should be:
12 01 00 03 00 00 00 09

But the first 8 bytes of wrong device descriptor are:
12 01 10 02 00 00 00 40

The wrong device descriptor caused the initialization of mass
storage failed. After a while, the device would be recognized
as a high speed device and works fine.

This patch will warm reset the device to fix the issue after
finding the bcdUSB field of device descriptor isn't 0x0300
but the speed mode of device is superspeed.

This patch should be backported to kernels as old as 3.2, or ones that
contain the commit 6c6e2da66ed7c8e467171e47333afcea93f5b0ac "usbcore:
refine warm reset logic".

Signed-off-by: Elric Fu <elricfu1@gmail.com>
Acked-by: Andiry Xu <Andiry.Xu@amd.com>
Acked-by: Sergei Shtylyov <sshtylyov@mvista.com>
Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
Cc: stable@vger.kernel.org
drivers/usb/core/hub.c