
On Fri, 2014-04-04 at 17:31 +0900, Masahiro Yamada wrote:
So my question is, what should we do to improve the performance? Is it a bad idea to use DMA?
The sequence of page_read in this patch is like this: (1) Cache flush of DMA buffer area (2) DMA transfer from NAND device to DMA buffer (3) memcpy() from DMA buffer to destination memory
In Linux Kernel, I guess there is DMA sync process between (2) and (3). But we don't have DMA API in U-Boot.
flush_dcache_range() plays the same role as the Linux DMA sync.
If we do not use DMA, the read sequence is like this (1) Copy data directly from NAND register to destination memory
According to my benchmark, this is about twice faster.
Have you measured the performance in the Linux driver?
Scott, do you have any advice?
Do some profiling to see where the time is spent. I don't know how easy it is to do automated profiling of U-Boot, but you could add some manual instrumentation of the driver to measure min/avg/max/total time taken over various intervals.
-Scott