diff packages/io/nand/current/tests/nand_rwbenchmark.c @ 3383:060772fa9bb3

nand tests/nand_rwbenchmark.c: Fix infinite loop when all blocks are marked bad.
author Ross Younger <wry@ecoscentric.com>
date Sat, 14 Jun 2014 19:11:12 +1200
parents b1e9145ae7cd
children 631d86e5d620
line wrap: on
line diff
--- a/packages/io/nand/current/tests/nand_rwbenchmark.c
+++ b/packages/io/nand/current/tests/nand_rwbenchmark.c
@@ -337,7 +337,10 @@ cyg_nand_block_addr find_spare_block(cyg
     int i,rv;
     cyg_nand_block_addr b;
 
-    for (b=CYG_NAND_PARTITION_NBLOCKS(part)-1; b>=0; b--) {
+    for (b=CYG_NAND_PARTITION_NBLOCKS(part)-1; b>=1; b--) {
+		/* Testing for b>=1 means we don't check block 0 for
+		 * availability, but if we get there then realistically
+		 * the device is worn out anyway. So fail the test. */
         cyg_nand_page_addr pg = CYG_NAND_BLOCK2PAGEADDR(part->dev, b);
         rv = cyg_nandp_read_page(part, pg, 0, oob, oobz);
         if (rv != 0) continue; // bad block?
@@ -352,7 +355,7 @@ next:
         ;
     }
 
-    CYG_TEST_FAIL_EXIT("can't find an untagged block");
+    CYG_TEST_FAIL_EXIT("can't find an untagged block - device worn out?");
 }
 
 CYG_BYTE databuf[CYGNUM_NAND_PAGEBUFFER], testbuf[CYGNUM_NAND_PAGEBUFFER];