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

Commit 4796d865 authored by Boris Brezillon's avatar Boris Brezillon
Browse files

mtd: nand: sunxi: Support ECC maximization



Setup the maximum ECC config when NAND_ECC_MAXIMIZE is set.

Signed-off-by: default avatarBoris Brezillon <boris.brezillon@free-electrons.com>
parent 8bbba481
Loading
Loading
Loading
Loading
+29 −0
Original line number Diff line number Diff line
@@ -1787,6 +1787,35 @@ static int sunxi_nand_hw_common_ecc_ctrl_init(struct mtd_info *mtd,
	int ret;
	int i;

	if (ecc->options & NAND_ECC_MAXIMIZE) {
		int bytes;

		ecc->size = 1024;
		nsectors = mtd->writesize / ecc->size;

		/* Reserve 2 bytes for the BBM */
		bytes = (mtd->oobsize - 2) / nsectors;

		/* 4 non-ECC bytes are added before each ECC bytes section */
		bytes -= 4;

		/* and bytes has to be even. */
		if (bytes % 2)
			bytes--;

		ecc->strength = bytes * 8 / fls(8 * ecc->size);

		for (i = 0; i < ARRAY_SIZE(strengths); i++) {
			if (strengths[i] > ecc->strength)
				break;
		}

		if (!i)
			ecc->strength = 0;
		else
			ecc->strength = strengths[i - 1];
	}

	if (ecc->size != 512 && ecc->size != 1024)
		return -EINVAL;