# USB 2.0 hdd only running at Full Speed instead of High Speed

## Tuinslak

Hi,

I've received a (cheap, desktop) 1 TB external Verbatim HDD (with a Samsung disk in it). 

On Windows, the drive is working at "High-Speed", and thus using the USB 2.0 interface.

The disk is now connected to a server (from 2004-ish), which *should* support USB 2.0 (as I don't have the manual, 2nd hand system, nor the mobo version, I cannot really find out).

The disk is formatted using ext4, but I didn't change the partition system to Linux, and left it to NTFS (the way it was):

```
   Device Boot      Start         End      Blocks   Id  System

/dev/sda1               1      121602   976762552+   7  HPFS/NTFS
```

Yet, when running hdparm tests:

```
# hdparm -tT /dev/sda

/dev/sda:

 Timing cached reads:     2 MB in  2.02 seconds = 1011.71 kB/sec

 Timing buffered disk reads:    4 MB in  4.06 seconds = 1009.77 kB/sec
```

Which means it has a limit of 1.5ish mb/s, and is thus Full Speed instead of High Speed.

```
# zcat /proc/config.gz | grep HCI

CONFIG_USB_ARCH_HAS_OHCI=y

CONFIG_USB_ARCH_HAS_EHCI=y

CONFIG_USB_EHCI_HCD=y

CONFIG_USB_EHCI_ROOT_HUB_TT=y

# CONFIG_USB_EHCI_TT_NEWSCHED is not set

CONFIG_USB_OHCI_HCD=y

# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set

# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set

CONFIG_USB_OHCI_LITTLE_ENDIAN=y

# CONFIG_USB_UHCI_HCD is not set

# CONFIG_USB_WHCI_HCD is not set

CONFIG_PROVIDE_OHCI1394_DMA_INIT=y

# uname -a

Linux Sauron 2.6.29-gentoo-r5 #5 SMP Tue Jun 9 18:13:54 CEST 2009 x86_64 AMD Opteron(tm) Processor 248 AuthenticAMD GNU/Linux
```

USB HDD support is also builtin. 

lsusb is not giving a lot of useful information;

```
# lsusb 

Bus 002 Device 002: ID 18a5:0216  

Bus 002 Device 001: ID 1d6b:0001  

Bus 001 Device 001: ID 1d6b:0001 
```

and lspci:

```
# lspci | grep USB

01:00.0 USB Controller: Advanced Micro Devices [AMD] AMD-8111 USB (rev 0b)

01:00.1 USB Controller: Advanced Micro Devices [AMD] AMD-8111 USB (rev 0b)
```

part of dmesg autoput:

```
# dmesg | grep USB

[    2.568263] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver

[    2.568654] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver

[    2.569870] ohci_hcd 0000:01:00.0: new USB bus registered, assigned bus number 1

[    2.570450] ohci_hcd 0000:01:00.0: supports USB remote wakeup

[    2.623120] usb usb1: New USB device found, idVendor=1d6b, idProduct=0001

[    2.623440] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1

[    2.625409] hub 1-0:1.0: USB hub found

[    2.627051] ohci_hcd 0000:01:00.1: new USB bus registered, assigned bus number 2

[    2.627620] ohci_hcd 0000:01:00.1: supports USB remote wakeup

[    2.680094] usb usb2: New USB device found, idVendor=1d6b, idProduct=0001

[    2.680415] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1

[    2.682373] hub 2-0:1.0: USB hub found

[    2.683801] Initializing USB Mass Storage driver...

[    2.684517] USB Mass Storage support registered.

[    2.709516] usbhid: v2.6:USB HID core driver

[    3.039023] usb 2-1: new full speed USB device using ohci_hcd and address 2

[    3.248953] usb 2-1: New USB device found, idVendor=18a5, idProduct=0216

[    3.249285] usb 2-1: New USB device strings: Mfr=2, Product=3, SerialNumber=1

[    3.249608] usb 2-1: Product: Desktop USB Drive

[    3.259109] scsi0 : SCSI emulation for USB Mass Storage devices
```

You can see: new full speed USB device, so using USB 1.1 instead of 2.0

- Is there any way to find out whether my mother board supports USB 2.0

- Any idea why it's using OHCI instead of EHCI?

I've tried turning to disk on and off and remounting; tried rebooting, with the disk already plugged in and turned on (as a friend said he had similar problems (on Windows), when the disk was not turned on at boot); and I tried both USB interfaces. Without any different results.

Thanks,

Tuinslak

----------

## NeddySeagoon

Tuinslak,

Please post /proc/bus/usb/devices and look it yourself with usbview.

I suspect you are mixing USB1 and USB2 devices on the same root bub, which makes the USB2 devices faill back to USB1 speeds.

----------

## Tuinslak

```
# cat /proc/bus/usb/devices 

T:  Bus=02 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=12  MxCh= 3

B:  Alloc=  0/900 us ( 0%), #Int=  0, #Iso=  0

D:  Ver= 1.10 Cls=09(hub  ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1

P:  Vendor=1d6b ProdID=0001 Rev= 2.06

S:  Manufacturer=Linux 2.6.29-gentoo-r5 ohci_hcd

S:  Product=OHCI Host Controller

S:  SerialNumber=0000:01:00.1

C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA

I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub

E:  Ad=81(I) Atr=03(Int.) MxPS=   2 Ivl=255ms

T:  Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=12  MxCh= 0

D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1

P:  Vendor=18a5 ProdID=0216 Rev= 1.12

S:  Manufacturer=Verbatim

S:  Product=Desktop USB Drive

S:  SerialNumber=16050009b9df

C:* #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr=  2mA

I:* If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage

E:  Ad=81(I) Atr=02(Bulk) MxPS=  64 Ivl=0ms

E:  Ad=02(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms

T:  Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=12  MxCh= 3

B:  Alloc=  0/900 us ( 0%), #Int=  0, #Iso=  0

D:  Ver= 1.10 Cls=09(hub  ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1

P:  Vendor=1d6b ProdID=0001 Rev= 2.06

S:  Manufacturer=Linux 2.6.29-gentoo-r5 ohci_hcd

S:  Product=OHCI Host Controller

S:  SerialNumber=0000:01:00.0

C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA

I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub

E:  Ad=81(I) Atr=03(Int.) MxPS=   2 Ivl=255ms
```

To install usbview I seem to need to install a bunch of X apps? There's no X running on that PC.

----------

## NeddySeagoon

Tuinslak,

You can move /proc/bus/usb/devices to a text file on another PC and use usbview to look at the file there.

Thats what I have done with your post.

It shows that you have two OHCI root hubs and no EHCI root hubs. You only connected device is the USB hard drive.

This suggests that the option 

```
CONFIG_USB_EHCI_HCD=y 
```

is not on in your running kernel.

What does 

```
uname -a
```

show?

The date/time is the date and time yor running kernel was built. Does that look right ?

Although 

```
[    2.568263] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver 
```

shows the driver loaded.

What is

```
 [    2.682373] hub 2-0:1.0: USB hub found
```

 Its not listed in /proc/usb/devices

The next step is to make your kernel with EHCI_HCD and OHCI_HCD  support as modules so they can be manipulated when the sysyem is up. A few years ago on some hardware, load order was important to get the desired results.

Rebuilf yur kernel amd play with modprob -r and modprobe to get things working.

But ... further digging on google found this AMD document which describes your AMD-8111, says:-

```
9    USB 2.0 High-Speed Traffic is Not Supported

Description

The internal USB controllers do not support USB 2.0 high-speed traffic in some revisions of the

AMD-8111 HyperTransport I/O hub.

Potential Effect on System

Devices that support only USB 2.0 high-speed traffic cannot connect to the I/O hub.

Suggested Workaround

Use an external USB 2.0 controller to support USB 2.0 functionality.

Fix Planned

No

```

 In effect, its supposed to work at USB2 but is acknowledged not to in some silicon revisions.

----------

## dmpogo

do lsusb

----------

## Tuinslak

 *dmpogo wrote:*   

> do lsusb

 

I did, check first post

@NeddySeagoon

Ok, I'll rebuild as module, and check it out later today. 

```
$ uname -a

Linux Sauron 2.6.29-gentoo-r5 #5 SMP Tue Jun 9 18:13:54 CEST 2009 x86_64 AMD Opteron(tm) Processor 248 AuthenticAMD GNU/Linux
```

This kernel has all the options from config.gz built in. I didn't run any make menuconfig after I made the kernel.

There's indeed only one usb device in it. The different messages in dmesg might be because I tried to disconnect and reconnect the hdd?

Thanks for helping

----------

## Tuinslak

When recompiling my kernel I did see this message:

```
  CC      drivers/usb/host/ehci-hcd.o

In file included from drivers/usb/host/ehci-hcd.c:257:

drivers/usb/host/ehci-q.c: In function 'qh_completions':

drivers/usb/host/ehci-q.c:351: warning: format '%d' expects type 'int', but argument 4 has type 'size_t'

drivers/usb/host/ehci-q.c:351: warning: format '%d' expects type 'int', but argument 5 has type 'size_t'

  LD      drivers/usb/host/built-in.o

  LD      drivers/usb/built-in.o

  LD      drivers/built-in.o
```

Any meaning?

----------

## Tuinslak

I put ehci as built in, and ohci as module

=> was enable to mount /dev/sda1 with only ehci enabled

When modprobe'ing ohci, it worked fine, and I could mount it... :/

----------

## doctork

In your initial post, you lsusb output indicates both buses are USB1.1 (1d6b:0001)

```

# lsusb

Bus 002 Device 002: ID 18a5:0216 

Bus 002 Device 001: ID 1d6b:0001 

Bus 001 Device 001: ID 1d6b:0001
```

Did you rerun lsusb before you loaded the ohci module on your last test?  I also find it curious that you only see the hex codes from lsusb,   For example, on one of my systems I see:

```
/usr/sbin/lsusb

Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Bus 001 Device 003: ID 0d62:001c Darfon Electronics Corp.

Bus 001 Device 002: ID 051d:0002 American Power Conversion Uninterruptible Power Supply

Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
```

I guess that might change if you run /usr/sbin/update-usbids.

--

doc

----------

## Tuinslak

Did what you said:

```
Sauron cache #  /usr/sbin/update-usbids

--2009-06-11 20:09:33--  http://www.linux-usb.org/usb.ids

Resolving www.linux-usb.org... 216.34.181.97

Connecting to www.linux-usb.org|216.34.181.97|:80... connected.

HTTP request sent, awaiting response... 200 OK

Length: 364479 (356K) [text/plain]

Saving to: `/usr/share/misc/usb.ids.new'

100%[===========================================================================================>] 364,479      190K/s   in 1.9s

2009-06-11 20:09:36 (190 KB/s) - `/usr/share/misc/usb.ids.new' saved [364479/364479]

Done.

Sauron cache # lsusb

Bus 002 Device 002: ID 18a5:0216

Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
```

I also did:

modprobe -r ohci_hcd

tried to remount (mount: special device /dev/sda1 does not exist)

and lsusb doesn't return anything now:

```
Sauron cache # lsusb

Sauron cache #
```

And... I get output again, after loading the module.

```
Sauron ~ # modprobe ohci_hcd

Sauron ~ # lsmod

Module                  Size  Used by

ohci_hcd               36732  0

Sauron ~ # lsusb

Bus 002 Device 003: ID 18a5:0216

Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
```

So, the hardware only supports USB1.1? That bug as NeddySeagoon said?

----------

## doctork

Sorry, I don't have any further suggestions.  Neddy's earlier comment seems to be the case -- your board simply doesn't support USB2.0 with the linux drivers.

BTW, "dmidecode" might shed some further light on the motherboard.

--

doc

----------

## NeddySeagoon

doctork,

It looks like a bug in the silicon. It may not support USB2 with any drivers.

The suggested work around is a plug in card.

----------

## Tuinslak

 *NeddySeagoon wrote:*   

> The suggested work around is a plug in card.

 

The problem is that it's a 1u case, and the pci riser card is already used by a fibre card.

But thanks for all the help.

----------

