This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

SW ECC throughput is better than HW ECC?

Other Parts Discussed in Thread: AM3517

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] =================================================