From: Ralf Rösch Date: Thu, 30 Dec 2010 09:30:11 +0000 (+0100) Subject: mtd: txx9ndfmc: limit transfer bytes to 512 (ECC provides 6 bytes max) X-Git-Tag: v2.6.38-rc1~21^2~11 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=24ac9a94f9e21ea71d877b0c80867d625b68bec2;p=platform%2Fkernel%2Flinux-exynos.git mtd: txx9ndfmc: limit transfer bytes to 512 (ECC provides 6 bytes max) See commit: c0cbfd0e81d879a950ba6f0df3f75ea30c5ab16e Using __nand_correct_data() helper function, this driver can read 512 byte (with 6 byte ECC) at a time. This is correct, but not more: With NAND chips providing page sizes > 512 Bytes chip->ecc.bytes are calculated > 6 in txx9ndfmc_nand_scan. According the data sheet there are (only) 6 bytes ECC available. After applying the patch a Hynix 512M*8 with 2KiB page size could be successfully formatted and used with an ubifs file system. Signed-off-by: Ralf Roesch Signed-off-by: Artem Bityutskiy Acked-by: Atsushi Nemoto Signed-off-by: David Woodhouse --- diff --git a/drivers/mtd/nand/txx9ndfmc.c b/drivers/mtd/nand/txx9ndfmc.c index 054a41c..ca270a4 100644 --- a/drivers/mtd/nand/txx9ndfmc.c +++ b/drivers/mtd/nand/txx9ndfmc.c @@ -277,8 +277,9 @@ static int txx9ndfmc_nand_scan(struct mtd_info *mtd) ret = nand_scan_ident(mtd, 1, NULL); if (!ret) { if (mtd->writesize >= 512) { - chip->ecc.size = mtd->writesize; - chip->ecc.bytes = 3 * (mtd->writesize / 256); + /* Hardware ECC 6 byte ECC per 512 Byte data */ + chip->ecc.size = 512; + chip->ecc.bytes = 6; } ret = nand_scan_tail(mtd); }