From owner-freebsd-arm@FreeBSD.ORG Thu Jun 27 00:53:26 2013 Return-Path: Delivered-To: arm@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id CFC55DCE; Thu, 27 Jun 2013 00:53:26 +0000 (UTC) (envelope-from gonzo@id.bluezbox.com) Received: from id.bluezbox.com (id.bluezbox.com [88.198.91.248]) by mx1.freebsd.org (Postfix) with ESMTP id 50F1419EF; Thu, 27 Jun 2013 00:53:25 +0000 (UTC) Received: from [140.242.210.2] (helo=[192.168.2.197]) by id.bluezbox.com with esmtpsa (TLSv1:AES128-SHA:128) (Exim 4.77 (FreeBSD)) (envelope-from ) id 1Us0Sg-0004Dn-Ol; Wed, 26 Jun 2013 17:53:24 -0700 Content-Type: text/plain; charset=iso-8859-1 Mime-Version: 1.0 (Mac OS X Mail 6.3 \(1503\)) Subject: Re: Beaglebone USB driver (Mentor Graphics OTG) From: Oleksandr Tymoshenko In-Reply-To: <51611A7B.2010105@bitfrost.no> Date: Wed, 26 Jun 2013 17:53:20 -0700 Content-Transfer-Encoding: quoted-printable Message-Id: <0927BB4C-6917-408D-B102-AB98F72314B6@bluezbox.com> References: <51608AA4.2020804@bluezbox.com> <51611A7B.2010105@bitfrost.no> To: Hans Petter Selasky X-Mailer: Apple Mail (2.1503) Sender: gonzo@id.bluezbox.com X-Spam-Level: -- X-Spam-Report: Spam detection software, running on the system "id.bluezbox.com", has identified this incoming email as possible spam. The original message has been attached to this so you can view it (if it isn't spam) or label similar future email. If you have any questions, see The administrator of that system for details. Content preview: On 2013-04-07, at 12:04 AM, Hans Petter Selasky wrote: > On 04/06/13 22:50, Oleksandr Tymoshenko wrote: >> Hello, >> >> This is first iteration of Host Mode support for Mentor Graphics >> OTG USB controller. I tested it by building kernel with USB memory >> stick mounted as /usr/obj, resulting kernel was bootable and worked fine. >> I reused some ideas (mostly for channel-management) from >> DWT OTG driver. >> >> Some pieces are still missing: >> - Support for SPLIT transactions, I don not have high speed hub >> right now to test it, but implementing it should be really >> straighforward. >> - Isochronous transfers. I do not have hardware to test this. Does >> anybody have any suggestion about simple use case? >> - Control Data OUT transaction >> - Wrapper for atmel HW has not ben synced with new core logic requirements >> yet >> >> Please review and test. I tested it only with gcc-built kernel/world. >> Now when >> first iteration is finished I'm going to update all my boards to new >> world order >> (clang/EABI) and re-test this stuff. >> >> Patch: >> http://people.freebsd.org/~gonzo/arm/patches/beaglebone-musb.diff > > Hi, > > Looks like you've got the grasp of the USB controller stuff :-) > > Some comments: > > 1) Use DPRINTFN(-1, ...) instead of printf() for all printf() that are not part of boot dmesg. > > + break; > + default: > + td->transfer_type = 0; > + printf("Invalid USB speed: %d\n", speed); > + break; > + } > > > 2) You should implement if HOST mode, support for SUSPEND and RESUME. See EHCI driver. Basically what you need is: > > a) USB transfers are stopped/paused. I know there is a hack you need if the host transfer cancel hangs, and that is to write a dummy device address and wait for the USB transfer to error out after 250 us max. > > b) switch on USB suspend signalling. > > > At resume: > > c) do resume signalling, similar to EHCI/UHCI I think. > > d) switch on channel tokens. > > case UHF_PORT_SUSPEND: > + if (sc->sc_mode == MUSB2_HOST_MODE) > + printf("TODO: Set UHF_PORT_SUSPEND\n"); > + break; > > > > 3) Make sure that channels are not [...] Content analysis details: (-2.9 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP 0.0 URIBL_BLOCKED ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [URIs: bitfrost.no] -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] Cc: arm@freebsd.org, usb@freebsd.org X-BeenThere: freebsd-arm@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Porting FreeBSD to the StrongARM Processor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 27 Jun 2013 00:53:26 -0000 On 2013-04-07, at 12:04 AM, Hans Petter Selasky wrote: > On 04/06/13 22:50, Oleksandr Tymoshenko wrote: >> Hello, >>=20 >> This is first iteration of Host Mode support for Mentor Graphics >> OTG USB controller. I tested it by building kernel with USB memory >> stick mounted as /usr/obj, resulting kernel was bootable and worked = fine. >> I reused some ideas (mostly for channel-management) from >> DWT OTG driver. >>=20 >> Some pieces are still missing: >> - Support for SPLIT transactions, I don not have high speed hub >> right now to test it, but implementing it should be really >> straighforward. >> - Isochronous transfers. I do not have hardware to test this. Does >> anybody have any suggestion about simple use case? >> - Control Data OUT transaction >> - Wrapper for atmel HW has not ben synced with new core logic = requirements >> yet >>=20 >> Please review and test. I tested it only with gcc-built kernel/world. >> Now when >> first iteration is finished I'm going to update all my boards to new >> world order >> (clang/EABI) and re-test this stuff. >>=20 >> Patch: >> http://people.freebsd.org/~gonzo/arm/patches/beaglebone-musb.diff >=20 > Hi, >=20 > Looks like you've got the grasp of the USB controller stuff :-) >=20 > Some comments: >=20 > 1) Use DPRINTFN(-1, ...) instead of printf() for all printf() that are = not part of boot dmesg. >=20 > + break; > + default: > + td->transfer_type =3D 0; > + printf("Invalid USB speed: %d\n", = speed); > + break; > + } >=20 >=20 > 2) You should implement if HOST mode, support for SUSPEND and RESUME. = See EHCI driver. Basically what you need is: >=20 > a) USB transfers are stopped/paused. I know there is a hack you need = if the host transfer cancel hangs, and that is to write a dummy device = address and wait for the USB transfer to error out after 250 us max. >=20 > b) switch on USB suspend signalling. >=20 >=20 > At resume: >=20 > c) do resume signalling, similar to EHCI/UHCI I think. >=20 > d) switch on channel tokens. >=20 > case UHF_PORT_SUSPEND: > + if (sc->sc_mode =3D=3D MUSB2_HOST_MODE) > + printf("TODO: Set UHF_PORT_SUSPEND\n"); > + break; >=20 >=20 >=20 > 3) Make sure that channels are not generating tokens if they are = aborted / cancelled / timedout. This can not be verified using a USB = mass storage device. Verify this by connecting a USB serial adapter. Try = to open/close /dev/cuaU0. Make sure it does not loose any bytes and that = channel cancel does not hang forever. Thanks for review. Took me quite some time to get back=20 to the driver but here is updated version that addresses some=20 of the issues you've mentioned: = http://people.freebsd.org/~gonzo/arm/patches/beaglebone-usb-20130626.diff It fixes several bugs, adds proper SPLIT transactions support and=20 suspend/resume signalling. I tested it with urtwn-based WiFi chip, mass storage device, USB keyboard connected directly and using=20 high-speed hub. Suspend/resume is not 100% complete though. I can use USB serial=20 port adapter if it's suspended/resumed unconnected. But it stuck if I do=20= the test while connected. Is it the right way to test it?=20 On the related note: can somebody suggest budget USB protocol analyzer with support for high-speed bus?=