lkml.org 
[lkml]   [2016]   [Mar]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 04/11] mtd: nand_bbt: add nand_bbt_markbad_factory() interface
    Date
    Some nand controller drivers(like docg4.c) mark factory bad block
    mark by accessing bbt buffer directly, so create this API to avoid
    breaking layer.

    Signed-off-by: Peter Pan <peterpandong@micron.com>
    ---
    drivers/mtd/nand/nand_bbt.c | 33 ++++++++++++++++++++++++++++++---
    include/linux/mtd/nand_bbt.h | 1 +
    2 files changed, 31 insertions(+), 3 deletions(-)

    diff --git a/drivers/mtd/nand/nand_bbt.c b/drivers/mtd/nand/nand_bbt.c
    index aab734e..2ac90a1 100644
    --- a/drivers/mtd/nand/nand_bbt.c
    +++ b/drivers/mtd/nand/nand_bbt.c
    @@ -1353,11 +1353,12 @@ int nand_isbad_bbt(struct mtd_info *mtd, loff_t offs, int allowbbt)
    }

    /**
    - * nand_markbad_bbt - [NAND Interface] Mark a block bad in the BBT
    + * nand_bbt_update_mark - update mark in the BBT
    * @mtd: MTD device structure
    * @offs: offset of the bad block
    + * @mark: block type mark
    */
    -int nand_markbad_bbt(struct mtd_info *mtd, loff_t offs)
    +static int nand_bbt_update_mark(struct mtd_info *mtd, loff_t offs, uint8_t mark)
    {
    struct nand_chip *this = mtd_to_nand(mtd);
    int block, ret = 0;
    @@ -1365,7 +1366,7 @@ int nand_markbad_bbt(struct mtd_info *mtd, loff_t offs)
    block = (int)(offs >> this->bbt_erase_shift);

    /* Mark bad block in memory */
    - bbt_mark_entry(this, block, BBT_BLOCK_WORN);
    + bbt_mark_entry(this, block, mark);

    /* Update flash-based bad block table */
    if (this->bbt_options & NAND_BBT_USE_FLASH)
    @@ -1375,6 +1376,16 @@ int nand_markbad_bbt(struct mtd_info *mtd, loff_t offs)
    }

    /**
    + * nand_markbad_bbt - [NAND Interface] Mark a block bad in the BBT
    + * @mtd: MTD device structure
    + * @offs: offset of the bad block
    + */
    +int nand_markbad_bbt(struct mtd_info *mtd, loff_t offs)
    +{
    + return nand_bbt_update_mark(mtd, offs, BBT_BLOCK_WORN);
    +}
    +
    +/**
    * nand_bbt_init - Initialize and locate/create a bad block table
    * @bbt: NAND BBT structure
    *
    @@ -1486,3 +1497,19 @@ int nand_bbt_markbad(struct nand_bbt *bbt, loff_t offs)
    return nand_markbad_bbt(bbt->mtd, offs);
    }
    EXPORT_SYMBOL(nand_bbt_markbad);
    +
    +/**
    + * nand_bbt_markbad_factory - [NAND BBT Interface] Mark a block as factory bad
    + * in the BBT
    + * @bbt: NAND BBT structure
    + * @offs: offset of the bad block
    + */
    +int nand_bbt_markbad_factory(struct nand_bbt *bbt, loff_t offs)
    +{
    + /*
    + * FIXME: For now, we call nand_markbad_bbt() directly. It will change
    + * when we use struct nand_bbt instead of struct nand_chip.
    + */
    + return nand_bbt_update_mark(bbt->mtd, offs, BBT_BLOCK_FACTORY_BAD);
    +}
    +EXPORT_SYMBOL(nand_bbt_markbad_factory);
    diff --git a/include/linux/mtd/nand_bbt.h b/include/linux/mtd/nand_bbt.h
    index c651d95..a0683b0 100644
    --- a/include/linux/mtd/nand_bbt.h
    +++ b/include/linux/mtd/nand_bbt.h
    @@ -192,5 +192,6 @@ void nand_bbt_destroy(struct nand_bbt *bbt);
    int nand_bbt_markbad(struct nand_bbt *bbt, loff_t offs);
    int nand_bbt_isreserved(struct nand_bbt *bbt, loff_t offs);
    int nand_bbt_isbad(struct nand_bbt *bbt, loff_t offs);
    +int nand_bbt_markbad_factory(struct nand_bbt *bbt, loff_t offs);

    #endif /* __LINUX_MTD_NAND_BBT_H */
    --
    1.9.1
    \
     
     \ /
      Last update: 2016-03-14 04:21    [W:6.504 / U:0.124 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site