mtd: rawnand: fsl_ifc: check result of SRAM initialization
The SRAM initialization might fail. If that happens further NAND operations won't be successful. Therefore, the chip init routine should fail if the SRAM initialization didn't work. Signed-off-by: Kurt Kanzenbach <kurt@linutronix.de> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
This commit is contained in:
parent
64a2258817
commit
434655af6a
|
@ -761,7 +761,7 @@ static const struct nand_controller_ops fsl_ifc_controller_ops = {
|
|||
.attach_chip = fsl_ifc_attach_chip,
|
||||
};
|
||||
|
||||
static void fsl_ifc_sram_init(struct fsl_ifc_mtd *priv)
|
||||
static int fsl_ifc_sram_init(struct fsl_ifc_mtd *priv)
|
||||
{
|
||||
struct fsl_ifc_ctrl *ctrl = priv->ctrl;
|
||||
struct fsl_ifc_runtime __iomem *ifc_runtime = ctrl->rregs;
|
||||
|
@ -805,12 +805,16 @@ static void fsl_ifc_sram_init(struct fsl_ifc_mtd *priv)
|
|||
wait_event_timeout(ctrl->nand_wait, ctrl->nand_stat,
|
||||
msecs_to_jiffies(IFC_TIMEOUT_MSECS));
|
||||
|
||||
if (ctrl->nand_stat != IFC_NAND_EVTER_STAT_OPC)
|
||||
if (ctrl->nand_stat != IFC_NAND_EVTER_STAT_OPC) {
|
||||
pr_err("fsl-ifc: Failed to Initialise SRAM\n");
|
||||
return -ETIMEDOUT;
|
||||
}
|
||||
|
||||
/* Restore CSOR and CSOR_ext */
|
||||
ifc_out32(csor, &ifc_global->csor_cs[cs].csor);
|
||||
ifc_out32(csor_ext, &ifc_global->csor_cs[cs].csor_ext);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int fsl_ifc_chip_init(struct fsl_ifc_mtd *priv)
|
||||
|
@ -914,8 +918,13 @@ static int fsl_ifc_chip_init(struct fsl_ifc_mtd *priv)
|
|||
chip->ecc.algo = NAND_ECC_HAMMING;
|
||||
}
|
||||
|
||||
if (ctrl->version >= FSL_IFC_VERSION_1_1_0)
|
||||
fsl_ifc_sram_init(priv);
|
||||
if (ctrl->version >= FSL_IFC_VERSION_1_1_0) {
|
||||
int ret;
|
||||
|
||||
ret = fsl_ifc_sram_init(priv);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* As IFC version 2.0.0 has 16KB of internal SRAM as compared to older
|
||||
|
|
Loading…
Reference in New Issue