Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5eb91034 authored by Bryan Wu's avatar Bryan Wu Committed by David Woodhouse
Browse files

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

parent f4dda091
Loading
Loading
Loading
Loading
+10 −6
Original line number Diff line number Diff line
@@ -293,7 +293,6 @@ static int bf5xx_nand_calculate_ecc(struct mtd_info *mtd,
	u16 ecc0, ecc1;
	u32 code[2];
	u8 *p;
	int bytes = 3, i;

	/* first 4 bytes ECC code for 256 page size */
	ecc0 = bfin_read_NFC_ECC0();
@@ -303,19 +302,24 @@ static int bf5xx_nand_calculate_ecc(struct mtd_info *mtd,

	dev_dbg(info->device, "returning ecc 0x%08x\n", code[0]);

	/* first 3 bytes in ecc_code for 256 page size */
	p = (u8 *) code;
	memcpy(ecc_code, p, 3);

	/* second 4 bytes ECC code for 512 page size */
	if (page_size == 512) {
		ecc0 = bfin_read_NFC_ECC2();
		ecc1 = bfin_read_NFC_ECC3();
		code[1] = (ecc0 & 0x3FF) | ((ecc1 & 0x3FF) << 11);
		bytes = 6;

		/* second 3 bytes in ecc_code for second 256
		 * bytes of 512 page size
		 */
		p = (u8 *) (code + 1);
		memcpy((ecc_code + 3), p, 3);
		dev_dbg(info->device, "returning ecc 0x%08x\n", code[1]);
	}

	p = (u8 *)code;
	for (i = 0; i < bytes; i++)
		ecc_code[i] = p[i];

	return 0;
}