diff options
| -rw-r--r-- | drivers/mtd/nand/spi/core.c | 17 | 
1 files changed, 11 insertions, 6 deletions
| diff --git a/drivers/mtd/nand/spi/core.c b/drivers/mtd/nand/spi/core.c index 17f63f95f4a2..54ae540bc66b 100644 --- a/drivers/mtd/nand/spi/core.c +++ b/drivers/mtd/nand/spi/core.c @@ -290,6 +290,8 @@ static int spinand_ondie_ecc_finish_io_req(struct nand_device *nand,  {  	struct spinand_ondie_ecc_conf *engine_conf = nand->ecc.ctx.priv;  	struct spinand_device *spinand = nand_to_spinand(nand); +	struct mtd_info *mtd = spinand_to_mtd(spinand); +	int ret;  	if (req->mode == MTD_OPS_RAW)  		return 0; @@ -299,7 +301,13 @@ static int spinand_ondie_ecc_finish_io_req(struct nand_device *nand,  		return 0;  	/* Finish a page write: check the status, report errors/bitflips */ -	return spinand_check_ecc_status(spinand, engine_conf->status); +	ret = spinand_check_ecc_status(spinand, engine_conf->status); +	if (ret == -EBADMSG) +		mtd->ecc_stats.failed++; +	else if (ret > 0) +		mtd->ecc_stats.corrected += ret; + +	return ret;  }  static struct nand_ecc_engine_ops spinand_ondie_ecc_engine_ops = { @@ -620,13 +628,10 @@ static int spinand_mtd_read(struct mtd_info *mtd, loff_t from,  		if (ret < 0 && ret != -EBADMSG)  			break; -		if (ret == -EBADMSG) { +		if (ret == -EBADMSG)  			ecc_failed = true; -			mtd->ecc_stats.failed++; -		} else { -			mtd->ecc_stats.corrected += ret; +		else  			max_bitflips = max_t(unsigned int, max_bitflips, ret); -		}  		ret = 0;  		ops->retlen += iter.req.datalen; | 
