diff options
author | Dan Brown <dan_brown@ieee.org> | 2005-04-06 16:13:09 -0400 |
---|---|---|
committer | Thomas Gleixner <tglx@mtd.linutronix.de> | 2005-05-23 07:10:30 -0400 |
commit | 82e1d19fc3e6bd20b65937352a015a412b751d47 (patch) | |
tree | 6ac35c667e98a5e2ea5fa219668a16dd2eb8830d /drivers/mtd | |
parent | e5a3e8ca948e8ac0dad751dbd75e4dc96b4277e9 (diff) |
[MTD] NAND: Fix reading of autoplaced OOB when there are multiple free sections.
Signed-off-by: Dan Brown <dan_brown@ieee.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'drivers/mtd')
-rw-r--r-- | drivers/mtd/nand/nand_base.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c index 02e58f5ac721..b73f3c4e892b 100644 --- a/drivers/mtd/nand/nand_base.c +++ b/drivers/mtd/nand/nand_base.c | |||
@@ -59,7 +59,7 @@ | |||
59 | * The AG-AND chips have nice features for speed improvement, | 59 | * The AG-AND chips have nice features for speed improvement, |
60 | * which are not supported yet. Read / program 4 pages in one go. | 60 | * which are not supported yet. Read / program 4 pages in one go. |
61 | * | 61 | * |
62 | * $Id: nand_base.c,v 1.140 2005/04/04 18:56:29 gleixner Exp $ | 62 | * $Id: nand_base.c,v 1.141 2005/04/06 20:13:05 dbrown Exp $ |
63 | * | 63 | * |
64 | * This program is free software; you can redistribute it and/or modify | 64 | * This program is free software; you can redistribute it and/or modify |
65 | * it under the terms of the GNU General Public License version 2 as | 65 | * it under the terms of the GNU General Public License version 2 as |
@@ -1285,13 +1285,12 @@ int nand_do_read_ecc (struct mtd_info *mtd, loff_t from, size_t len, | |||
1285 | switch(oobsel->useecc) { | 1285 | switch(oobsel->useecc) { |
1286 | case MTD_NANDECC_AUTOPLACE: | 1286 | case MTD_NANDECC_AUTOPLACE: |
1287 | /* Walk through the autoplace chunks */ | 1287 | /* Walk through the autoplace chunks */ |
1288 | for (i = 0, j = 0; j < mtd->oobavail; i++) { | 1288 | for (i = 0; oobsel->oobfree[i][1]; i++) { |
1289 | int from = oobsel->oobfree[i][0]; | 1289 | int from = oobsel->oobfree[i][0]; |
1290 | int num = oobsel->oobfree[i][1]; | 1290 | int num = oobsel->oobfree[i][1]; |
1291 | memcpy(&oob_buf[oob], &oob_data[from], num); | 1291 | memcpy(&oob_buf[oob], &oob_data[from], num); |
1292 | j+= num; | 1292 | oob += num; |
1293 | } | 1293 | } |
1294 | oob += mtd->oobavail; | ||
1295 | break; | 1294 | break; |
1296 | case MTD_NANDECC_PLACE: | 1295 | case MTD_NANDECC_PLACE: |
1297 | /* YAFFS1 legacy mode */ | 1296 | /* YAFFS1 legacy mode */ |