diff --git a/drivers/mtd/nand/spi/core.c b/drivers/mtd/nand/spi/core.c index bd18e6d0f670..24cdc9356daa 100644 --- a/drivers/mtd/nand/spi/core.c +++ b/drivers/mtd/nand/spi/core.c @@ -527,7 +527,7 @@ static int spinand_read_page(struct spinand_device *spinand, const struct nand_page_io_req *req, bool ecc_enabled) { - u8 status; + u8 status = 0; int ret; ret = spinand_load_page_op(spinand, req); @@ -535,6 +535,13 @@ static int spinand_read_page(struct spinand_device *spinand, return ret; ret = spinand_wait(spinand, &status); + /* + * When there is data outside of OIP in the status, the status data is + * inaccurate and needs to be reconfirmed + */ + if (spinand->id.data[0] == 0x01 && status && !ret) + ret = spinand_wait(spinand, &status); + if (ret < 0) return ret; diff --git a/drivers/mtd/nand/spi/skyhigh.c b/drivers/mtd/nand/spi/skyhigh.c index cda84089a5b2..3d075f12ed82 100644 --- a/drivers/mtd/nand/spi/skyhigh.c +++ b/drivers/mtd/nand/spi/skyhigh.c @@ -26,8 +26,8 @@ static SPINAND_OP_VARIANTS(write_cache_variants, SPINAND_PROG_LOAD(true, 0, NULL, 0)); static SPINAND_OP_VARIANTS(update_cache_variants, - SPINAND_PROG_LOAD_X4(false, 0, NULL, 0), - SPINAND_PROG_LOAD(false, 0, NULL, 0)); + SPINAND_PROG_LOAD_X4(true, 0, NULL, 0), + SPINAND_PROG_LOAD(true, 0, NULL, 0)); static int s35ml04g3_ooblayout_ecc(struct mtd_info *mtd, int section, struct mtd_oob_region *region)