Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[MTD] [NAND] Fix Blackfin NFC ECC calculating bug with page size 512 bytes

Signed-off-by: Bryan Wu <bryan.wu@analog.com>
Signed-off-by: David Woodhouse <dwmw2@infradead.org>

authored by

Bryan Wu and committed by
David Woodhouse
5eb91034 f4dda091

+10 -6
+10 -6
drivers/mtd/nand/bf5xx_nand.c
··· 293 293 u16 ecc0, ecc1; 294 294 u32 code[2]; 295 295 u8 *p; 296 - int bytes = 3, i; 297 296 298 297 /* first 4 bytes ECC code for 256 page size */ 299 298 ecc0 = bfin_read_NFC_ECC0(); ··· 302 303 303 304 dev_dbg(info->device, "returning ecc 0x%08x\n", code[0]); 304 305 306 + /* first 3 bytes in ecc_code for 256 page size */ 307 + p = (u8 *) code; 308 + memcpy(ecc_code, p, 3); 309 + 305 310 /* second 4 bytes ECC code for 512 page size */ 306 311 if (page_size == 512) { 307 312 ecc0 = bfin_read_NFC_ECC2(); 308 313 ecc1 = bfin_read_NFC_ECC3(); 309 314 code[1] = (ecc0 & 0x3FF) | ((ecc1 & 0x3FF) << 11); 310 - bytes = 6; 315 + 316 + /* second 3 bytes in ecc_code for second 256 317 + * bytes of 512 page size 318 + */ 319 + p = (u8 *) (code + 1); 320 + memcpy((ecc_code + 3), p, 3); 311 321 dev_dbg(info->device, "returning ecc 0x%08x\n", code[1]); 312 322 } 313 - 314 - p = (u8 *)code; 315 - for (i = 0; i < bytes; i++) 316 - ecc_code[i] = p[i]; 317 323 318 324 return 0; 319 325 }