Browse Source

OneNAND: Write oob area with aligned size, mtd->oobsize

There's some problem with write oob in serveral platform.
So we write oob with oobsize aligned (16bytes) instead of 3 bytes (from {2,
3})

Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Kyungmin Park 19 years ago
parent
commit
34c1060959
1 changed files with 5 additions and 2 deletions
  1. 5 2
      drivers/mtd/onenand/onenand_base.c

+ 5 - 2
drivers/mtd/onenand/onenand_base.c

@@ -965,8 +965,11 @@ static int onenand_write_oob(struct mtd_info *mtd, loff_t to, size_t len,
 
 
 		this->command(mtd, ONENAND_CMD_BUFFERRAM, to, mtd->oobsize);
 		this->command(mtd, ONENAND_CMD_BUFFERRAM, to, mtd->oobsize);
 
 
-		this->write_bufferram(mtd, ONENAND_SPARERAM, ffchars, 0, mtd->oobsize);
-		this->write_bufferram(mtd, ONENAND_SPARERAM, buf, column, thislen);
+		/* We send data to spare ram with oobsize
+		 * to prevent byte access */
+		memset(this->page_buf, 0xff, mtd->oobsize);
+		memcpy(this->page_buf + column, buf, thislen);
+		this->write_bufferram(mtd, ONENAND_SPARERAM, this->page_buf, 0, mtd->oobsize);
 
 
 		this->command(mtd, ONENAND_CMD_PROGOOB, to, mtd->oobsize);
 		this->command(mtd, ONENAND_CMD_PROGOOB, to, mtd->oobsize);