flash read performance

Trent Piepho tpiepho at freescale.com
Fri Nov 14 21:02:27 EST 2008

On Tue, 11 Nov 2008, Andre Puschmann wrote:
> Trent Piepho schrieb:
>>> map.virt = ioremap(..);
>>> map.cached = ioremap_cached(..);
>>> map.inval_cache = inval_cache_fct();
>> It depends on what mapping driver you're using.  It looks like only the
>> pxa2xx driver uses map.cached.  The physmap or of_physmap drivers that I'm
>> using don't use it.
> The flashmap-drive I am using is custom one made for the gumstix-board.
> However, it is almost identically to pxa2xx-driver from newer kernels.

I added support to physmap_of for using map.cached on ppc32, seems to be
working so far.

But, it turns out it doesn't work for XIP.  The flash drivers that support XIP
implement a ->point() method that something like AXFS or cramfs+xip use to
mmap the flash.  But these just return pointers to the uncached mapping.

>> In non-cached and guarded mode, I now get 13.61 vs 12.30 MB/s.  That's just
>> from slightly better timings because I could make them different for read
>> vs write.  The big difference is cached and non-guarded reads, which went
>> to 44.79 MB/s from 14.24 MB/s.  That boost is from using burst mode.
> Whop, this is great news. Btw. do you drive your flash in asynchronous
> or in synchronous mode? Do you have an extra flash configuration
> register that you need to modify in order to use the burst mode?
> My intel NOR flash has an extra read configuration register (RCR).
> However, for some reason I am not able to read/modify/read this register
> successfully.

In asynchronous mode.  I didn't have to program anything special in the flash
chip, just program the localbus controller to use page burst transfers.

More information about the linux-mtd mailing list