From owner-freebsd-arm@FreeBSD.ORG Sun Jul 7 07:45:35 2013 Return-Path: Delivered-To: freebsd-arm@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 97F1740A for ; Sun, 7 Jul 2013 07:45:35 +0000 (UTC) (envelope-from hans.petter.selasky@bitfrost.no) Received: from mta.bitpro.no (mta.bitpro.no [92.42.64.202]) by mx1.freebsd.org (Postfix) with ESMTP id 03B26160A for ; Sun, 7 Jul 2013 07:45:34 +0000 (UTC) Received: from mail.lockless.no (mail.lockless.no [46.29.221.38]) by mta.bitpro.no (Postfix) with ESMTP id AEC8A7A170; Sun, 7 Jul 2013 09:26:57 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by mail.lockless.no (Postfix) with ESMTP id 97E728ED850; Sun, 7 Jul 2013 09:26:57 +0200 (CEST) X-Virus-Scanned: by amavisd-new-2.6.4 (20090625) (Debian) at lockless.no Received: from mail.lockless.no ([127.0.0.1]) by localhost (mail.lockless.no [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id VeLbhjdcaVqx; Sun, 7 Jul 2013 09:26:56 +0200 (CEST) Received: from mail.lockless.no (localhost [127.0.0.1]) by mail.lockless.no (Postfix) with ESMTP id F41178ED84F; Sun, 7 Jul 2013 09:26:55 +0200 (CEST) Subject: RE: USB Performance on Raspberry Pi From: =?utf-8?Q?Hans_Petter_Selasky?= To: =?utf-8?Q?Peter_Jeremy?= , =?utf-8?Q?Hans_Petter_Selasky?= , =?utf-8?Q?Oleksandr_Tymoshenko?= Date: Sun, 7 Jul 2013 09:26:55 +0200 Mime-Version: 1.0 In-Reply-To: <20130707031732.GS39302@server.rulingia.com> References: <20130707031732.GS39302@server.rulingia.com> X-Priority: 3 (Normal) X-Mailer: Zarafa 7.1.4-41394 Message-Id: Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Content-Filtered-By: Mailman/MimeDel 2.1.14 Cc: =?utf-8?Q?freebsd-arm=40freebsd=2Eorg?= 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: Sun, 07 Jul 2013 07:45:35 -0000 Hi,=0D=0A=0D=0AThe DWC OTG hardware DMA API for doing USB transfers is si= mply crap, custom made and non-standard compared to XHCI/UHCI/OHCI and EH= CI. I`ve chosen stability over throughput. Be glad the driver in the tree= works reliably for BULK/CONTROL/INTERRUPT transfer types and all USB spe= eds.=0D=0A=0D=0APing times are high because we use a 10ms timer to poll U= SB transfers. This is due to some design decisions made by the Synopsys g= uys, called a single shared fifo. Other chipset makers do this part compl= etely different.=0D=0A=0D=0AIf you look at the linux USB mailing list you= will see a lot of error reports regarding the DWC OTG and raspberry PI, = for example in-ability to use USB audio devices, which even under Linux's= DMA support require 8000 IRQ/s. The main reason we are getting low throu= ghput is because the internal bus of the ARM core they use in the RPi is = slow. Maybe there are some knobs to beef it up or adjust the clocks=3F=0D= =0A=0D=0A--HPS=0D=0A=20=0D=0A-----Original message-----=0D=0A> From:Peter= Jeremy >=0D=0A> Sent: Su= nday 7th July 2013 5:18=0D=0A> To: Hans Petter Selasky >=0D=0A> Cc: freebsd-arm@freebsd.org =20=0D=0A> Subject: USB Performance on Raspberry Pi= =0D=0A>=20=0D=0A> Hi Hans,=0D=0A>=20=0D=0A> USB performance on the Raspbe= rry Pi is rather lacking. This is important=0D=0A> because pretty much e= verything goes via USB. Do you have any suggestions=0D=0A> on how to fix= the bottlenecks=3F I suspect one is that FreeBSD is using=0D=0A> PIO, w= hereas Linux is using DMA.=0D=0A>=20=0D=0A> I've previously commented abo= ut the sawtooth pattern in ping times:=0D=0A> 64 bytes from 192.168.123.2= 31: icmp_seq=3D6 ttl=3D64 time=3D2.701 ms=0D=0A> 64 bytes from 192.168.12= 3.231: icmp_seq=3D7 ttl=3D64 time=3D1.465 ms=0D=0A> 64 bytes from 192.168= =2E123.231: icmp_seq=3D8 ttl=3D64 time=3D10.589 ms=0D=0A> 64 bytes from 1= 92.168.123.231: icmp_seq=3D9 ttl=3D64 time=3D9.688 ms=0D=0A> 64 bytes fro= m 192.168.123.231: icmp_seq=3D10 ttl=3D64 time=3D8.673 ms=0D=0A> 64 bytes= from 192.168.123.231: icmp_seq=3D11 ttl=3D64 time=3D7.330 ms=0D=0A> 64 b= ytes from 192.168.123.231: icmp_seq=3D12 ttl=3D64 time=3D6.857 ms=0D=0A> = 64 bytes from 192.168.123.231: icmp_seq=3D13 ttl=3D64 time=3D5.946 ms=0D=0A= > 64 bytes from 192.168.123.231: icmp_seq=3D14 ttl=3D64 time=3D3.955 ms=0D= =0A> 64 bytes from 192.168.123.231: icmp_seq=3D15 ttl=3D64 time=3D2.079 m= s=0D=0A> 64 bytes from 192.168.123.231: icmp_seq=3D16 ttl=3D64 time=3D1.0= 72 ms=0D=0A>=20=0D=0A> Whereas pinging a Linux RPi gives:=0D=0A> round-tr= ip min/avg/max/stddev =3D 0.276/0.373/0.455/0.049 ms=0D=0A>=20=0D=0A> yon= gari@ gave me same patches for the SMSC NIC but they didn't have=0D=0A> a= ny noticable effect.=0D=0A>=20=0D=0A> And the network throughput is also = well below what Linux can achieve.=0D=0A>=20=0D=0A> If I connect an exter= nal USB disk to a Linux RPi, I get 20.6 MBps=0D=0A> read. The same disk = on FreeBSD RPi gives 6.3 MBps - with =CB=9C50%=0D=0A> interrupt time.=0D=0A= >=20=0D=0A> --=20=0D=0A> Peter Jeremy=0D=0A>=20=0D=0A=0D=0A From owner-freebsd-arm@FreeBSD.ORG Mon Jul 8 05:20:57 2013 Return-Path: Delivered-To: freebsd-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 47C3E2FB for ; Mon, 8 Jul 2013 05:20:57 +0000 (UTC) (envelope-from beattidp@ieee.org) Received: from mail28c40.carrierzone.com (mail92c40.carrierzone.com [209.235.156.232]) by mx1.freebsd.org (Postfix) with ESMTP id 0AFD51886 for ; Mon, 8 Jul 2013 05:20:55 +0000 (UTC) X-Authenticated-User: douglas.hytherion.com Received: from [192.168.0.114] (75-169-17-71.slkc.qwest.net [75.169.17.71]) (authenticated bits=0) by mail28c40.carrierzone.com (8.13.6/8.13.1) with ESMTP id r6856Qa5014826; Mon, 8 Jul 2013 05:06:28 +0000 From: Douglas Beattie Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable Date: Sun, 7 Jul 2013 23:06:26 -0600 Subject: NFS root on BeagleBone Black To: freebsd-arm@freebsd.org Message-Id: <0D94186F-F592-44C4-9F76-9E4B4B487468@ieee.org> Mime-Version: 1.0 (Apple Message framework v1283) X-Mailer: Apple Mail (2.1283) X-CSC: 0 X-CHA: v=2.0 cv=G5ir5aY5 c=1 sm=1 a=QH74cCGCLv9v+F+JjM4yLg==:17 a=ONEJXaA8-E4A:10 a=kj9zAlcOel0A:10 a=o83nqyVRAAAA:8 a=39upzztlqLgA:10 a=zn2f7dn1AAAA:8 a=DlOy9Xx6AAAA:8 a=uhlOL7uRojv0FxRHpEcA:9 a=CjuIK1q_8ugA:10 a=A4rZ4fTmhmQHnvC-:21 a=uR7PaQ0dK_Pw1Q7p:21 a=QH74cCGCLv9v+F+JjM4yLg==:117 X-CTCH-RefID: str=0001.0A020209.51DA48D4.004C, ss=1, re=0.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0 X-CTCH-VOD: Unknown X-CTCH-Spam: Unknown X-CTCH-Score: 0.000 X-CTCH-Rules: X-CTCH-Flags: 0 X-CTCH-ScoreCust: 0.000 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: Mon, 08 Jul 2013 05:20:57 -0000 Working with the BeagleBone Black, I'm hoping to achieve boot to NFS = root. Thinking I'm fairly far along, I'm stuck with an 'error 19' at the final = steps of booting the kernel. Here's a little background -- any hints would be = appreciated. On FreeBSD 9.1, I have a TFTP server, plus an NFS export on the same = folder; here are a few snippets from the console, which confirm this. [bsd03: /root/oss/crochet-freebsd]# tail -n2 /etc/inetd.conf=20 tftp dgram udp wait root /usr/libexec/tftpd tftpd -l = -s /opt/tftpboot tftp dgram udp6 wait root /usr/libexec/tftpd tftpd -l = -s /opt/tftpboot [bsd03: /root/oss/crochet-freebsd]# cat /etc/exports /opt/tftpboot -maproot=3D0 -alldirs -network 192.168.0.0 -mask = 255.255.255.0 [bsd03: /root/oss/crochet-freebsd]# showmount -e Exports list on localhost: /opt/tftpboot 192.168.0.0=20 I have built (using the excellent crochet facility) and can boot FreeBSD = from the microSD card, and I have verified that I can NFS mount the exported = folder. Then, I created a custom kernel configuration, BEAGLEBONENFSROOT, with just a couple changes, as follows: options NFS_ROOT #NFS usable as /, requires NFSCL options = ROOTDEVNAME=3D\"nfs:192.168.0.198:/opt/tftpboot/beaglebone\" And, then I built the kernel from the command line, with DESTDIR into my = target folder for NFS root, doing all the make targets in turn; buildworld, = buildkernel, installkernel, installworld, distrib-dirs, distribution ... So, since I already have U-Boot available, starting from there, I booted = and entered a few commands as shown below, such that: U-Boot# setenv serverip 192.168.0.198 U-Boot# setenv bootfile beaglebone/boot/kernel/kernel U-Boot# dhcp U-Boot# bootelf And it does boot my kernel via TFTP, and make it all the way to the = point where it tries to mount the NFS root, but dies and drops to 'mountroot>' prompt (where I = try the same mount, but to no avail). For reference, here's the console output of the = results ... U-Boot SPL 2013.04 (Jul 04 2013 - 21:33:25) OMAP SD/MMC: 0 reading bb-uboot.img reading bb-uboot.img U-Boot 2013.04 (Jul 04 2013 - 21:33:25) I2C: ready DRAM: 512 MiB WARNING: Caches not enabled MMC: OMAP SD/MMC: 0, OMAP SD/MMC: 1 Using default environment musb-hdrc: ConfigData=3D0xde (UTMI-8, dyn FIFOs, HB-ISO Rx, HB-ISO Tx, = SoftConn) musb-hdrc: MHDRC RTL version 2.0=20 musb-hdrc: setup fifo_mode 4 musb-hdrc: 28/31 max ep, 16384/16384 memory USB Peripheral mode controller at 47401000 using PIO, IRQ 0 musb-hdrc: ConfigData=3D0xde (UTMI-8, dyn FIFOs, HB-ISO Rx, HB-ISO Tx, = SoftConn) musb-hdrc: MHDRC RTL version 2.0=20 musb-hdrc: setup fifo_mode 4 musb-hdrc: 28/31 max ep, 16384/16384 memory USB Host mode controller at 47401800 using PIO, IRQ 0 Net: not set. Validating first E-fuse MAC cpsw, usb_ether Hit any key to stop autoboot: 0 U-Boot# =20 U-Boot# setenv serverip 192.168.0.198 U-Boot# setenv bootfile beaglebone/boot/kernel/kernel U-Boot# dhcp link up on port 0, speed 100, full duplex BOOTP broadcast 1 DHCP client bound to address 192.168.0.123 Using cpsw device TFTP from server 192.168.0.198; our IP address is 192.168.0.123 Filename 'beaglebone/boot/kernel/kernel'. Load address: 0x88000000 Loading: = ################################################################# = ################################################################# = ################################################################# = ################################################################# = ################################################################# ######################## 824.2 KiB/s done Bytes transferred =3D 5119286 (4e1d36 hex) U-Boot# bootelf ## Starting application at 0xc0200100 ... KDB: debugger backends: ddb KDB: current backend: ddb Copyright (c) 1992-2013 The FreeBSD Project. Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994 The Regents of the University of California. All rights = reserved. FreeBSD is a registered trademark of The FreeBSD Foundation. FreeBSD 10.0-CURRENT #1 r252709: Sun Jul 7 19:02:13 UTC 2013 = root@fbsd91-vm03.midnight-engineer.org:/usr/src/_head/obj/arm.armv6/usr/sr= c/_head/sys/BEAGLEBONENFSROOT arm FreeBSD clang version 3.3 (tags/RELEASE_33/final 183502) 20130610 WARNING: WITNESS option enabled, expect reduced performance. CPU: Cortex A8-r3 rev 2 (Cortex-A core) Supported features: ARM_ISA THUMB2 JAZELLE THUMBEE ARMv4 Security_Ext WB disabled EABT branch prediction enabled LoUU:2 LoC:2 LoUIS:1=20 Cache level 1:=20 32KB/64B 4-way data cache WT WB Read-Alloc 32KB/64B 4-way instruction cache Read-Alloc Cache level 2:=20 256KB/64B 8-way unified cache WT WB Read-Alloc Write-Alloc real memory =3D 268435456 (256 MB) avail memory =3D 252329984 (240 MB) Texas Instruments AM3358 Processor, Revision ES1.1 random device not loaded; using insecure entropy simplebus0: on fdtbus0 aintc0: mem 0x48200000-0x48200fff on = simplebus0 aintc0: Revision 5.0 ti_scm0: mem 0x44e10000-0x44e11fff on simplebus0 am335x_prcm0: mem = 0x44e00000-0x44e012ff on simplebus0 am335x_prcm0: Clocks: System 24.0 MHz, CPU 550 MHz am335x_dmtimer0: mem = 0x44e05000-0x44e05fff,0x44e31000-0x44e31fff,0x48040000-0x48040fff,0x480420= 00-0x48042fff,0x48044000-0x48044fff,0x48046000-0x48046fff,0x48048000-0x480= 48fff,0x4804a000-0x4804afff irq 66,67,68,69,92,93,94,95 on simplebus0 Timecounter "AM335x Timecounter" frequency 24000000 Hz quality 1000 Event timer "AM335x Eventtimer0" frequency 24000000 Hz quality 1000 gpio0: mem = 0x44e07000-0x44e07fff,0x4804c000-0x4804cfff,0x481ac000-0x481acfff,0x481ae0= 00-0x481aefff irq 96,97,98,99,32,33,62,63 on simplebus0 gpioc0: on gpio0 gpiobus0: on gpio0 uart0: <16750 or compatible> mem 0x44e09000-0x44e09fff irq 72 on = simplebus0 uart0: console (115384,n,8,1) ti_edma30: mem = 0x49000000-0x490fffff,0x49800000-0x498fffff,0x49900000-0x499fffff,0x49a000= 00-0x49afffff irq 12,13,14 on simplebus0 ti_edma30: EDMA revision 40014c00 ti_mmchs0: mem = 0x48060000-0x48060fff irq 64 on simplebus0 mmc0: on ti_mmchs0 cpsw0: <3-port Switch Ethernet Subsystem> mem 0x4a100000-0x4a103fff irq = 40,41,42,43 on simplebus0 cpsw0: CPSW SS Version 1.12 (0) cpsw0: Initial queue size TX=3D128 RX=3D384 cpsw0: Ethernet address: c8:a0:30:c4:2c:6f miibus0: on cpsw0 smscphy0: PHY 0 on miibus0 smscphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto iichb0: mem 0x44e0b000-0x44e0bfff irq 70 on = simplebus0 iichb0: I2C revision 4.0 iicbus0: on iichb0 iic0: on iicbus0 am335x_pmic0: at addr 0x24 on iicbus0 am335x_pwm0: mem = 0x48300000-0x483000ff,0x48300100-0x4830017f,0x48300180-0x483001ff,0x483002= 00-0x4830025f irq 86,58 on simplebus0 Timecounters tick every 10.000 msec ti_mmchs_update_ios: TWL unimplemented mmcsd0: 4GB at mmc0 = 25.0MHz/4bit/1-block am335x_pmic0: Unknown PMIC powered by AC WARNING: WITNESS option enabled, expect reduced performance. Trying to mount root from nfs:192.168.0.198:/opt/tftpboot/beaglebone = []... mountroot: waiting for device 192.168.0.198:/opt/tftpboot/beaglebone ... Mounting from nfs:192.168.0.198:/opt/tftpboot/beaglebone failed with = error 19. Loader variables: Manual root filesystem specification: : [options] Mount using filesystem and with the specified (optional) option list. eg. ufs:/dev/da0s1a zfs:tank cd9660:/dev/acd0 ro (which is equivalent to: mount -t cd9660 -o ro /dev/acd0 /) ? List valid disk boot devices . Yield 1 second (for background tasks) Abort manual input mountroot> nfs:192.168.0.198:/opt/tftpboot/beaglebone Trying to mount root from nfs:192.168.0.198:/opt/tftpboot/beaglebone = []... mountroot: waiting for device 192.168.0.198:/opt/tftpboot/beaglebone ... Mounting from nfs:192.168.0.198:/opt/tftpboot/beaglebone failed with = error 19. That's it -- I'm excited that it made it this far, but not sure what = that 'error 19' means, or if there's a simple fix or workaround. I've done builds and = boot into NFS root for Android (at a past employer) but haven't yet achieved it on = FreeBSD. -- Douglas Beattie http://www.hytherion.com/beattidp/