Commit df698621 authored by Brian Norris's avatar Brian Norris Committed by David Woodhouse

mtd: nand: move SCANLASTPAGE handling to the correct code block

As nand_default_block_markbad() is becoming more complex, it helps to
have code appear only in its relevant codepath(s). Here, the calculation
of `ofs' based on NAND_BBT_SCANLASTPAGE is only useful on paths where we
write bad block markers to OOB. We move the condition/calculation closer
to the `write' operation and update the comment to more correctly
describe the operation.

The variable `wr_ofs' is also used to help isolate our calculation of
the "write" offset from the usage of `ofs' to represent the eraseblock
offset. This will become useful when we reorder operations in the next
patch.

This patch should make no functional change.
Signed-off-by: default avatarBrian Norris <computersforpeace@gmail.com>
Signed-off-by: default avatarArtem Bityutskiy <artem.bityutskiy@linux.intel.com>
Signed-off-by: default avatarDavid Woodhouse <David.Woodhouse@intel.com>
parent f0e0c09b
...@@ -411,9 +411,6 @@ static int nand_default_block_markbad(struct mtd_info *mtd, loff_t ofs) ...@@ -411,9 +411,6 @@ static int nand_default_block_markbad(struct mtd_info *mtd, loff_t ofs)
nand_erase_nand(mtd, &einfo, 0); nand_erase_nand(mtd, &einfo, 0);
} }
if (chip->bbt_options & NAND_BBT_SCANLASTPAGE)
ofs += mtd->erasesize - mtd->writesize;
/* Get block number */ /* Get block number */
block = (int)(ofs >> chip->bbt_erase_shift); block = (int)(ofs >> chip->bbt_erase_shift);
if (chip->bbt) if (chip->bbt)
...@@ -424,11 +421,12 @@ static int nand_default_block_markbad(struct mtd_info *mtd, loff_t ofs) ...@@ -424,11 +421,12 @@ static int nand_default_block_markbad(struct mtd_info *mtd, loff_t ofs)
ret = nand_update_bbt(mtd, ofs); ret = nand_update_bbt(mtd, ofs);
else { else {
struct mtd_oob_ops ops; struct mtd_oob_ops ops;
loff_t wr_ofs = ofs;
nand_get_device(chip, mtd, FL_WRITING); nand_get_device(chip, mtd, FL_WRITING);
/* /*
* Write to first two pages if necessary. If we write to more * Write to first/last page(s) if necessary. If we write to more
* than one location, the first error encountered quits the * than one location, the first error encountered quits the
* procedure. * procedure.
*/ */
...@@ -442,11 +440,14 @@ static int nand_default_block_markbad(struct mtd_info *mtd, loff_t ofs) ...@@ -442,11 +440,14 @@ static int nand_default_block_markbad(struct mtd_info *mtd, loff_t ofs)
ops.len = ops.ooblen = 1; ops.len = ops.ooblen = 1;
} }
ops.mode = MTD_OPS_PLACE_OOB; ops.mode = MTD_OPS_PLACE_OOB;
if (chip->bbt_options & NAND_BBT_SCANLASTPAGE)
wr_ofs += mtd->erasesize - mtd->writesize;
do { do {
ret = nand_do_write_oob(mtd, ofs, &ops); ret = nand_do_write_oob(mtd, wr_ofs, &ops);
i++; i++;
ofs += mtd->writesize; wr_ofs += mtd->writesize;
} while (!ret && (chip->bbt_options & NAND_BBT_SCAN2NDPAGE) && } while (!ret && (chip->bbt_options & NAND_BBT_SCAN2NDPAGE) &&
i < 2); i < 2);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment