• Josh Wu's avatar
    mtd: atmel_nand: add Nand Flash Controller (NFC) support · 7dc37de7
    Josh Wu authored
    Nand Flash Controller (NFC) can handle automatic transfers, sending the
    commands and address cycles to the NAND Flash.
    
    To use NFC in this driver, user needs to add NFC child node in nand flash
    driver. The NFC child node includes NFC's compatible string and regiters
    of the address and size of NFC command registers, NFC registers (embedded
    in HSMC) and NFC SRAM.
    Also user need to set up the HSMC irq, which use to check whether nfc
    command is finish or not.
    
    This driver has been tested on SAMA5D3X-EK board with JFFS2, YAFFS,
    UBIFS and mtd-utils.
    
    I put the part of the mtd_speedtest result here for your information.
    >From the mtd_speedtest, we can see the NFC will reduce the %50 of cpu load
    when writing nand flash. No change when reading.
    In the meantime, the speed will be slow about %8.
    
    - commands use to test:
        #insmod /mnt/mtd_speedtest.ko dev=2 &
        #top -n 30 -d 1 | grep speedtest
    
    - test result:
    
    Before the patch:
    =================================================
    mtd_speedtest: MTD device: 2
    mtd_speedtest: MTD device size 41943040, eraseblock size 131072, page size 2048, count of eraseblocks 320, pages per eraseblock 64, OOB size 64
      515   495 root     R     1164   0%  93% insmod /mnt/mtd_speedtest.ko dev=2
      515   495 root     R     1164   0%  98% insmod /mnt/mtd_speedtest.ko dev=2
      515   495 root     R     1164   0%  99% insmod /mnt/mtd_speedtest.ko dev=2
    mtd_speedtest: eraseblock write speed is 5768 KiB/s
    mtd_speedtest: testing eraseblock read speed
      515   495 root     R     1164   0%  92% insmod /mnt/mtd_speedtest.ko dev=2
      515   495 root     R     1164   0%  91% insmod /mnt/mtd_speedtest.ko dev=2
      515   495 root     R     1164   0%  94% insmod /mnt/mtd_speedtest.ko dev=2
    mtd_speedtest: eraseblock read speed is 5932 KiB/s
    mtd_speedtest: testing page write speed
      515   495 root     R     1164   0%  94% insmod /mnt/mtd_speedtest.ko dev=2
      515   495 root     R     1164   0%  98% insmod /mnt/mtd_speedtest.ko dev=2
      515   495 root     R     1164   0%  98% insmod /mnt/mtd_speedtest.ko dev=2
    mtd_speedtest: page write speed is 5770 KiB/s
    mtd_speedtest: testing page read speed
      515   495 root     R     1164   0%  91% insmod /mnt/mtd_speedtest.ko dev=2
      515   495 root     R     1164   0%  89% insmod /mnt/mtd_speedtest.ko dev=2
      515   495 root     R     1164   0%  91% insmod /mnt/mtd_speedtest.ko dev=2
    mtd_speedtest: page read speed is 5910 KiB/s
    
    After the patch:
    =================================================
    mtd_speedtest: MTD device: 2
    mtd_speedtest: MTD device size 41943040, eraseblock size 131072, page size 2048, count of eraseblocks 320, pages per eraseblock 64, OOB size 64
    mtd_speedtest: testing eraseblock write speed
      509   495 root     D     1164   0%  49% insmod /mnt/mtd_speedtest.ko dev=2
      509   495 root     D     1164   0%  50% insmod /mnt/mtd_speedtest.ko dev=2
      509   495 root     D     1164   0%  47% insmod /mnt/mtd_speedtest.ko dev=2
    mtd_speedtest: eraseblock write speed is 5370 KiB/s
    mtd_speedtest: testing eraseblock read speed
      509   495 root     R     1164   0%  92% insmod /mnt/mtd_speedtest.ko dev=2
      509   495 root     R     1164   0%  91% insmod /mnt/mtd_speedtest.ko dev=2
      509   495 root     R     1164   0%  95% insmod /mnt/mtd_speedtest.ko dev=2
    mtd_speedtest: eraseblock read speed is 5715 KiB/s
    mtd_speedtest: testing page write speed
      509   495 root     D     1164   0%  48% insmod /mnt/mtd_speedtest.ko dev=2
      509   495 root     D     1164   0%  47% insmod /mnt/mtd_speedtest.ko dev=2
      509   495 root     D     1164   0%  50% insmod /mnt/mtd_speedtest.ko dev=2
    mtd_speedtest: page write speed is 5224 KiB/s
    mtd_speedtest: testing page read speed
      509   495 root     R     1164   0%  89% insmod /mnt/mtd_speedtest.ko dev=2
      509   495 root     R     1164   0%  94% insmod /mnt/mtd_speedtest.ko dev=2
      509   495 root     R     1164   0%  93% insmod /mnt/mtd_speedtest.ko dev=2
    mtd_speedtest: page read speed is 5641 KiB/s
    Signed-off-by: default avatarJosh Wu <josh.wu@atmel.com>
    Signed-off-by: default avatarArtem Bityutskiy <artem.bityutskiy@linux.intel.com>
    Signed-off-by: default avatarDavid Woodhouse <David.Woodhouse@intel.com>
    7dc37de7
atmel_nand.c 52.3 KB