]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commitdiff
mtd: rawnand: fsl_ifc: check result of SRAM initialization
authorKurt Kanzenbach <kurt@linutronix.de>
Mon, 13 Aug 2018 07:18:45 +0000 (09:18 +0200)
committerStefan Bader <stefan.bader@canonical.com>
Tue, 26 Nov 2019 12:16:59 +0000 (13:16 +0100)
BugLink: https://bugs.launchpad.net/bugs/1853915
[ Upstream commit 434655af6a187129d8114640443b27d2cecfb979 ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
Signed-off-by: Khalid Elmously <khalid.elmously@canonical.com>
drivers/mtd/nand/fsl_ifc_nand.c

index 16deba1a2385876ae8002eab2c6df14f1294a576..021d168daeec7053186cea1c50e3fedae28f5249 100644 (file)
@@ -757,7 +757,7 @@ static int fsl_ifc_chip_init_tail(struct mtd_info *mtd)
        return 0;
 }
 
-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;
@@ -801,8 +801,10 @@ 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) {
                printk(KERN_ERR "fsl-ifc: Failed to Initialise SRAM\n");
+               return -ETIMEDOUT;
+       }
 
        /* Restore CSOR and CSOR_ext */
        ifc_out32(csor, &ifc_global->csor_cs[cs].csor);
@@ -910,8 +912,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