Add markbad function
Add missing markbad function If not, it's hang when it entered the mtd->mark_bad(). Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
This commit is contained in:
parent
c438ea175d
commit
1714f51a20
drivers/mtd/onenand
|
@ -1583,6 +1583,37 @@ int onenand_block_isbad(struct mtd_info *mtd, loff_t ofs)
|
|||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* onenand_default_block_markbad - [DEFAULT] mark a block bad
|
||||
* @param mtd MTD device structure
|
||||
* @param ofs offset from device start
|
||||
*
|
||||
* This is the default implementation, which can be overridden by
|
||||
* a hardware specific driver.
|
||||
*/
|
||||
static int onenand_default_block_markbad(struct mtd_info *mtd, loff_t ofs)
|
||||
{
|
||||
struct onenand_chip *this = mtd->priv;
|
||||
struct bbm_info *bbm = this->bbm;
|
||||
u_char buf[2] = {0, 0};
|
||||
struct mtd_oob_ops ops = {
|
||||
.mode = MTD_OOB_PLACE,
|
||||
.ooblen = 2,
|
||||
.oobbuf = buf,
|
||||
.ooboffs = 0,
|
||||
};
|
||||
int block;
|
||||
|
||||
/* Get block number */
|
||||
block = ((int) ofs) >> bbm->bbt_erase_shift;
|
||||
if (bbm->bbt)
|
||||
bbm->bbt[block >> 2] |= 0x01 << ((block & 0x03) << 1);
|
||||
|
||||
/* We write two bytes, so we dont have to mess with 16 bit access */
|
||||
ofs += mtd->oobsize + (bbm->badblockpos & ~0x01);
|
||||
return onenand_write_oob_nolock(mtd, ofs, &ops);
|
||||
}
|
||||
|
||||
/**
|
||||
* onenand_block_markbad - [MTD Interface] Mark the block at the given offset as bad
|
||||
* @param mtd MTD device structure
|
||||
|
@ -2048,6 +2079,8 @@ int onenand_scan(struct mtd_info *mtd, int maxchips)
|
|||
if (!this->write_bufferram)
|
||||
this->write_bufferram = onenand_write_bufferram;
|
||||
|
||||
if (!this->block_markbad)
|
||||
this->block_markbad = onenand_default_block_markbad;
|
||||
if (!this->scan_bbt)
|
||||
this->scan_bbt = onenand_default_bbt;
|
||||
|
||||
|
|
Loading…
Reference in New Issue