Skip to content

Commit 1b8d107

Browse files
fabioestevammiquelraynal
authored andcommitted
mtd: rawnand: mxc: Move the ECC engine initialization to the right place
No ECC initialization should happen during the host controller probe. In fact, we need the probe function to call nand_scan() in order to: - identify the device, its capabilities and constraints (nand_scan_ident()) - configure the ECC engine accordingly (->attach_chip()) - scan its content and prepare the core (nand_scan_tail()) Moving these lines to mxcnd_attach_chip() fixes a regression caused by a previous commit supposed to clarify these steps. When moving the ECC initialization from probe() to attach(), get rid of the pdata usage to determine the engine type and let the core decide instead. Tested on a imx27-pdk board. Fixes: d7157ff ("mtd: rawnand: Use the ECC framework user input parsing bits") Reported-by: Fabio Estevam <festevam@gmail.com> Co-developed-by: Miquel Raynal <miquel.raynal@bootlin.com> Signed-off-by: Fabio Estevam <festevam@gmail.com> Tested-by: Sascha Hauer <s.hauer@pengutronix.de> Tested-by: Martin Kaiser <martin@kaiser.cx> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com> Link: https://lore.kernel.org/linux-mtd/20201016213613.1450-1-festevam@gmail.com
1 parent 3650b22 commit 1b8d107

1 file changed

Lines changed: 5 additions & 12 deletions

File tree

drivers/mtd/nand/raw/mxc_nand.c

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1681,6 +1681,11 @@ static int mxcnd_attach_chip(struct nand_chip *chip)
16811681
struct mxc_nand_host *host = nand_get_controller_data(chip);
16821682
struct device *dev = mtd->dev.parent;
16831683

1684+
chip->ecc.bytes = host->devtype_data->eccbytes;
1685+
host->eccsize = host->devtype_data->eccsize;
1686+
chip->ecc.size = 512;
1687+
mtd_set_ooblayout(mtd, host->devtype_data->ooblayout);
1688+
16841689
switch (chip->ecc.engine_type) {
16851690
case NAND_ECC_ENGINE_TYPE_ON_HOST:
16861691
chip->ecc.read_page = mxc_nand_read_page;
@@ -1836,19 +1841,7 @@ static int mxcnd_probe(struct platform_device *pdev)
18361841
if (host->devtype_data->axi_offset)
18371842
host->regs_axi = host->base + host->devtype_data->axi_offset;
18381843

1839-
this->ecc.bytes = host->devtype_data->eccbytes;
1840-
host->eccsize = host->devtype_data->eccsize;
1841-
18421844
this->legacy.select_chip = host->devtype_data->select_chip;
1843-
this->ecc.size = 512;
1844-
mtd_set_ooblayout(mtd, host->devtype_data->ooblayout);
1845-
1846-
if (host->pdata.hw_ecc) {
1847-
this->ecc.engine_type = NAND_ECC_ENGINE_TYPE_ON_HOST;
1848-
} else {
1849-
this->ecc.engine_type = NAND_ECC_ENGINE_TYPE_SOFT;
1850-
this->ecc.algo = NAND_ECC_ALGO_HAMMING;
1851-
}
18521845

18531846
/* NAND bus width determines access functions used by upper layer */
18541847
if (host->pdata.width == 2)

0 commit comments

Comments
 (0)