OSDN Git Service

mtd: nand: Let software ECC engines be retrieved from the NAND core
authorMiquel Raynal <miquel.raynal@bootlin.com>
Tue, 29 Sep 2020 23:01:24 +0000 (01:01 +0200)
committerMiquel Raynal <miquel.raynal@bootlin.com>
Thu, 10 Dec 2020 21:37:30 +0000 (22:37 +0100)
Before making use of the ECC engines, we must retrieve them. Add the
boilerplate for the ones already available: software engines (Hamming
and BCH).

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Link: https://lore.kernel.org/linux-mtd/20200929230124.31491-21-miquel.raynal@bootlin.com
drivers/mtd/nand/ecc.c
include/linux/mtd/nand.h

index 5411377..57bc8c5 100644 (file)
@@ -585,6 +585,26 @@ void nand_ecc_restore_req(struct nand_ecc_req_tweak_ctx *ctx,
 }
 EXPORT_SYMBOL_GPL(nand_ecc_restore_req);
 
+struct nand_ecc_engine *nand_ecc_get_sw_engine(struct nand_device *nand)
+{
+       unsigned int algo = nand->ecc.user_conf.algo;
+
+       if (algo == NAND_ECC_ALGO_UNKNOWN)
+               algo = nand->ecc.defaults.algo;
+
+       switch (algo) {
+       case NAND_ECC_ALGO_HAMMING:
+               return nand_ecc_sw_hamming_get_engine();
+       case NAND_ECC_ALGO_BCH:
+               return nand_ecc_sw_bch_get_engine();
+       default:
+               break;
+       }
+
+       return NULL;
+}
+EXPORT_SYMBOL(nand_ecc_get_sw_engine);
+
 MODULE_LICENSE("GPL");
 MODULE_AUTHOR("Miquel Raynal <miquel.raynal@bootlin.com>");
 MODULE_DESCRIPTION("Generic ECC engine");
index 3616fa2..f78f61c 100644 (file)
@@ -277,6 +277,7 @@ int nand_ecc_prepare_io_req(struct nand_device *nand,
 int nand_ecc_finish_io_req(struct nand_device *nand,
                           struct nand_page_io_req *req);
 bool nand_ecc_is_strong_enough(struct nand_device *nand);
+struct nand_ecc_engine *nand_ecc_get_sw_engine(struct nand_device *nand);
 
 #if IS_ENABLED(CONFIG_MTD_NAND_ECC_SW_HAMMING)
 struct nand_ecc_engine *nand_ecc_sw_hamming_get_engine(void);