aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mtd/nand/docg4.c
diff options
context:
space:
mode:
authorBrian Norris <computersforpeace@gmail.com>2013-07-30 20:52:58 -0400
committerDavid Woodhouse <David.Woodhouse@intel.com>2013-08-30 11:47:52 -0400
commit5a0edb251ae91c6f9b1f28dc165becd955666118 (patch)
tree2411a390a1c5350baaf152e431e579a2487de57a /drivers/mtd/nand/docg4.c
parent39dbb02998d859f0fa12c5b495fe90681ba45ce2 (diff)
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>
Diffstat (limited to 'drivers/mtd/nand/docg4.c')
-rw-r--r--drivers/mtd/nand/docg4.c6
1 files changed, 0 insertions, 6 deletions
diff --git a/drivers/mtd/nand/docg4.c b/drivers/mtd/nand/docg4.c
index dc86d4a3c3dd..548db2389fab 100644
--- a/drivers/mtd/nand/docg4.c
+++ b/drivers/mtd/nand/docg4.c
@@ -1093,7 +1093,6 @@ static int docg4_block_markbad(struct mtd_info *mtd, loff_t ofs)
1093 struct nand_chip *nand = mtd->priv; 1093 struct nand_chip *nand = mtd->priv;
1094 struct docg4_priv *doc = nand->priv; 1094 struct docg4_priv *doc = nand->priv;
1095 struct nand_bbt_descr *bbtd = nand->badblock_pattern; 1095 struct nand_bbt_descr *bbtd = nand->badblock_pattern;
1096 int block = (int)(ofs >> nand->bbt_erase_shift);
1097 int page = (int)(ofs >> nand->page_shift); 1096 int page = (int)(ofs >> nand->page_shift);
1098 uint32_t g4_addr = mtd_to_docg4_address(page, 0); 1097 uint32_t g4_addr = mtd_to_docg4_address(page, 0);
1099 1098
@@ -1108,9 +1107,6 @@ static int docg4_block_markbad(struct mtd_info *mtd, loff_t ofs)
1108 if (buf == NULL) 1107 if (buf == NULL)
1109 return -ENOMEM; 1108 return -ENOMEM;
1110 1109
1111 /* update bbt in memory */
1112 nand->bbt[block / 4] |= 0x01 << ((block & 0x03) * 2);
1113
1114 /* write bit-wise negation of pattern to oob buffer */ 1110 /* write bit-wise negation of pattern to oob buffer */
1115 memset(nand->oob_poi, 0xff, mtd->oobsize); 1111 memset(nand->oob_poi, 0xff, mtd->oobsize);
1116 for (i = 0; i < bbtd->len; i++) 1112 for (i = 0; i < bbtd->len; i++)
@@ -1120,8 +1116,6 @@ static int docg4_block_markbad(struct mtd_info *mtd, loff_t ofs)
1120 write_page_prologue(mtd, g4_addr); 1116 write_page_prologue(mtd, g4_addr);
1121 docg4_write_page(mtd, nand, buf, 1); 1117 docg4_write_page(mtd, nand, buf, 1);
1122 ret = pageprog(mtd); 1118 ret = pageprog(mtd);
1123 if (!ret)
1124 mtd->ecc_stats.badblocks++;
1125 1119
1126 kfree(buf); 1120 kfree(buf);
1127 1121