diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2021-01-14 10:22:45 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2021-01-14 10:30:08 +0100 |
commit | 7d8013fd40ba5c6aea8613856042ab704be31922 (patch) | |
tree | fb7ebd6ad70ca91ab7e90eafc49ea05ec7d0b2aa | |
parent | 73aa299ed85f36e340e277845e6328eff6974f97 (diff) | |
download | barebox-7d8013fd40ba5c6aea8613856042ab704be31922.tar.gz barebox-7d8013fd40ba5c6aea8613856042ab704be31922.tar.xz |
mtd: nand: fix NAND_ECC_HW mode
6748f466a3 made NAND_ECC_HW_SYNDROME mode optional by bailing out
with -ENOSYS when the mode is not enabled in Kconfig. Unfortunately
with NAND_ECC_HW mode the code falls through to this test, so with
NAND_ECC_HW_SYNDROME support disabled NAND_ECC_HW stopped working as
well. Fix this.
fixes: 6748f466a3 ("mtd: nand: Make support for syndrome hardware ecc optional")
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
-rw-r--r-- | drivers/mtd/nand/nand_base.c | 35 |
1 files changed, 18 insertions, 17 deletions
diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c index 427aa7f0ec..b37017372f 100644 --- a/drivers/mtd/nand/nand_base.c +++ b/drivers/mtd/nand/nand_base.c @@ -5622,10 +5622,6 @@ int nand_scan_tail(struct nand_chip *chip) if (!ecc->write_subpage && ecc->hwctl && ecc->calculate) ecc->write_subpage = nand_write_subpage_hwecc; case NAND_ECC_HW_SYNDROME: - if (!IS_ENABLED(CONFIG_NAND_ECC_HW_SYNDROME)) { - ret = -ENOSYS; - goto err_nand_manuf_cleanup; - } if ((!ecc->calculate || !ecc->correct || !ecc->hwctl) && (!ecc->read_page || ecc->read_page == nand_read_page_hwecc || @@ -5635,19 +5631,24 @@ int nand_scan_tail(struct nand_chip *chip) ret = -EINVAL; goto err_nand_manuf_cleanup; } - /* Use standard syndrome read/write page function? */ - if (!ecc->read_page) - ecc->read_page = nand_read_page_syndrome; - if (!ecc->write_page) - ecc->write_page = nand_write_page_syndrome; - if (!ecc->read_page_raw) - ecc->read_page_raw = nand_read_page_raw_syndrome; - if (!ecc->write_page_raw) - ecc->write_page_raw = nand_write_page_raw_syndrome; - if (!ecc->read_oob) - ecc->read_oob = nand_read_oob_syndrome; - if (!ecc->write_oob) - ecc->write_oob = nand_write_oob_syndrome; + if (IS_ENABLED(CONFIG_NAND_ECC_HW_SYNDROME)) { + /* Use standard syndrome read/write page function? */ + if (!ecc->read_page) + ecc->read_page = nand_read_page_syndrome; + if (!ecc->write_page) + ecc->write_page = nand_write_page_syndrome; + if (!ecc->read_page_raw) + ecc->read_page_raw = nand_read_page_raw_syndrome; + if (!ecc->write_page_raw) + ecc->write_page_raw = nand_write_page_raw_syndrome; + if (!ecc->read_oob) + ecc->read_oob = nand_read_oob_syndrome; + if (!ecc->write_oob) + ecc->write_oob = nand_write_oob_syndrome; + } else if (ecc->mode == NAND_ECC_HW_SYNDROME) { + ret = -ENOSYS; + goto err_nand_manuf_cleanup; + } if (mtd->writesize >= ecc->size) { if (!ecc->strength) { |