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; }