lkml.org 
[lkml]   [2017]   [Sep]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 01/14] mtd: nand: mxc: Fix mxc_v1 ooblayout
    Date
    4.9-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Boris Brezillon <boris.brezillon@free-electrons.com>

    commit 3bff08dffe3115a25ce04b95ea75f6d868572c60 upstream.

    Commit a894cf6c5a82 ("mtd: nand: mxc: switch to mtd_ooblayout_ops")
    introduced a bug in the OOB layout description. Even if the driver claims
    that 3 ECC bytes are reserved to protect 512 bytes of data, it's actually
    5 ECC bytes to protect 512+6 bytes of data (some OOB bytes are also
    protected using extra ECC bytes).

    Fix the mxc_v1_ooblayout_{free,ecc}() functions to reflect this behavior.

    Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
    Fixes: a894cf6c5a82 ("mtd: nand: mxc: switch to mtd_ooblayout_ops")
    Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/mtd/nand/mxc_nand.c | 7 ++++---
    1 file changed, 4 insertions(+), 3 deletions(-)

    --- a/drivers/mtd/nand/mxc_nand.c
    +++ b/drivers/mtd/nand/mxc_nand.c
    @@ -877,6 +877,8 @@ static void mxc_do_addr_cycle(struct mtd
    }
    }

    +#define MXC_V1_ECCBYTES 5
    +
    static int mxc_v1_ooblayout_ecc(struct mtd_info *mtd, int section,
    struct mtd_oob_region *oobregion)
    {
    @@ -886,7 +888,7 @@ static int mxc_v1_ooblayout_ecc(struct m
    return -ERANGE;

    oobregion->offset = (section * 16) + 6;
    - oobregion->length = nand_chip->ecc.bytes;
    + oobregion->length = MXC_V1_ECCBYTES;

    return 0;
    }
    @@ -908,8 +910,7 @@ static int mxc_v1_ooblayout_free(struct
    oobregion->length = 4;
    }
    } else {
    - oobregion->offset = ((section - 1) * 16) +
    - nand_chip->ecc.bytes + 6;
    + oobregion->offset = ((section - 1) * 16) + MXC_V1_ECCBYTES + 6;
    if (section < nand_chip->ecc.steps)
    oobregion->length = (section * 16) + 6 -
    oobregion->offset;

    \
     
     \ /
      Last update: 2017-09-12 19:15    [W:4.518 / U:0.184 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site