Comment 25 for bug 177235

Revision history for this message
Miroslav (dzundam-deactivatedaccount) wrote :

I guess it's the kernel problem with correct USB speed recognition,
because I have had this problem on different computers and linux versions.
My current ver. is Ubuntu 64bit 9.04.

Good example taken from my kern.log, notice first two lines:
--------------------------------------------------------------------------------------------------------------------------------------------------------
Jun 15 11:13:48 mirko2-l64 kernel: [81040.032022] usb 2-1: new full speed USB device using ohci_hcd and address 2
Jun 15 11:13:48 mirko2-l64 kernel: [81040.203039] usb 2-1: not running at top speed; connect to a high speed hub
Jun 15 11:13:48 mirko2-l64 kernel: [81040.215124] usb 2-1: configuration #1 chosen from 1 choice
--------------------------------------------------------------------------------------------------------------------------------------------------------

And few seconds later after device reconnecting (the same port and device), everything is ok:
---------------------------------------------------------------------------------------------------------------------------------------------------------
Jun 15 11:39:16 mirko2-l64 kernel: [82568.345018] usb 1-1: new high speed USB device using ehci_hcd and address 7
Jun 15 11:39:16 mirko2-l64 kernel: [82568.478023] usb 1-1: configuration #1 chosen from 1 choice
---------------------------------------------------------------------------------------------------------------------------------------------------------

I don't attach the rest of the kern.log, the device type is not important, because this happends with different
devices randomly. In my case there is 1-to-3 chance, that device will be recognised as USB 1.1 instead of 2.0.

The problem is probably in the (kernel_source)/drivers/usb/core/hub.c !!!

I'm not a programmer (only amateur who likes to solve problems ;-), so somebody take a look
and check that hub.c driver please.

Focus on:
------------

static void
check_highspeed (struct usb_hub *hub, struct usb_device *udev, int port1)
{
 struct usb_qualifier_descriptor *qual;
 int status;

 qual = kmalloc (sizeof *qual, GFP_KERNEL);
 if (qual == NULL)
  return;

 status = usb_get_descriptor (udev, USB_DT_DEVICE_QUALIFIER, 0,
   qual, sizeof *qual);
 if (status == sizeof *qual) {
  dev_info(&udev->dev, "not running at top speed; "
   "connect to a high speed hub\n");
  /* hub LEDs are probably harder to miss than syslog */
  if (hub->has_indicators) {
   hub->indicator[port1-1] = INDICATOR_GREEN_BLINK;
   schedule_delayed_work (&hub->leds, 0);
  }
 }
 kfree(qual);
}

You see, driver only prints the warning, and does nothing else!!!

I guess it should at least reset the device and try to connect the USB 2.0 device to
EHCI and not OHCI/UHCI (host hub)!