Message ID | 20170620151745.76jj6ht5bire5wad@lenoch |
---|---|
State | Accepted |
Commit | 4e118ce6d8e6f8b2d61f632ec0898886d15fa71c |
Delegated to: | Tom Rini |
Headers | show |
On Tue, Jun 20, 2017 at 05:17:45PM +0200, Ladislav Michl wrote: > commit dfe64e2c89731a3f9950d7acd8681b68df2bae03 > Author: Sergey Lapin <slapin@ossfans.org> > Date: Mon Jan 14 03:46:50 2013 +0000 > > mtd: resync with Linux-3.7.1 > > modified onenand_block_markbad to call mtd_block_markbad, > but as _block_markbad function pointer used by mtd_block_markbad > to do actual job is by default pointing back to > onenand_block_markbad there is no way this function ever > finishes its job. > Fix it by changing function body according current (4.12-rc6) > linux implementation. > Tested on IGEPv2 board with Muxed OneNAND(DDP) 512MB containing > several unerasable blocks this function marked bad. > > Signed-off-by: Ladislav Michl <ladis@linux-mips.org> Applied to u-boot/master, thanks!
diff --git a/drivers/mtd/onenand/onenand_base.c b/drivers/mtd/onenand/onenand_base.c index 2e3d0e5c9a..8282f683a5 100644 --- a/drivers/mtd/onenand/onenand_base.c +++ b/drivers/mtd/onenand/onenand_base.c @@ -1919,6 +1919,7 @@ static int onenand_default_block_markbad(struct mtd_info *mtd, loff_t ofs) */ int onenand_block_markbad(struct mtd_info *mtd, loff_t ofs) { + struct onenand_chip *this = mtd->priv; int ret; ret = onenand_block_isbad(mtd, ofs); @@ -1929,7 +1930,10 @@ int onenand_block_markbad(struct mtd_info *mtd, loff_t ofs) return ret; } - ret = mtd_block_markbad(mtd, ofs); + onenand_get_device(mtd, FL_WRITING); + ret = this->block_markbad(mtd, ofs); + onenand_release_device(mtd); + return ret; }
commit dfe64e2c89731a3f9950d7acd8681b68df2bae03 Author: Sergey Lapin <slapin@ossfans.org> Date: Mon Jan 14 03:46:50 2013 +0000 mtd: resync with Linux-3.7.1 modified onenand_block_markbad to call mtd_block_markbad, but as _block_markbad function pointer used by mtd_block_markbad to do actual job is by default pointing back to onenand_block_markbad there is no way this function ever finishes its job. Fix it by changing function body according current (4.12-rc6) linux implementation. Tested on IGEPv2 board with Muxed OneNAND(DDP) 512MB containing several unerasable blocks this function marked bad. Signed-off-by: Ladislav Michl <ladis@linux-mips.org> --- drivers/mtd/onenand/onenand_base.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)