|
@@ -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
|