|
@@ -2724,7 +2724,7 @@ static int nand_write_page_syndrome(struct mtd_info *mtd,
|
|
|
*/
|
|
|
static int nand_write_page(struct mtd_info *mtd, struct nand_chip *chip,
|
|
|
uint32_t offset, int data_len, const uint8_t *buf,
|
|
|
- int oob_required, int page, int cached, int raw)
|
|
|
+ int oob_required, int page, int raw)
|
|
|
{
|
|
|
int status, subpage;
|
|
|
|
|
@@ -2750,31 +2750,19 @@ static int nand_write_page(struct mtd_info *mtd, struct nand_chip *chip,
|
|
|
if (status < 0)
|
|
|
return status;
|
|
|
|
|
|
+ if (nand_standard_page_accessors(&chip->ecc))
|
|
|
+ chip->cmdfunc(mtd, NAND_CMD_PAGEPROG, -1, -1);
|
|
|
+ status = chip->waitfunc(mtd, chip);
|
|
|
/*
|
|
|
- * Cached progamming disabled for now. Not sure if it's worth the
|
|
|
- * trouble. The speed gain is not very impressive. (2.3->2.6Mib/s).
|
|
|
+ * See if operation failed and additional status checks are
|
|
|
+ * available.
|
|
|
*/
|
|
|
- cached = 0;
|
|
|
-
|
|
|
- if (!cached || !NAND_HAS_CACHEPROG(chip)) {
|
|
|
-
|
|
|
- if (nand_standard_page_accessors(&chip->ecc))
|
|
|
- chip->cmdfunc(mtd, NAND_CMD_PAGEPROG, -1, -1);
|
|
|
- status = chip->waitfunc(mtd, chip);
|
|
|
- /*
|
|
|
- * See if operation failed and additional status checks are
|
|
|
- * available.
|
|
|
- */
|
|
|
- if ((status & NAND_STATUS_FAIL) && (chip->errstat))
|
|
|
- status = chip->errstat(mtd, chip, FL_WRITING, status,
|
|
|
- page);
|
|
|
+ if ((status & NAND_STATUS_FAIL) && (chip->errstat))
|
|
|
+ status = chip->errstat(mtd, chip, FL_WRITING, status,
|
|
|
+ page);
|
|
|
|
|
|
- if (status & NAND_STATUS_FAIL)
|
|
|
- return -EIO;
|
|
|
- } else {
|
|
|
- chip->cmdfunc(mtd, NAND_CMD_CACHEDPROG, -1, -1);
|
|
|
- status = chip->waitfunc(mtd, chip);
|
|
|
- }
|
|
|
+ if (status & NAND_STATUS_FAIL)
|
|
|
+ return -EIO;
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
@@ -2881,7 +2869,6 @@ static int nand_do_write_ops(struct mtd_info *mtd, loff_t to,
|
|
|
|
|
|
while (1) {
|
|
|
int bytes = mtd->writesize;
|
|
|
- int cached = writelen > bytes && page != blockmask;
|
|
|
uint8_t *wbuf = buf;
|
|
|
int use_bufpoi;
|
|
|
int part_pagewr = (column || writelen < mtd->writesize);
|
|
@@ -2899,7 +2886,6 @@ static int nand_do_write_ops(struct mtd_info *mtd, loff_t to,
|
|
|
if (use_bufpoi) {
|
|
|
pr_debug("%s: using write bounce buffer for buf@%p\n",
|
|
|
__func__, buf);
|
|
|
- cached = 0;
|
|
|
if (part_pagewr)
|
|
|
bytes = min_t(int, bytes - column, writelen);
|
|
|
chip->pagebuf = -1;
|
|
@@ -2918,7 +2904,7 @@ static int nand_do_write_ops(struct mtd_info *mtd, loff_t to,
|
|
|
}
|
|
|
|
|
|
ret = nand_write_page(mtd, chip, column, bytes, wbuf,
|
|
|
- oob_required, page, cached,
|
|
|
+ oob_required, page,
|
|
|
(ops->mode == MTD_OPS_RAW));
|
|
|
if (ret)
|
|
|
break;
|