|
@@ -723,6 +723,19 @@ static int fsl_elbc_write_page(struct mtd_info *mtd, struct nand_chip *chip,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+/* ECC will be calculated automatically, and errors will be detected in
|
|
|
+ * waitfunc.
|
|
|
+ */
|
|
|
+static int fsl_elbc_write_subpage(struct mtd_info *mtd, struct nand_chip *chip,
|
|
|
+ uint32_t offset, uint32_t data_len,
|
|
|
+ const uint8_t *buf, int oob_required)
|
|
|
+{
|
|
|
+ fsl_elbc_write_buf(mtd, buf, mtd->writesize);
|
|
|
+ fsl_elbc_write_buf(mtd, chip->oob_poi, mtd->oobsize);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
static int fsl_elbc_chip_init(struct fsl_elbc_mtd *priv)
|
|
|
{
|
|
|
struct fsl_lbc_ctrl *ctrl = priv->ctrl;
|
|
@@ -761,6 +774,7 @@ static int fsl_elbc_chip_init(struct fsl_elbc_mtd *priv)
|
|
|
|
|
|
chip->ecc.read_page = fsl_elbc_read_page;
|
|
|
chip->ecc.write_page = fsl_elbc_write_page;
|
|
|
+ chip->ecc.write_subpage = fsl_elbc_write_subpage;
|
|
|
|
|
|
/* If CS Base Register selects full hardware ECC then use it */
|
|
|
if ((in_be32(&lbc->bank[priv->bank].br) & BR_DECC) ==
|