|
@@ -85,7 +85,6 @@ struct fsl_elbc_ctrl {
|
|
|
unsigned int mdr; /* UPM/FCM Data Register value */
|
|
|
unsigned int use_mdr; /* Non zero if the MDR is to be set */
|
|
|
unsigned int oob; /* Non zero if operating on OOB data */
|
|
|
- uint8_t *oob_poi; /* Place to write ECC after read back */
|
|
|
};
|
|
|
|
|
|
/* These map to the positions used by the FCM hardware ECC generator */
|
|
@@ -436,7 +435,6 @@ static void fsl_elbc_cmdfunc(struct mtd_info *mtd, unsigned int command,
|
|
|
|
|
|
/* PAGEPROG reuses all of the setup from SEQIN and adds the length */
|
|
|
case NAND_CMD_PAGEPROG: {
|
|
|
- int full_page;
|
|
|
vdbg("fsl_elbc_cmdfunc: NAND_CMD_PAGEPROG "
|
|
|
"writing %d bytes.\n", ctrl->index);
|
|
|
|
|
@@ -445,34 +443,13 @@ static void fsl_elbc_cmdfunc(struct mtd_info *mtd, unsigned int command,
|
|
|
* write so the HW generates the ECC.
|
|
|
*/
|
|
|
if (ctrl->oob || ctrl->column != 0 ||
|
|
|
- ctrl->index != mtd->writesize + mtd->oobsize) {
|
|
|
+ ctrl->index != mtd->writesize + mtd->oobsize)
|
|
|
out_be32(&lbc->fbcr, ctrl->index);
|
|
|
- full_page = 0;
|
|
|
- } else {
|
|
|
+ else
|
|
|
out_be32(&lbc->fbcr, 0);
|
|
|
- full_page = 1;
|
|
|
- }
|
|
|
|
|
|
fsl_elbc_run_command(mtd);
|
|
|
|
|
|
- /* Read back the page in order to fill in the ECC for the
|
|
|
- * caller. Is this really needed?
|
|
|
- */
|
|
|
- if (full_page && ctrl->oob_poi) {
|
|
|
- out_be32(&lbc->fbcr, 3);
|
|
|
- set_addr(mtd, 6, page_addr, 1);
|
|
|
-
|
|
|
- ctrl->read_bytes = mtd->writesize + 9;
|
|
|
-
|
|
|
- fsl_elbc_do_read(chip, 1);
|
|
|
- fsl_elbc_run_command(mtd);
|
|
|
-
|
|
|
- memcpy_fromio(ctrl->oob_poi + 6,
|
|
|
- &ctrl->addr[ctrl->index], 3);
|
|
|
- ctrl->index += 3;
|
|
|
- }
|
|
|
-
|
|
|
- ctrl->oob_poi = NULL;
|
|
|
return;
|
|
|
}
|
|
|
|
|
@@ -680,13 +657,8 @@ static void fsl_elbc_write_page(struct mtd_info *mtd,
|
|
|
struct nand_chip *chip,
|
|
|
const uint8_t *buf)
|
|
|
{
|
|
|
- struct fsl_elbc_mtd *priv = chip->priv;
|
|
|
- struct fsl_elbc_ctrl *ctrl = priv->ctrl;
|
|
|
-
|
|
|
fsl_elbc_write_buf(mtd, buf, mtd->writesize);
|
|
|
fsl_elbc_write_buf(mtd, chip->oob_poi, mtd->oobsize);
|
|
|
-
|
|
|
- ctrl->oob_poi = chip->oob_poi;
|
|
|
}
|
|
|
|
|
|
static struct fsl_elbc_ctrl *elbc_ctrl;
|