mtd: nand: refactor chip->block_markbad interface
The chip->block_markbad pointer should really only be responsible for writing a bad block marker for new bad blocks. It should not take care of BBT-related functionality, nor should it handle bookkeeping of bad block stats. This patch refactors the 3 users of the block_markbad interface (plus the default nand_base implementation) so that the common code is kept in nand_block_markbad_lowlevel(). It removes some inconsistencies between the various implementations and should allow for more centralized improvements in the future. Because gpmi-nand no longer needs the nand_update_bbt() function, let's stop exporting it as well. Signed-off-by: Brian Norris <computersforpeace@gmail.com> Acked-by: Huang Shijie <b32955@freescale.com> (for gpmi-nand parts) Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com> Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
This commit is contained in:

committed by
David Woodhouse

parent
39dbb02998
commit
5a0edb251a
@@ -1093,7 +1093,6 @@ static int docg4_block_markbad(struct mtd_info *mtd, loff_t ofs)
|
||||
struct nand_chip *nand = mtd->priv;
|
||||
struct docg4_priv *doc = nand->priv;
|
||||
struct nand_bbt_descr *bbtd = nand->badblock_pattern;
|
||||
int block = (int)(ofs >> nand->bbt_erase_shift);
|
||||
int page = (int)(ofs >> nand->page_shift);
|
||||
uint32_t g4_addr = mtd_to_docg4_address(page, 0);
|
||||
|
||||
@@ -1108,9 +1107,6 @@ static int docg4_block_markbad(struct mtd_info *mtd, loff_t ofs)
|
||||
if (buf == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
/* update bbt in memory */
|
||||
nand->bbt[block / 4] |= 0x01 << ((block & 0x03) * 2);
|
||||
|
||||
/* write bit-wise negation of pattern to oob buffer */
|
||||
memset(nand->oob_poi, 0xff, mtd->oobsize);
|
||||
for (i = 0; i < bbtd->len; i++)
|
||||
@@ -1120,8 +1116,6 @@ static int docg4_block_markbad(struct mtd_info *mtd, loff_t ofs)
|
||||
write_page_prologue(mtd, g4_addr);
|
||||
docg4_write_page(mtd, nand, buf, 1);
|
||||
ret = pageprog(mtd);
|
||||
if (!ret)
|
||||
mtd->ecc_stats.badblocks++;
|
||||
|
||||
kfree(buf);
|
||||
|
||||
|
Reference in New Issue
Block a user