• P
    cmd_nand: Verify writes to NAND · 6b94f118
    Peter Tyser 提交于
    Previously NAND writes were only verified when CONFIG_MTD_NAND_VERIFY_WRITE
    was defined.  On boards without this define writes could fail silently.
    Boards with CONFIG_MTD_NAND_VERIFY_WRITE could prematurely report
    failures which ECC could correct.
    
    Add a verification step after all "nand write[.x]" commands to ensure the
    writes were successful.  The verification uses ECC for for "normal"
    writes, but does not for raw and yaffs writes.  Some test cases which
    inject fake bad bits on a 2K page flash are below.
    
    Test cases with CONFIG_MTD_NAND_VERIFY_WRITE defined:
      Example of an ECC write which previously failed when
      CONFIG_MTD_NAND_VERIFY_WRITE was defined, but now succeeds because ECC
      is used during verification:
          nand erase 0 0x10000
          dhcp /somefile
          mw.b 0x10000 0xff 0x2000
          mw.b 0x10020 0xfe 1
          nand write.raw 0x10000 0x800 1
          mw.b 0x1000020 0x01 1
          nand write 0x1000000 0x800 0x1800
    
    Test cases without CONFIG_MTD_NAND_VERIFY_WRITE defined:
      Example of an ECC write which previously silently failed:
          nand erase 0 0x10000
          dhcp /somefile
          mw.b 0x10000 0xff 0x2000
          mw.b 0x10020 0x00 1
          nand write.raw 0x10000 0x800 1
          mw.b 0x1000020 0xff 1
          nand write 0x1000000 0x800 0x1800
    
      Example of a raw write which previously failed silently due to stuck
      data bit, but now errors out:
          nand erase 0 0x10000
          dhcp /somefile
          mw.b 0x10000 0xff 0x2000
          mw.b 0x10020 0xfe 1
          nand write.raw 0x10000 0x800 1
          mw.b 0x1000020 0x01 1
          nand write.raw 0x1000000 0x800 3
    
      Example of a raw write which previously failed silently due to stuck OOB
      bit, but now errors out:
          nand erase 0 0x10000
          dhcp /somefile
          mw.b 0x10000 0xff 0x2000
          mw.b 0x10810 0xfe 1
          nand write.raw 0x10000 0x800 1
          mw.b 0x1000810 0x01 1
          nand write.raw 0x1000000 0x800 3
    Signed-off-by: NPeter Tyser <ptyser@xes-inc.com>
    Tested-by: NHeiko Schocher <hs@denx.de>
    Acked-by: NHeiko Schocher <hs@denx.de>
    6b94f118
cmd_nand.c 25.2 KB