mtd: onenand: bugfix for 2x mode bad block handling

Linux-MTD Mailing List linux-mtd at lists.infradead.org
Fri Dec 3 11:59:06 EST 2010


Gitweb:     http://git.infradead.org/?p=mtd-2.6.git;a=commit;h=01039e4e63a8ea0d66fcfc71d7b99769bbbed9d6
Commit:     01039e4e63a8ea0d66fcfc71d7b99769bbbed9d6
Parent:     8a8f632d8534d0c403831341450bd8db9e842f05
Author:     Roman Tereshonkov <roman.tereshonkov at nokia.com>
AuthorDate: Thu Dec 2 15:28:38 2010 +0200
Committer:  David Woodhouse <David.Woodhouse at intel.com>
CommitDate: Fri Dec 3 16:36:07 2010 +0000

    mtd: onenand: bugfix for 2x mode bad block handling
    
    This bug becomes visible in 2x mode when chip->writesize
    is different from mtd->writesize (= 2 * chip->writesize).
    At this case the bad block information is read from
    the first and the third physical pages instead of
    the first and the second as specification states.
    
    Signed-off-by: Roman Tereshonkov <roman.tereshonkov at nokia.com>
    Acked-by: Kyungmin Park <kyungmin.park at samsung.com>
    Signed-off-by: David Woodhouse <David.Woodhouse at intel.com>
---
 drivers/mtd/onenand/onenand_bbt.c |    6 ++++--
 1 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/mtd/onenand/onenand_bbt.c b/drivers/mtd/onenand/onenand_bbt.c
index 01ab5b3..905209b 100644
--- a/drivers/mtd/onenand/onenand_bbt.c
+++ b/drivers/mtd/onenand/onenand_bbt.c
@@ -91,13 +91,15 @@ static int create_bbt(struct mtd_info *mtd, uint8_t *buf, struct nand_bbt_descr
 		for (j = 0; j < len; j++) {
 			/* No need to read pages fully,
 			 * just read required OOB bytes */
-			ret = onenand_bbt_read_oob(mtd, from + j * mtd->writesize + bd->offs, &ops);
+			ret = onenand_bbt_read_oob(mtd,
+				from + j * this->writesize + bd->offs, &ops);
 
 			/* If it is a initial bad block, just ignore it */
 			if (ret == ONENAND_BBT_READ_FATAL_ERROR)
 				return -EIO;
 
-			if (ret || check_short_pattern(&buf[j * scanlen], scanlen, mtd->writesize, bd)) {
+			if (ret || check_short_pattern(&buf[j * scanlen],
+					       scanlen, this->writesize, bd)) {
 				bbm->bbt[i >> 3] |= 0x03 << (i & 0x6);
 				printk(KERN_WARNING "Bad eraseblock %d at 0x%08x\n",
 					i >> 1, (unsigned int) from);



More information about the linux-mtd-cvs mailing list