Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 28 Feb 2013 14:02:16 -0800
From:      Oleksandr Tymoshenko <gonzo@bluezbox.com>
To:        Daisuke Aoyama <aoyama@peach.ne.jp>
Cc:        freebsd-arm@freebsd.org
Subject:   Re: FreeBSD/armv6z/clang on Raspberry Pi 512MB (with U-Boot + ubldr)
Message-ID:  <512FD3E8.4000307@bluezbox.com>
In-Reply-To: <D867259F89CF44409C2359527D0263D4@ad.peach.ne.jp>
References:  <B5F827FF91C94FF2AFEE00194A2BB2C5@ad.peach.ne.jp> <B508111FCE534B2CBA61F4D1EC1078D3@ad.peach.ne.jp> <D3ABE3919EA74D668DB060952B5CD8C0@ad.peach.ne.jp> <2659960079254C38ACD2F1DCBB7A1A19@ad.peach.ne.jp> <E48DEAF481F74C69A1BC7A01F2B8E74A@ad.peach.ne.jp> <D867259F89CF44409C2359527D0263D4@ad.peach.ne.jp>

next in thread | previous in thread | raw e-mail | index | archive | help
On 1/29/2013 10:10 AM, Daisuke Aoyama wrote:
> I've updated clang RPI code based on SVN r246066.
> This is OABI version. I plan to try EABI next if possible.
>
> major change:
> o update base tree to SVN r246066.
> o implement -mload-store-multiple/-mno-load-store-multiple option in 
> clang/llvm. (workaround only)
> o re-enable __clear_cache() in libgcc.
> o bugfix bcm2835_dma inline asm code, etc.
> o use bcm2835_dma_wb/wbinv in SDHCI.
> o add USB LAN and wireless LAN driver module. (loaded by devd 
> automatically)
> o move swap to head of partition.
> o use label mount instead of /dev/mmcsd0s2a,/dev/mmcsd0s2b.
> o add wireless lan, quota, ipfw and IPv6 to kernel config.
> o change default HS mode is enabled.
>
> To prevent a fault on ldm/stm generated by clang, all files are 
> complied with:
> CFLAGS=-O2 -mno-global-merge -mno-load-store-multiple 
> -fno-strict-aliasing -pipe -mabi=apcs-gnu  -march=armv6z 
> -mtune=arm1176jzf-s -mfloat-abi=soft
>
> To reduce time in DMA intr, it uses bcm2835_dma_wb/wbinv directly.
> Now it gets 20.7MB/s DMA transfer rate on class 10 SD card. (depend on 
> card spec)
> It's 30% faster than bus_space_XXX/bus_dmamap_XXX.
>
>> root@raspberry-pi:~ # dd if=/dev/mmcsd0 of=/dev/null bs=1m count=32
>> 32+0 records in
>> 32+0 records out
>> 33554432 bytes transferred in 1.617316 secs (20746986 bytes/sec)
>
> Known issue:
> DMA intr might be delayed by slow interrupt handler.
> (arm/intr.c:arm_handler_execute specific, should be remapped DMA IRQ 
> to low number)

Hi Daisuke,

I'd like to thank you again for your outstanding work.
I've just committed three patches based on your code:

- Platform DMA support for SDHCI
- DMA engine driver
- DMA support for BCM2835 SDHCI driver

I made some architectural changes to them in order to make code 
compatible with FreeBSD
codebase style. Namely:
     - Replaced direct access to DMA control blocks with calls to API
     - Make both DMA and SDHCI driver use bus_dma and bus_space interface.

You've pinpointed several pain points with bus_space and bus_dma but I 
believe they
should be addressed in more general fashion, for as many ARM platforms 
as possible
that's why I left them in the committed version.





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