Bug 12707

Summary: some USB2.0 devices pluged on USB2.0 ports are managed at low speed
Product: Drivers Reporter: Thierry Vignaud (thierry.vignaud)
Component: USBAssignee: Greg Kroah-Hartman (greg)
Status: RESOLVED INVALID    
Severity: high CC: alan, obones, s.witzel, tjcwtjcw
Priority: P1    
Hardware: All   
OS: Linux   
Kernel Version: 2.6.30-rcX (2.6.22 -) Subsystem:
Regression: No Bisected commit-id:
Attachments: dmesg output

Description Thierry Vignaud 2009-02-15 04:01:36 UTC
Latest working kernel version:
Earliest failing kernel version: 2.6.1x
Distribution: Mandriva Linux
Hardware Environment: x86 (PIII@733, PIV@1.8, ...=
Software Environment:
Problem Description:

Some USB2.0 devices are dead slow b/c the kernel thinks they're USB1.0.
Looking at dmesg, one can spot the following (note the last line):

Intel ICH 0000:00:02.7: PCI INT C -> GSI 18 (level, low) -> IRQ 18
ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
input: PC Speaker as /class/input/input3
ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
Warning! ehci_hcd should always be loaded before uhci_hcd and ohci_hc

This results in the following when plugging an USB hard drive:

Jan 10 12:27:49 localhost klogd: usb 1-2: new full speed USB device using
ohci_hcd and address 5
Jan 10 12:27:49 localhost klogd: usb 1-2: not running at top speed; connect to
a high speed hub
Jan 10 12:27:49 localhost klogd: usb 1-2: configuration #1 chosen from 1 choice
Jan 10 12:27:49 localhost klogd: usb 1-2: New USB device found, idVendor=059f,
idProduct=0341
Jan 10 12:27:49 localhost klogd: usb 1-2: New USB device strings: Mfr=1,
Product=2, SerialNumber=3
Jan 10 12:27:49 localhost klogd: usb 1-2: Product: LaCie Hard Drive USB
Jan 10 12:27:49 localhost klogd: usb 1-2: Manufacturer: LaCie
Jan 10 12:27:49 localhost klogd: usb 1-2: SerialNumber: 10000E0008E76DE2

Instead of:

Jan 10 18:06:36 localhost klogd: usb 1-3: new high speed USB device using
ehci_hcd and address 3
Jan 10 18:06:36 localhost klogd: usb 1-3: configuration #1 chosen from 1 choice
Jan 10 18:06:36 localhost klogd: usb 1-3: New USB device found, idVendor=059f,
idProduct=0341
Jan 10 18:06:36 localhost klogd: usb 1-3: New USB device strings: Mfr=1,
Product=2, SerialNumber=3
Jan 10 18:06:36 localhost klogd: usb 1-3: Product: LaCie Hard Drive USB
Jan 10 18:06:36 localhost klogd: usb 1-3: Manufacturer: LaCie
Jan 10 18:06:36 localhost klogd: usb 1-3: SerialNumber: 10000E0008E76DE2

Using the same kernel and the _same_ USB port!!
Some USB discs never cause this to happen whereas some often cause this to happen.
Sometimes, rmmod ohci then repluging the usb hard drive on the same USB port result results in it being managed by ehci, thus having a full 21Mb/s instead of 1Mb/sec.

I'm guessing this is because (drivers/usb/host/Kconfig):

          EHCI controllers are packaged with "companion" host controllers (OHCI
          or UHCI) to handle USB 1.1 devices connected to root hub ports. Ports
          will connect to EHCI if the device is high speed, otherwise they
          connect to a companion controller.

With modularized modules, udev doesn't enforce loading ehci before ohci/uhci.
It looks like when ohci is loaded first, the kernel sometimes do the wrong
thing.

But this wild guess doesn't explain why some USB2.0 devices are always connected in USB2 mode whereas other are in USB1 mode...

Steps to reproduce:
Comment 1 Greg Kroah-Hartman 2009-02-15 10:49:35 UTC
On Sun, Feb 15, 2009 at 04:01:37AM -0800, bugme-daemon@bugzilla.kernel.org wrote:
> Some USB2.0 devices are dead slow b/c the kernel thinks they're USB1.0.
> Looking at dmesg, one can spot the following (note the last line):
> 
> Intel ICH 0000:00:02.7: PCI INT C -> GSI 18 (level, low) -> IRQ 18
> ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
> input: PC Speaker as /class/input/input3
> ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
> Warning! ehci_hcd should always be loaded before uhci_hcd and ohci_hc

Please follow the warning that the kernel is giving you and load
ehci-hcd before uhci-hcd and ohci-hcd, that should solve this problem.

> With modularized modules, udev doesn't enforce loading ehci before ohci/uhci.
> It looks like when ohci is loaded first, the kernel sometimes do the wrong
> thing.

Put a line in your /etc/modprobe.conf to load ehci-hcd before the other
two and udev will do so automatically.
Comment 2 Thierry Vignaud 2009-02-24 02:08:24 UTC
Created attachment 20348 [details]
dmesg output
Comment 3 Thierry Vignaud 2009-02-24 02:11:11 UTC
This doesn't help.
I had already previously tried building ehci as core module and the like.

In the above 2.6.29-rc5 dmesg output, one can see that echci is loaded first.
However, the first time the USB2 disc is plugged, it's handled as USB1:
usb 2-2: new full speed USB device using ohci_hcd and address 2
usb 2-2: not running at top speed; connect to a high speed hub
usb 2-2: New USB device found, idVendor=059f, idProduct=0341

The second time, it's handled as USB2:
usb 1-3: new high speed USB device using ehci_hcd and address 109
usb 1-3: New USB device found, idVendor=059f, idProduct=0341
usb 1-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3

Using the same damn physical port...
Comment 4 Thierry Vignaud 2009-04-21 16:24:47 UTC
Still valid.
It still sometimes randomly connect as USB1 on the same physical port.
As I said, a kernel with ehci in core will just not see it in that case until ohci_hcd is loaded (with tons of "hub 1-0:1.0: unable to enumerate USB device on port 2" messages)
Comment 5 Stefan W 2009-11-01 18:00:52 UTC
See also

https://bugs.launchpad.net/ubuntu/+bug/177235
Comment 6 Chris Ward 2010-02-04 11:03:09 UTC
Here is what looks like the same problem on an OpenSuse 11.2 (2.6.31.8-0.1-desktop x86_64 Intel Atom) system. This shows a DVD writer being correctly detected as USB 2.0, and a hard disk being wrongly detected as USB 1.1 .

Both devices really support USB 2.0, and both are connected to 'motherboard' USB sockets in the obvious way.

[    2.144566] device-mapper: ioctl: 4.15.0-ioctl (2009-04-01) initialised: dm-devel@redhat.com
[    2.178233] udev: starting version 146
[    2.341079] usb 1-1: new high speed USB device using ehci_hcd and address 3
[    2.538064] usb 1-1: device descriptor read/64, error -71
[    2.837064] usb 1-1: device descriptor read/64, error -71
[    3.040070] usb 1-1: new high speed USB device using ehci_hcd and address 4
[    3.505045] usb 1-1: device not accepting address 4, error -71
[    3.528068] md: linear personality registered for level -1
[    3.606049] usb 1-1: new high speed USB device using ehci_hcd and address 5
[    3.837918] PM: Marking nosave pages: 000000000009f000 - 0000000000100000
[    3.837935] PM: Basic memory bitmaps created
[    3.901229] PM: Basic memory bitmaps freed
[    3.925385] PM: Starting manual resume from disk
[    3.925395] PM: Resume from partition 253:3
[    3.925400] PM: Checking hibernation image.
[    3.925645] PM: Resume from disk failed.
[    4.068040] usb 1-1: device not accepting address 5, error -71
[    4.068194] hub 1-0:1.0: unable to enumerate USB device on port 1
[    4.091721] EXT4-fs (dm-1): barriers enabled
[    4.092065] kjournald2 starting: pid 327, dev dm-1:8, commit interval 5 seconds
[    4.092588] EXT4-fs (dm-1): internal journal on dm-1:8
[    4.092598] EXT4-fs (dm-1): delayed allocation enabled
[    4.092606] EXT4-fs: file extents enabled
[    4.097812] EXT4-fs: mballoc enabled
[    4.097856] EXT4-fs (dm-1): mounted filesystem with ordered data mode
[    4.176062] usb 1-3: new high speed USB device using ehci_hcd and address 6
[    4.311090] usb 1-3: New USB device found, idVendor=152e, idProduct=2507
[    4.311106] usb 1-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[    4.311119] usb 1-3: Product: Super Multi Rewriter
[    4.311128] usb 1-3: Manufacturer: HLDS Inc.
[    4.311138] usb 1-3: SerialNumber: P01061024184203
[    4.311459] usb 1-3: configuration #1 chosen from 1 choice
[    4.312046] scsi6 : SCSI emulation for USB Mass Storage devices
[    4.312326] usb-storage: device found at 6
[    4.312335] usb-storage: waiting for device to settle before scanning
[    4.573052] usb 2-1: new full speed USB device using ohci_hcd and address 2
[    4.766405] usb 2-1: not running at top speed; connect to a high speed hub
[    4.867436] usb 2-1: New USB device found, idVendor=07ab, idProduct=fcfe
[    4.867447] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[    4.867455] usb 2-1: Product: Freecom Hard Drive
[    4.867461] usb 2-1: Manufacturer: Freecom
[    4.867466] usb 2-1: SerialNumber: 01BC0E5601300
[    4.867708] usb 2-1: configuration #1 chosen from 1 choice
[    4.870744] scsi7 : SCSI emulation for USB Mass Storage devices
[    4.870970] usb-storage: device found at 2
[    4.870978] usb-storage: waiting for device to settle before scanning
[    5.348951] scsi 6:0:0:0: CD-ROM            HL-DT-ST DVDRAM GSA-E10N  JE07 PQ: 0 ANSI: 0
[    5.350223] usb-storage: device scan complete
[    5.909618] scsi 7:0:0:0: Direct-Access     SAMSUNG  HD400LD          WQ10 PQ: 0 ANSI: 0
[    5.920646] sd 7:0:0:0: [sdb] 781422768 512-byte logical blocks: (400 GB/372 GiB)
Comment 7 Olivier Sannier 2010-03-26 08:43:21 UTC
Hello,

I'm also seeing the same warning on a Mandriva 2010.0 with all the latest updates on an x64 system. Kernel id is 2.6.31.12-desktop-2mnb
Comment 8 Greg Kroah-Hartman 2012-02-22 21:00:26 UTC
All USB bugs should be sent to the linux-usb@vger.kernel.org mailing 
list, and not entered into bugzilla.  Please bring this issue up there,
if it is still a problem in the latest kernel release.