summaryrefslogtreecommitdiffstats
path: root/drivers/mtd/partition.c
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2016-02-23 14:41:48 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2016-03-15 08:56:53 +0100
commit172af2a30c4fbd71087103e4cf9b6c9f585d8602 (patch)
tree1e5c8022adfcb2191064a50d155f9239311924e3 /drivers/mtd/partition.c
parenta0fa6e1d2b6ac59ecb0cf531fb3b37fab636e336 (diff)
downloadbarebox-172af2a30c4fbd71087103e4cf9b6c9f585d8602.tar.gz
barebox-172af2a30c4fbd71087103e4cf9b6c9f585d8602.tar.xz
mtd: Add support for marking blocks as good
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/mtd/partition.c')
-rw-r--r--drivers/mtd/partition.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/mtd/partition.c b/drivers/mtd/partition.c
index c11a3db1c5..261e35c3f5 100644
--- a/drivers/mtd/partition.c
+++ b/drivers/mtd/partition.c
@@ -114,6 +114,21 @@ static int mtd_part_block_markbad(struct mtd_info *mtd, loff_t ofs)
return res;
}
+static int mtd_part_block_markgood(struct mtd_info *mtd, loff_t ofs)
+{
+ int res;
+
+ if (!(mtd->flags & MTD_WRITEABLE))
+ return -EROFS;
+ if (ofs >= mtd->size)
+ return -EINVAL;
+ ofs += mtd->master_offset;
+ res = mtd->master->block_markgood(mtd->master, ofs);
+ if (!res)
+ mtd->ecc_stats.badblocks--;
+ return res;
+}
+
struct mtd_info *mtd_add_partition(struct mtd_info *mtd, off_t offset,
uint64_t size, unsigned long flags, const char *name)
{
@@ -168,6 +183,7 @@ struct mtd_info *mtd_add_partition(struct mtd_info *mtd, off_t offset,
part->lock = mtd_part_lock;
part->unlock = mtd_part_unlock;
part->block_markbad = mtd->block_markbad ? mtd_part_block_markbad : NULL;
+ part->block_markgood = mtd->block_markgood ? mtd_part_block_markgood : NULL;
}
if (mtd->write_oob)