nand_erase_nand(mtd, &einfo, 0);
}
- if (chip->bbt_options & NAND_BBT_SCANLASTPAGE)
- ofs += mtd->erasesize - mtd->writesize;
-
/* Get block number */
block = (int)(ofs >> chip->bbt_erase_shift);
if (chip->bbt)
ret = nand_update_bbt(mtd, ofs);
else {
struct mtd_oob_ops ops;
+ loff_t wr_ofs = ofs;
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
* procedure.
*/
ops.len = ops.ooblen = 1;
}
ops.mode = MTD_OPS_PLACE_OOB;
+
+ if (chip->bbt_options & NAND_BBT_SCANLASTPAGE)
+ wr_ofs += mtd->erasesize - mtd->writesize;
do {
- ret = nand_do_write_oob(mtd, ofs, &ops);
+ ret = nand_do_write_oob(mtd, wr_ofs, &ops);
i++;
- ofs += mtd->writesize;
+ wr_ofs += mtd->writesize;
} while (!ret && (chip->bbt_options & NAND_BBT_SCAN2NDPAGE) &&
i < 2);