The driver-specific verify_buf() function can be replaced with the
standard read_page_raw() function to verify writes.  This will allow
verify_buf() to be removed from individual drivers.  verify_buf() is no
longer supported in mainline Linux, so it is a pain to continue
supporting.

Signed-off-by: Peter Tyser <pty...@xes-inc.com>
---

 drivers/mtd/nand/nand_base.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
index 63bdf65..788846a 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
@@ -2394,6 +2394,7 @@ static int nand_write_page(struct mtd_info *mtd, struct 
nand_chip *chip,
                int oob_required, int page, int cached, int raw)
 {
        int status, subpage;
+       __maybe_unused uint8_t *vfy_buf;
 
        if (!(chip->options & NAND_NO_SUBPAGE_WRITE) &&
                chip->ecc.write_subpage)
@@ -2443,10 +2444,19 @@ static int nand_write_page(struct mtd_info *mtd, struct 
nand_chip *chip,
 
 #ifdef __UBOOT__
 #if defined(CONFIG_MTD_NAND_VERIFY_WRITE)
+       vfy_buf = malloc(mtd->writesize);
+       if (!vfy_buf)
+               return -ENOMEM;
+
        /* Send command to read back the data */
        chip->cmdfunc(mtd, NAND_CMD_READ0, 0, page);
+       chip->ecc.read_page_raw(mtd, chip, vfy_buf, oob_required, page);
+
+       status = memcmp(buf, vfy_buf, mtd->writesize);
 
-       if (chip->verify_buf(mtd, buf, mtd->writesize))
+       free(vfy_buf);
+
+       if (status)
                return -EIO;
 
        /* Make sure the next page prog is preceded by a status read */
-- 
1.9.1

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to