From 9ff22ce6915fda4deb0e8fd8939e3345ebd07ce3 Mon Sep 17 00:00:00 2001 From: Jon Lin Date: Fri, 17 Apr 2020 17:02:47 +0800 Subject: [PATCH] drivers: rkflash: Fix mtd mark bad strategy 1.Fix wrong return value 2.Results are subject to back reading verification Change-Id: Ifd3965423261617bdaeecc10fd4da28cb703b2aa Signed-off-by: Jon Lin --- drivers/rkflash/sfc_nand_mtd.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/drivers/rkflash/sfc_nand_mtd.c b/drivers/rkflash/sfc_nand_mtd.c index 846261735aee..eb9b7584f72e 100644 --- a/drivers/rkflash/sfc_nand_mtd.c +++ b/drivers/rkflash/sfc_nand_mtd.c @@ -188,19 +188,27 @@ static int sfc_markbad_mtd(struct mtd_info *mtd, loff_t ofs) /* Erase block before marking it bad. */ ret = sfc_nand_erase_block(0, ofs >> mtd->writesize_shift); if (ret) - goto out; + rkflash_print_error("%s erase fail ofs 0x%llx ret=%d\n", + __func__, ofs, ret); + /* Mark bad. */ ret = sfc_nand_mark_bad_block(0, ofs >> mtd->writesize_shift); if (ret) - goto out; + rkflash_print_error("%s mark fail ofs 0x%llx ret=%d\n", + __func__, ofs, ret); -out: - mutex_unlock(p_dev->lock); - if (!ret) { + /* Mark bad recheck */ + if (sfc_nand_check_bad_block(0, ofs >> mtd->writesize_shift)) { mtd->ecc_stats.badblocks++; + ret = 0; + } else { + rkflash_print_error("%s recheck fail ofs 0x%llx ret=%d\n", + __func__, ofs, ret); ret = -EIO; } + mutex_unlock(p_dev->lock); + return ret; }