浏览代码

mtd: onenand: allocate verify buffer in the core

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>
Kyungmin Park 15 年之前
父节点
当前提交
4a8ce0b030
共有 2 个文件被更改,包括 15 次插入1 次删除
  1. 12 1
      drivers/mtd/onenand/onenand_base.c
  2. 3 0
      include/linux/mtd/onenand.h

+ 12 - 1
drivers/mtd/onenand/onenand_base.c

@@ -3932,6 +3932,13 @@ int onenand_scan(struct mtd_info *mtd, int maxchips)
 				__func__);
 				__func__);
 			return -ENOMEM;
 			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;
 		this->options |= ONENAND_PAGEBUF_ALLOC;
 	}
 	}
 	if (!this->oob_buf) {
 	if (!this->oob_buf) {
@@ -4059,8 +4066,12 @@ void onenand_release(struct mtd_info *mtd)
 		kfree(this->bbm);
 		kfree(this->bbm);
 	}
 	}
 	/* Buffers allocated by onenand_scan */
 	/* Buffers allocated by onenand_scan */
-	if (this->options & ONENAND_PAGEBUF_ALLOC)
+	if (this->options & ONENAND_PAGEBUF_ALLOC) {
 		kfree(this->page_buf);
 		kfree(this->page_buf);
+#ifdef CONFIG_MTD_ONENAND_VERIFY_WRITE
+		kfree(this->verify_buf);
+#endif
+	}
 	if (this->options & ONENAND_OOBBUF_ALLOC)
 	if (this->options & ONENAND_OOBBUF_ALLOC)
 		kfree(this->oob_buf);
 		kfree(this->oob_buf);
 	kfree(mtd->eraseregions);
 	kfree(mtd->eraseregions);

+ 3 - 0
include/linux/mtd/onenand.h

@@ -125,6 +125,9 @@ struct onenand_chip {
 	flstate_t		state;
 	flstate_t		state;
 	unsigned char		*page_buf;
 	unsigned char		*page_buf;
 	unsigned char		*oob_buf;
 	unsigned char		*oob_buf;
+#ifdef CONFIG_MTD_ONENAND_VERIFY_WRITE
+	unsigned char		*verify_buf;
+#endif
 
 
 	int			subpagesize;
 	int			subpagesize;
 	struct nand_ecclayout	*ecclayout;
 	struct nand_ecclayout	*ecclayout;