We have a custom CPU board we have been using for some time. It has on-board NAND flash that is used for the file system via UBIFS. I did some benchmark tests on the file system recently, and got about 3Mbytes/s read rates on medium to large files (140k to 25M). Looking at the flash memory spec it seems we should be getting closer to 20Mbytes/s.
I've tried changing NFC_DIV to boost the flash clock speed, and that got me about a 33% improvement. The SYM bit is set correctly, as are the bits to set page size (2k).
I've looked at the rate at which mxc_nd interrupts are generated, and on large file reads, they average one interrupt per 240 bytes transferred, which suggests that some where between ubifs, ubi, and mth the file read requests are being broken into smaller chunks. ubinfo returns a minimum i/o size of 2048, which is correct. Does anyone know where these smaller reads might be getting generated? I'm quite willing to go dig about in the kernel source to tweak things if need be.
NAND Flash: Hynix HY27UF084G2B-TPCB (25ns read time, 25us to load a 2k page to the buffer)
We also have a similar CPU board with a different flash chip: Samsung K9GAG08U0D-PCB0T00