mtd: onenand: allocate verify buffer in the core
authorKyungmin Park <kyungmin.park@samsung.com>
Wed, 28 Apr 2010 15:46:46 +0000 (17:46 +0200)
committerDavid Woodhouse <David.Woodhouse@intel.com>
Fri, 14 May 2010 00:49:48 +0000 (01:49 +0100)
This patch extends OneNAND core code with support for OneNAND verify
write check. This is done by allocating the buffer for verify read
directly from the core code.

Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
drivers/mtd/onenand/onenand_base.c
include/linux/mtd/onenand.h

index 1b26f50..045811f 100644 (file)
@@ -3932,6 +3932,13 @@ int onenand_scan(struct mtd_info *mtd, int maxchips)
                                __func__);
                        return -ENOMEM;
                }
+#ifdef CONFIG_MTD_ONENAND_VERIFY_WRITE
+               this->verify_buf = kzalloc(mtd->writesize, GFP_KERNEL);
+               if (!this->verify_buf) {
+                       kfree(this->page_buf);
+                       return -ENOMEM;
+               }
+#endif
                this->options |= ONENAND_PAGEBUF_ALLOC;
        }
        if (!this->oob_buf) {
@@ -4059,8 +4066,12 @@ void onenand_release(struct mtd_info *mtd)
                kfree(this->bbm);
        }
        /* Buffers allocated by onenand_scan */
-       if (this->options & ONENAND_PAGEBUF_ALLOC)
+       if (this->options & ONENAND_PAGEBUF_ALLOC) {
                kfree(this->page_buf);
+#ifdef CONFIG_MTD_ONENAND_VERIFY_WRITE
+               kfree(this->verify_buf);
+#endif
+       }
        if (this->options & ONENAND_OOBBUF_ALLOC)
                kfree(this->oob_buf);
        kfree(mtd->eraseregions);
index c9a3c35..9b43268 100644 (file)
@@ -125,6 +125,9 @@ struct onenand_chip {
        flstate_t               state;
        unsigned char           *page_buf;
        unsigned char           *oob_buf;
+#ifdef CONFIG_MTD_ONENAND_VERIFY_WRITE
+       unsigned char           *verify_buf;
+#endif
 
        int                     subpagesize;
        struct nand_ecclayout   *ecclayout;