lkml.org 
[lkml]   [2016]   [Feb]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 13/51] mtd: onenand: use mtd_ooblayout_xxx() helpers where appropriate
    Date
    The mtd_ooblayout_xxx() helper functions have been added to avoid direct
    accesses to the ecclayout field, and thus ease for future reworks.
    Use these helpers in all places where the oobfree[] and eccpos[] arrays
    where directly accessed.

    Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
    ---
    drivers/mtd/onenand/onenand_base.c | 73 +++++++-------------------------------
    1 file changed, 13 insertions(+), 60 deletions(-)

    diff --git a/drivers/mtd/onenand/onenand_base.c b/drivers/mtd/onenand/onenand_base.c
    index 03a80de..6906c95 100644
    --- a/drivers/mtd/onenand/onenand_base.c
    +++ b/drivers/mtd/onenand/onenand_base.c
    @@ -1024,34 +1024,15 @@ static int onenand_transfer_auto_oob(struct mtd_info *mtd, uint8_t *buf, int col
    int thislen)
    {
    struct onenand_chip *this = mtd->priv;
    - struct nand_oobfree *free;
    - int readcol = column;
    - int readend = column + thislen;
    - int lastgap = 0;
    - unsigned int i;
    - uint8_t *oob_buf = this->oob_buf;
    -
    - free = this->ecclayout->oobfree;
    - for (i = 0; i < MTD_MAX_OOBFREE_ENTRIES && free->length; i++, free++) {
    - if (readcol >= lastgap)
    - readcol += free->offset - lastgap;
    - if (readend >= lastgap)
    - readend += free->offset - lastgap;
    - lastgap = free->offset + free->length;
    - }
    - this->read_bufferram(mtd, ONENAND_SPARERAM, oob_buf, 0, mtd->oobsize);
    - free = this->ecclayout->oobfree;
    - for (i = 0; i < MTD_MAX_OOBFREE_ENTRIES && free->length; i++, free++) {
    - int free_end = free->offset + free->length;
    - if (free->offset < readend && free_end > readcol) {
    - int st = max_t(int,free->offset,readcol);
    - int ed = min_t(int,free_end,readend);
    - int n = ed - st;
    - memcpy(buf, oob_buf + st, n);
    - buf += n;
    - } else if (column == 0)
    - break;
    - }
    + int ret;
    +
    + this->read_bufferram(mtd, ONENAND_SPARERAM, this->oob_buf, 0,
    + mtd->oobsize);
    + ret = mtd_ooblayout_get_databytes(mtd, buf, this->oob_buf,
    + column, thislen);
    + if (ret)
    + return ret;
    +
    return 0;
    }

    @@ -1808,34 +1789,7 @@ static int onenand_panic_write(struct mtd_info *mtd, loff_t to, size_t len,
    static int onenand_fill_auto_oob(struct mtd_info *mtd, u_char *oob_buf,
    const u_char *buf, int column, int thislen)
    {
    - struct onenand_chip *this = mtd->priv;
    - struct nand_oobfree *free;
    - int writecol = column;
    - int writeend = column + thislen;
    - int lastgap = 0;
    - unsigned int i;
    -
    - free = this->ecclayout->oobfree;
    - for (i = 0; i < MTD_MAX_OOBFREE_ENTRIES && free->length; i++, free++) {
    - if (writecol >= lastgap)
    - writecol += free->offset - lastgap;
    - if (writeend >= lastgap)
    - writeend += free->offset - lastgap;
    - lastgap = free->offset + free->length;
    - }
    - free = this->ecclayout->oobfree;
    - for (i = 0; i < MTD_MAX_OOBFREE_ENTRIES && free->length; i++, free++) {
    - int free_end = free->offset + free->length;
    - if (free->offset < writeend && free_end > writecol) {
    - int st = max_t(int,free->offset,writecol);
    - int ed = min_t(int,free_end,writeend);
    - int n = ed - st;
    - memcpy(oob_buf + st, buf, n);
    - buf += n;
    - } else if (column == 0)
    - break;
    - }
    - return 0;
    + return mtd_ooblayout_set_databytes(mtd, buf, oob_buf, column, thislen);
    }

    /**
    @@ -4036,10 +3990,9 @@ int onenand_scan(struct mtd_info *mtd, int maxchips)
    * The number of bytes available for a client to place data into
    * the out of band area
    */
    - mtd->oobavail = 0;
    - for (i = 0; i < MTD_MAX_OOBFREE_ENTRIES &&
    - this->ecclayout->oobfree[i].length; i++)
    - mtd->oobavail += this->ecclayout->oobfree[i].length;
    + mtd->oobavail = mtd_ooblayout_count_freebytes(mtd);
    + if (mtd->oobavail < 0)
    + mtd->oobavail = 0;

    mtd->ecclayout = this->ecclayout;
    mtd->ecc_strength = 1;
    --
    2.1.4
    \
     
     \ /
      Last update: 2016-02-04 12:01    [W:2.349 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site