]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
mtd: rawnand: fsl_ifc: return errors for failed page reads
authorPengpeng Hou <pengpeng@iscas.ac.cn>
Fri, 3 Jul 2026 07:42:33 +0000 (15:42 +0800)
committerMiquel Raynal <miquel.raynal@bootlin.com>
Fri, 3 Jul 2026 13:46:05 +0000 (15:46 +0200)
fsl_ifc_run_command() logs controller timeout and other non-OPC
completion states in ctrl->nand_stat. fsl_ifc_read_page() then only
increments the ECC failure counter for non-OPC status and still returns
max_bitflips, which can be zero.

Return -ETIMEDOUT when the command did not complete at all and -EIO for
other non-OPC read completions so the NAND core does not treat a failed
page read as a clean page.

Fixes: 82771882d960 ("NAND Machine support for Integrated Flash Controller")
Cc: stable@vger.kernel.org
Signed-off-by: Pengpeng Hou <pengpeng@iscas.ac.cn>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
drivers/mtd/nand/raw/fsl_ifc_nand.c

index fad0334f759dd5f81113e10ec04e8bbaf490bc83..a88ac2cfaccdcc4b36f5950e2c466637fd2692c7 100644 (file)
@@ -684,8 +684,15 @@ static int fsl_ifc_read_page(struct nand_chip *chip, uint8_t *buf,
                return check_erased_page(chip, buf);
        }
 
-       if (ctrl->nand_stat != IFC_NAND_EVTER_STAT_OPC)
+       if (!ctrl->nand_stat) {
                mtd->ecc_stats.failed++;
+               return -ETIMEDOUT;
+       }
+
+       if (ctrl->nand_stat != IFC_NAND_EVTER_STAT_OPC) {
+               mtd->ecc_stats.failed++;
+               return -EIO;
+       }
 
        return nctrl->max_bitflips;
 }