Date: Mon, 30 Mar 2015 11:19:44 +0200 From: Hans Petter Selasky <hps@selasky.org> To: Kohji Okuno <okuno.kohji@jp.panasonic.com>, freebsd-usb@freebsd.org Subject: Re: Why do we try to enter U1 mode in SuperSpeed? Message-ID: <55191530.3030804@selasky.org> In-Reply-To: <55190F3C.4070901@selasky.org> References: <20150330.135402.19625324788487516.okuno.kohji@jp.panasonic.com> <55190F3C.4070901@selasky.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On 03/30/15 10:54, Hans Petter Selasky wrote: > On 03/30/15 06:54, Kohji Okuno wrote: >> Hi HPS >> >> I have a question. >> Why do we try to enter U1 mode in SuperSpeed? >> This is the following codes(***) >> >> In our proprietary environmen(This has a xHCI controller), when a >> device accept U1, the device may be strange status. Acutually, when I >> tried to connect "Western Digital My Passport Essential 320GB >> (P/N:WDBACY3200ABK-00)", this HDD was not recognized correctly. >> But, in PC environment, this HDD was recognized correctly. >> >> Regards, >> Kohji Okuno >> >> (***) >> usb_hub.c: >> 793 if (speed == USB_SPEED_SUPER) { >> 794 err = usbd_req_set_hub_u1_timeout(udev, NULL, >> 795 portno, 128 - (2 * udev->depth)); >> 796 if (err) { >> 797 DPRINTFN(0, "port %d U1 timeout " >> 798 "failed, error=%s\n", >> 799 portno, usbd_errstr(err)); >> 800 } >> 801 err = usbd_req_set_hub_u2_timeout(udev, NULL, >> 802 portno, 128 - (2 * udev->depth)); >> 803 if (err) { >> 804 DPRINTFN(0, "port %d U2 timeout " >> 805 "failed, error=%s\n", >> 806 portno, usbd_errstr(err)); >> 807 } >> 808 } > > Hi, > > We are not trying to enter U1 mode, we only setup the U1 and U2 > timeouts. Is there a flag in the USB descriptors that say this is not > supported and that we need to set some other value? I thought all > superspeed devices had to support these features and that switching in > and out of the sleep modes was done by the XHCI hardware. > > --HPS > Hi, Looking at the USB 3.0 specification, I think there might be a typo there: In table 10-13 - "U2 timeout value encoding", it says that 0xFE corresponds to 65024 ms, but I think it should be 65024 _us_ ! Try programming values 0xFF for both U1 and U2. Does the device enumerate then? Maybe it only doesn't support sleep modes during enumeration and that after set configuration it works? --HPS
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?55191530.3030804>