lkml.org 
[lkml]   [2018]   [Jul]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 073/157] mtd: cfi_cmdset_0002: Use right chip in do_ppb_xxlock()
    Date
    4.14-stable review patch.  If anyone has any objections, please let me know.

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

    From: Joakim Tjernlund <joakim.tjernlund@infinera.com>

    commit f93aa8c4de307069c270b2d81741961162bead6c upstream.

    do_ppb_xxlock() fails to add chip->start when querying for lock status
    (and chip_ready test), which caused false status reports.
    Fix that by adding adr += chip->start and adjust call sites
    accordingly.

    Fixes: 1648eaaa1575 ("mtd: cfi_cmdset_0002: Support Persistent Protection Bits (PPB) locking")
    Cc: stable@vger.kernel.org
    Signed-off-by: Joakim Tjernlund <joakim.tjernlund@infinera.com>
    Signed-off-by: Boris Brezillon <boris.brezillon@bootlin.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/mtd/chips/cfi_cmdset_0002.c | 9 +++++----
    1 file changed, 5 insertions(+), 4 deletions(-)

    --- a/drivers/mtd/chips/cfi_cmdset_0002.c
    +++ b/drivers/mtd/chips/cfi_cmdset_0002.c
    @@ -2553,8 +2553,9 @@ static int __maybe_unused do_ppb_xxlock(
    unsigned long timeo;
    int ret;

    + adr += chip->start;
    mutex_lock(&chip->mutex);
    - ret = get_chip(map, chip, adr + chip->start, FL_LOCKING);
    + ret = get_chip(map, chip, adr, FL_LOCKING);
    if (ret) {
    mutex_unlock(&chip->mutex);
    return ret;
    @@ -2572,8 +2573,8 @@ static int __maybe_unused do_ppb_xxlock(

    if (thunk == DO_XXLOCK_ONEBLOCK_LOCK) {
    chip->state = FL_LOCKING;
    - map_write(map, CMD(0xA0), chip->start + adr);
    - map_write(map, CMD(0x00), chip->start + adr);
    + map_write(map, CMD(0xA0), adr);
    + map_write(map, CMD(0x00), adr);
    } else if (thunk == DO_XXLOCK_ONEBLOCK_UNLOCK) {
    /*
    * Unlocking of one specific sector is not supported, so we
    @@ -2611,7 +2612,7 @@ static int __maybe_unused do_ppb_xxlock(
    map_write(map, CMD(0x00), chip->start);

    chip->state = FL_READY;
    - put_chip(map, chip, adr + chip->start);
    + put_chip(map, chip, adr);
    mutex_unlock(&chip->mutex);

    return ret;

    \
     
     \ /
      Last update: 2018-07-01 19:50    [W:4.041 / U:0.864 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site