diff packages/io/nand/current/src/nand.c @ 3384:1229083b0af1

cdl/nand.cdl src/nand.c utils/erasenand.c: Create CYGSEM_IO_NAND_ALLOW_ERASE_WORNBAD.
author Ross Younger <wry@ecoscentric.com>
date Sat, 21 Jun 2014 22:52:44 +1200
parents 6d93cd3d3350
children 3ec9445648cd
line wrap: on
line diff
--- a/packages/io/nand/current/src/nand.c
+++ b/packages/io/nand/current/src/nand.c
@@ -667,7 +667,7 @@ int cyg_nandp_erase_block(cyg_nand_parti
 #else
     PARTITION_CHECK(prt);
     cyg_nand_device *dev = prt->dev;
-    int rv;
+    int rv, state;
     DEV_INIT_CHECK(dev);
     cyg_nand_block_addr blk = BLOCK_P_TO_D(prt, pblk);
 
@@ -677,7 +677,12 @@ int cyg_nandp_erase_block(cyg_nand_parti
 
     EG(valid_block_addr(prt, blk));
 #ifdef CYGSEM_IO_NAND_USE_BBT
-    if (cyg_nand_bbti_query(dev, blk) != CYG_NAND_BBT_OK) {
+	state = cyg_nand_bbti_query(dev, blk);
+    if ( (state != CYG_NAND_BBT_OK)
+#ifdef CYGSEM_IO_NAND_ALLOW_ERASE_WORNBAD
+			 && (state != CYG_NAND_BBT_WORNBAD)
+#endif
+			) {
         NAND_CHATTER(1,dev,"Asked to erase bad block %u\n", blk);
         EG(-EINVAL);
     }