summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2015-02-05 10:14:10 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2015-02-10 09:55:43 +0100
commit0d26729d8542aca208780cd773e2e396899e1c48 (patch)
treeff2e0889c52c1c9ab083f46c127f8f07264342e6
parent4497013f0a602cf77d25c433e0d5e4ae5a7e1f58 (diff)
downloadbarebox-0d26729d8542aca208780cd773e2e396899e1c48.tar.gz
barebox-0d26729d8542aca208780cd773e2e396899e1c48.tar.xz
mtd: nand: omap: Fix OMAP_ECC_BCH8_CODE_HW ecc mode
This is broken since: | commit 00f119a29387cfb1b188fcc4daa4aa94186ac7a9 | Author: Sascha Hauer <s.hauer@pengutronix.de> | Date: Fri Aug 1 14:09:48 2014 +0200 | | mtd: omap gpmc: fix ecc bytes/size | | The ecc bytes / size are per subpage, not per page. | | Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> The ecc code in omap_correct_data() expects to correct a whole page at once, so we must tell the nand layer that we have 4 * 13 bytes of ecc bytes and 4 * 512 bytes of ecc size. Otherwise the NAND layer will iterate over 512 byte steps over a page and call the .correct callback each time. This only works for 2k pagesize and needs revisit once other page sizes shall be supported. It would be better to tell the nand layer the real ecc bytes (13) and ecc size (512) instead and drop the iteration in omap_correct_bch(). However, this needs better testing so it isn't done here now. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
-rw-r--r--drivers/mtd/nand/nand_omap_gpmc.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/mtd/nand/nand_omap_gpmc.c b/drivers/mtd/nand/nand_omap_gpmc.c
index b1d266f4d6..d254042db0 100644
--- a/drivers/mtd/nand/nand_omap_gpmc.c
+++ b/drivers/mtd/nand/nand_omap_gpmc.c
@@ -815,8 +815,8 @@ static int omap_gpmc_eccmode(struct gpmc_nand_info *oinfo,
omap_oobinfo.eccpos[i] = i + offset;
break;
case OMAP_ECC_BCH8_CODE_HW:
- oinfo->nand.ecc.bytes = 13;
- oinfo->nand.ecc.size = 512;
+ oinfo->nand.ecc.bytes = 13 * 4;
+ oinfo->nand.ecc.size = 512 * 4;
oinfo->nand.ecc.strength = BCH8_MAX_ERROR;
omap_oobinfo.oobfree->offset = offset;
omap_oobinfo.oobfree->length = minfo->oobsize -