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/mtdconcat.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/mtdconcat.c')
-rw-r--r-- | drivers/mtd/mtdconcat.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/drivers/mtd/mtdconcat.c b/drivers/mtd/mtdconcat.c index 6395b2fd52..fa430712d0 100644 --- a/drivers/mtd/mtdconcat.c +++ b/drivers/mtd/mtdconcat.c @@ -506,6 +506,28 @@ static int concat_block_markbad(struct mtd_info *mtd, loff_t ofs) return err; } +static int concat_block_markgood(struct mtd_info *mtd, loff_t ofs) +{ + struct mtd_concat *concat = CONCAT(mtd); + int i, err = -EINVAL; + + for (i = 0; i < concat->num_subdev; i++) { + struct mtd_info *subdev = concat->subdev[i]; + + if (ofs >= subdev->size) { + ofs -= subdev->size; + continue; + } + + err = mtd_block_markgood(subdev, ofs); + if (!err) + mtd->ecc_stats.badblocks--; + break; + } + + return err; +} + /* * This function constructs a virtual MTD device by concatenating * num_devs MTD devices. A pointer to the new device object is @@ -565,6 +587,8 @@ struct mtd_info *mtd_concat_create(struct mtd_info *subdev[], /* subdevices to c concat->mtd.block_isbad = concat_block_isbad; if (subdev[0]->block_markbad) concat->mtd.block_markbad = concat_block_markbad; + if (subdev[0]->block_markgood) + concat->mtd.block_markgood = concat_block_markgood; concat->mtd.ecc_stats.badblocks = subdev[0]->ecc_stats.badblocks; |