comparison 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
comparison
equal deleted inserted replaced
3383:060772fa9bb3 3384:1229083b0af1
665 #ifdef CYGSEM_IO_NAND_READONLY 665 #ifdef CYGSEM_IO_NAND_READONLY
666 return -EROFS; 666 return -EROFS;
667 #else 667 #else
668 PARTITION_CHECK(prt); 668 PARTITION_CHECK(prt);
669 cyg_nand_device *dev = prt->dev; 669 cyg_nand_device *dev = prt->dev;
670 int rv; 670 int rv, state;
671 DEV_INIT_CHECK(dev); 671 DEV_INIT_CHECK(dev);
672 cyg_nand_block_addr blk = BLOCK_P_TO_D(prt, pblk); 672 cyg_nand_block_addr blk = BLOCK_P_TO_D(prt, pblk);
673 673
674 TIMETAG(); 674 TIMETAG();
675 LOCK_DEV(dev); 675 LOCK_DEV(dev);
676 TIMETAG(); 676 TIMETAG();
677 677
678 EG(valid_block_addr(prt, blk)); 678 EG(valid_block_addr(prt, blk));
679 #ifdef CYGSEM_IO_NAND_USE_BBT 679 #ifdef CYGSEM_IO_NAND_USE_BBT
680 if (cyg_nand_bbti_query(dev, blk) != CYG_NAND_BBT_OK) { 680 state = cyg_nand_bbti_query(dev, blk);
681 if ( (state != CYG_NAND_BBT_OK)
682 #ifdef CYGSEM_IO_NAND_ALLOW_ERASE_WORNBAD
683 && (state != CYG_NAND_BBT_WORNBAD)
684 #endif
685 ) {
681 NAND_CHATTER(1,dev,"Asked to erase bad block %u\n", blk); 686 NAND_CHATTER(1,dev,"Asked to erase bad block %u\n", blk);
682 EG(-EINVAL); 687 EG(-EINVAL);
683 } 688 }
684 #endif 689 #endif
685 NAND_CHATTER(8,dev,"Erasing block %u\n", blk); 690 NAND_CHATTER(8,dev,"Erasing block %u\n", blk);