lkml.org 
[lkml]   [2019]   [Aug]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.2 095/131] i2c: at91: disable TXRDY interrupt after sending data
    Date
    From: Michał Mirosław <mirq-linux@rere.qmqm.pl>

    commit d12e3aae160fb26b534c4496b211d6e60a5179ed upstream.

    Driver was not disabling TXRDY interrupt after last TX byte.
    This caused interrupt storm until transfer timeouts for slow
    or broken device on the bus. The patch fixes the interrupt storm
    on my SAMA5D2-based board.

    Cc: stable@vger.kernel.org # 5.2.x
    [v5.2 introduced file split; the patch should apply to i2c-at91.c before the split]
    Fixes: fac368a04048 ("i2c: at91: add new driver")
    Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
    Acked-by: Ludovic Desroches <ludovic.desroches@microchip.com>
    Tested-by: Raag Jadav <raagjadav@gmail.com>
    Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/i2c/busses/i2c-at91-master.c | 9 +++++----
    1 file changed, 5 insertions(+), 4 deletions(-)

    --- a/drivers/i2c/busses/i2c-at91-master.c
    +++ b/drivers/i2c/busses/i2c-at91-master.c
    @@ -122,9 +122,11 @@ static void at91_twi_write_next_byte(str
    writeb_relaxed(*dev->buf, dev->base + AT91_TWI_THR);

    /* send stop when last byte has been written */
    - if (--dev->buf_len == 0)
    + if (--dev->buf_len == 0) {
    if (!dev->use_alt_cmd)
    at91_twi_write(dev, AT91_TWI_CR, AT91_TWI_STOP);
    + at91_twi_write(dev, AT91_TWI_IDR, AT91_TWI_TXRDY);
    + }

    dev_dbg(dev->dev, "wrote 0x%x, to go %zu\n", *dev->buf, dev->buf_len);

    @@ -542,9 +544,8 @@ static int at91_do_twi_transfer(struct a
    } else {
    at91_twi_write_next_byte(dev);
    at91_twi_write(dev, AT91_TWI_IER,
    - AT91_TWI_TXCOMP |
    - AT91_TWI_NACK |
    - AT91_TWI_TXRDY);
    + AT91_TWI_TXCOMP | AT91_TWI_NACK |
    + (dev->buf_len ? AT91_TWI_TXRDY : 0));
    }
    }


    \
     
     \ /
      Last update: 2019-08-05 15:26    [W:4.185 / U:0.212 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site