1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- From 882fd1577cbe7812ae3a48988180c5f0fda475ca Mon Sep 17 00:00:00 2001
- From: Miquel Raynal <[email protected]>
- Date: Sat, 26 Aug 2017 17:19:15 +0200
- Subject: [PATCH] mtd: nand: Use standard large page OOB layout when using
- NAND_ECC_NONE
- Use the core's large page OOB layout functions when not reserving any
- space for ECC bytes in the OOB layout. Fix ->nand_ooblayout_ecc_lp()
- to return -ERANGE instead of a zero length in this case.
- Signed-off-by: Miquel Raynal <[email protected]>
- Signed-off-by: Boris Brezillon <[email protected]>
- ---
- drivers/mtd/nand/nand_base.c | 15 ++++++++++++++-
- 1 file changed, 14 insertions(+), 1 deletion(-)
- --- a/drivers/mtd/nand/nand_base.c
- +++ b/drivers/mtd/nand/nand_base.c
- @@ -115,7 +115,7 @@ static int nand_ooblayout_ecc_lp(struct
- struct nand_chip *chip = mtd_to_nand(mtd);
- struct nand_ecc_ctrl *ecc = &chip->ecc;
-
- - if (section)
- + if (section || !ecc->total)
- return -ERANGE;
-
- oobregion->length = ecc->total;
- @@ -4712,6 +4712,19 @@ int nand_scan_tail(struct mtd_info *mtd)
- mtd_set_ooblayout(mtd, &nand_ooblayout_lp_hamming_ops);
- break;
- default:
- + /*
- + * Expose the whole OOB area to users if ECC_NONE
- + * is passed. We could do that for all kind of
- + * ->oobsize, but we must keep the old large/small
- + * page with ECC layout when ->oobsize <= 128 for
- + * compatibility reasons.
- + */
- + if (ecc->mode == NAND_ECC_NONE) {
- + mtd_set_ooblayout(mtd,
- + &nand_ooblayout_lp_ops);
- + break;
- + }
- +
- WARN(1, "No oob scheme defined for oobsize %d\n",
- mtd->oobsize);
- ret = -EINVAL;
|