diff options
author | Brian Norris <computersforpeace@gmail.com> | 2013-07-30 20:52:58 -0400 |
---|---|---|
committer | David Woodhouse <David.Woodhouse@intel.com> | 2013-08-30 11:47:52 -0400 |
commit | 5a0edb251ae91c6f9b1f28dc165becd955666118 (patch) | |
tree | 2411a390a1c5350baaf152e431e579a2487de57a /drivers/mtd/nand/docg4.c | |
parent | 39dbb02998d859f0fa12c5b495fe90681ba45ce2 (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.c | 6 |
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 | ||