The running system is am3517 500Mhz. and boot from SD card.
The Linux kernel is 2.6.37.
I do some nand flash test by below command.
insmod /lib/modules/2.6.37-g01739e0-dirty/kernel/drivers/mtd/tests/mtd_speedtest.ko dev=5
Modified the file /drivers/mtd/nand/omap2.c for different combination test.
pdata->ecc_opt = OMAP_ECC_HAMMING_CODE_HW;
// pdata->ecc_opt = OMAP_ECC_HAMMING_CODE_DEFAULT;
pdata->xfer_type = NAND_OMAP_PREFETCH_DMA;
// pdata->xfer_type = NAND_OMAP_POLLED;
It's weird result that the throughput is (SW ECC & DMA) > (HW ECC & PIO) > (HW ECC & DMA) .
The detail test result is as below.
==================================================
HW ECC & DMA
[ 119.938293] mtd_speedtest: MTD device: 5
[ 119.942382] mtd_speedtest: MTD device size 382205952, eraseblock size 131072, page size 2048, count of eraseblocks 2916, pages per eraseblock 64, OOB size 64
[ 119.961608] mtd_speedtest: scanning for bad eraseblocks
[ 120.174682] mtd_speedtest: scanned 2916 eraseblocks, 0 are bad
[ 124.238769] mtd_speedtest: testing eraseblock write speed
[ 266.683654] mtd_speedtest: eraseblock write speed is 2598 KiB/s
[ 266.689819] mtd_speedtest: testing eraseblock read speed
[ 385.300231] mtd_speedtest: eraseblock read speed is 3121 KiB/s
[ 389.364654] mtd_speedtest: testing page write speed
[ 535.661804] mtd_speedtest: page write speed is 2530 KiB/s
[ 535.667510] mtd_speedtest: testing page read speed
[ 657.929687] mtd_speedtest: page read speed is 3028 KiB/s
[ 661.993621] mtd_speedtest: testing 2 page write speed
[ 806.135772] mtd_speedtest: 2 page write speed is 2568 KiB/s
[ 806.141571] mtd_speedtest: testing 2 page read speed
[ 926.559906] mtd_speedtest: 2 page read speed is 3074 KiB/s
[ 926.565673] mtd_speedtest: Testing erase speed
[ 930.628692] mtd_speedtest: erase speed is 91236 KiB/s
[ 930.633941] mtd_speedtest: finished
==================================================
HW ECC & PIO
[ 45.429870] mtd_speedtest: scanning for bad eraseblocks
[ 45.643524] mtd_speedtest: scanned 2916 eraseblocks, 0 are bad
[ 49.707214] mtd_speedtest: testing eraseblock write speed
[ 189.160034] mtd_speedtest: eraseblock write speed is 2654 KiB/s
[ 189.166229] mtd_speedtest: testing eraseblock read speed
[ 277.977264] mtd_speedtest: eraseblock read speed is 4168 KiB/s
[ 282.040924] mtd_speedtest: testing page write speed
[ 424.620880] mtd_speedtest: page write speed is 2596 KiB/s
[ 424.626525] mtd_speedtest: testing page read speed
[ 516.346130] mtd_speedtest: page read speed is 4036 KiB/s
[ 520.408782] mtd_speedtest: testing 2 page write speed
[ 661.321777] mtd_speedtest: 2 page write speed is 2627 KiB/s
[ 661.327667] mtd_speedtest: testing 2 page read speed
[ 751.591369] mtd_speedtest: 2 page read speed is 4101 KiB/s
[ 751.597076] mtd_speedtest: Testing erase speed
[ 755.660064] mtd_speedtest: erase speed is 91236 KiB/s
[ 755.665313] mtd_speedtest: finished
==================================================
SW ECC & DMA
[ 119.329681] mtd_speedtest: MTD device: 5
[ 119.333770] mtd_speedtest: MTD device size 382205952, eraseblock size 131072, page size 2048, count of eraseblocks 2916, pages per eraseblock 64, OOB size 64
[ 119.352996] mtd_speedtest: scanning for bad eraseblocks
[ 119.566314] mtd_speedtest: scanned 2916 eraseblocks, 0 are bad
[ 123.631713] mtd_speedtest: testing eraseblock write speed
[ 207.163970] mtd_speedtest: eraseblock write speed is 4432 KiB/s
[ 207.170196] mtd_speedtest: testing eraseblock read speed
[ 265.946350] mtd_speedtest: eraseblock read speed is 6298 KiB/s
[ 270.013580] mtd_speedtest: testing page write speed
[ 357.244201] mtd_speedtest: page write speed is 4244 KiB/s
[ 357.249816] mtd_speedtest: testing page read speed
[ 419.498687] mtd_speedtest: page read speed is 5947 KiB/s
[ 423.562957] mtd_speedtest: testing 2 page write speed
[ 508.785797] mtd_speedtest: 2 page write speed is 4344 KiB/s
[ 508.791595] mtd_speedtest: testing 2 page read speed
[ 569.252227] mtd_speedtest: 2 page read speed is 6123 KiB/s
[ 569.258026] mtd_speedtest: Testing erase speed
[ 573.321228] mtd_speedtest: erase speed is 91191 KiB/s
[ 573.326477] mtd_speedtest: finished
[ 573.330139] =================================================