Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 2 Sep 2012 21:56:25 +0200
From:      Hans Petter Selasky <hselasky@c2i.net>
To:        Andrew Beam <andrew.beam@gmail.com>
Cc:        freebsd-usb@freebsd.org
Subject:   Re: external usb3 disk on usb2 port full spd only
Message-ID:  <201209022156.25632.hselasky@c2i.net>

next in thread | raw e-mail | index | archive | help
On Sunday 02 September 2012 21:35:57 Andrew Beam wrote:
> Hello,
> 
> > Do you have a XHCI controller on your computer which is capable of USB
> > 3.0 ?
> 
> No, i have only USB 2.0 port in my computer. HDD is 3.0 and 2.0
> compatible of course.
> 
> Under Ubuntu on same hardware, disk is connected as USB 2.0, spd
> profile HIGH / 480Mbit.
> Under FreeBSD, disk is connected as USB 1.1, spd profile FULL / 12Mbit
> only.
> 
> > This question you need to forward to the manufacturer of your drive!
> 
> I don't know what to ask them. It's FreeBSD problem i think.
> Question is: Is it posible force FreeBSD to use profile HIGH and
> connect HDD as USB 2.0 device?

Hi,

I cannot tell exactly why your device is not detected as HIGH speed. You will 
need to connect a USB analyzer to know the cause exactly. Please be aware that 
FreeBSD is complying to USB.org and not MS nor Linux. Does the manufacturer of 
your USB device put a certified USB.org logo on the product?

Back to what you're asking for:

The enumeration sequence works like this:

1) EHCI owns the port and tries High-Speed USB.
2) If a valid so-called CHIRP sequence is successful the EHCI software will 
select high speed USB. Else the EHCI ask the OHCI or UHCI to handle the FULL 
speed USB device.

Code is here: sys/dev/usb/controller/ehci.c

                case UHF_PORT_RESET:
                        DPRINTFN(6, "reset port %d\n", index);

#if 0 			/* ADD THIS COMMENT OUT TO FORCE ALL DEVICES HIGH SPEED: */
#ifdef USB_DEBUG
                        if (ehcinohighspeed) {
                                /*
                                 * Connect USB device to companion
                                 * controller.
                                 */
                                ehci_disown(sc, index, 1);
                                break;
                        }
#endif
                        if (EHCI_PS_IS_LOWSPEED(v) &&
                            (sc->sc_flags & EHCI_SCFLG_TT) == 0) {
                                /* Low speed device, give up ownership. */
                                ehci_disown(sc, index, 1);
                                break;
                        }
#endif			/* END */

--HPS



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201209022156.25632.hselasky>