aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mtd/nand/nand_base.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/mtd/nand/nand_base.c')
-rw-r--r--drivers/mtd/nand/nand_base.c26
1 files changed, 16 insertions, 10 deletions
diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
index 7a3a44907715..ea6d2c334aed 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
@@ -347,7 +347,7 @@ static int nand_default_block_markbad(struct mtd_info *mtd, loff_t ofs)
347{ 347{
348 struct nand_chip *chip = mtd->priv; 348 struct nand_chip *chip = mtd->priv;
349 uint8_t buf[2] = { 0, 0 }; 349 uint8_t buf[2] = { 0, 0 };
350 int block; 350 int block, ret;
351 351
352 /* Get block number */ 352 /* Get block number */
353 block = ((int)ofs) >> chip->bbt_erase_shift; 353 block = ((int)ofs) >> chip->bbt_erase_shift;
@@ -356,16 +356,22 @@ static int nand_default_block_markbad(struct mtd_info *mtd, loff_t ofs)
356 356
357 /* Do we have a flash based bad block table ? */ 357 /* Do we have a flash based bad block table ? */
358 if (chip->options & NAND_USE_FLASH_BBT) 358 if (chip->options & NAND_USE_FLASH_BBT)
359 return nand_update_bbt(mtd, ofs); 359 ret = nand_update_bbt(mtd, ofs);
360 360 else {
361 /* We write two bytes, so we dont have to mess with 16 bit access */ 361 /* We write two bytes, so we dont have to mess with 16 bit
362 ofs += mtd->oobsize; 362 * access
363 chip->ops.len = 2; 363 */
364 chip->ops.datbuf = NULL; 364 ofs += mtd->oobsize;
365 chip->ops.oobbuf = buf; 365 chip->ops.len = 2;
366 chip->ops.ooboffs = chip->badblockpos & ~0x01; 366 chip->ops.datbuf = NULL;
367 chip->ops.oobbuf = buf;
368 chip->ops.ooboffs = chip->badblockpos & ~0x01;
367 369
368 return nand_do_write_oob(mtd, ofs, &chip->ops); 370 ret = nand_do_write_oob(mtd, ofs, &chip->ops);
371 }
372 if (!ret)
373 mtd->ecc_stats.badblocks++;
374 return ret;
369} 375}
370 376
371/** 377/**