diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2016-02-23 14:41:48 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2016-03-15 08:56:53 +0100 |
commit | 172af2a30c4fbd71087103e4cf9b6c9f585d8602 (patch) | |
tree | 1e5c8022adfcb2191064a50d155f9239311924e3 /drivers/mtd/partition.c | |
parent | a0fa6e1d2b6ac59ecb0cf531fb3b37fab636e336 (diff) | |
download | barebox-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.c | 16 |
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) |