lkml.org 
[lkml]   [2020]   [Feb]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 24/66] gpio: xilinx: Fix bug where the wrong GPIO register is written to
    Date
    From: Paul Thomas <pthomas8589@gmail.com>

    commit c3afa804c58e5c30ac63858b527fffadc88bce82 upstream.

    Care is taken with "index", however with the current version
    the actual xgpio_writereg is using index for data but
    xgpio_regoffset(chip, i) for the offset. And since i is already
    incremented it is incorrect. This patch fixes it so that index
    is used for the offset too.

    Cc: stable@vger.kernel.org
    Signed-off-by: Paul Thomas <pthomas8589@gmail.com>
    Link: https://lore.kernel.org/r/20200125221410.8022-1-pthomas8589@gmail.com
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/gpio/gpio-xilinx.c | 5 +++--
    1 file changed, 3 insertions(+), 2 deletions(-)

    --- a/drivers/gpio/gpio-xilinx.c
    +++ b/drivers/gpio/gpio-xilinx.c
    @@ -147,9 +147,10 @@ static void xgpio_set_multiple(struct gp
    for (i = 0; i < gc->ngpio; i++) {
    if (*mask == 0)
    break;
    + /* Once finished with an index write it out to the register */
    if (index != xgpio_index(chip, i)) {
    xgpio_writereg(chip->regs + XGPIO_DATA_OFFSET +
    - xgpio_regoffset(chip, i),
    + index * XGPIO_CHANNEL_OFFSET,
    chip->gpio_state[index]);
    spin_unlock_irqrestore(&chip->gpio_lock[index], flags);
    index = xgpio_index(chip, i);
    @@ -165,7 +166,7 @@ static void xgpio_set_multiple(struct gp
    }

    xgpio_writereg(chip->regs + XGPIO_DATA_OFFSET +
    - xgpio_regoffset(chip, i), chip->gpio_state[index]);
    + index * XGPIO_CHANNEL_OFFSET, chip->gpio_state[index]);

    spin_unlock_irqrestore(&chip->gpio_lock[index], flags);
    }

    \
     
     \ /
      Last update: 2020-02-18 21:08    [W:2.668 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site