Commit 434655af authored by Kurt Kanzenbach's avatar Kurt Kanzenbach Committed by Miquel Raynal
Browse files

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: default avatarKurt Kanzenbach <kurt@linutronix.de>
Signed-off-by: default avatarMiquel Raynal <miquel.raynal@bootlin.com>
parent 64a22588
Loading
Loading
Loading
Loading
+13 −4
Original line number Diff line number Diff line
@@ -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