lkml.org 
[lkml]   [2018]   [May]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 17/87] i2c: designware: fix poll-after-enable regression
    Date
    4.9-stable review patch.  If anyone has any objections, please let me know.

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

    From: Alexander Monakov <amonakov@ispras.ru>

    commit 06cb616b1bca7080824acfedb3d4c898e7a64836 upstream.

    Not all revisions of DW I2C controller implement the enable status register.
    On platforms where that's the case (e.g. BG2CD and SPEAr ARM SoCs), waiting
    for enable will time out as reading the unimplemented register yields zero.

    It was observed that reading the IC_ENABLE_STATUS register once suffices to
    avoid getting it stuck on Bay Trail hardware, so replace polling with one
    dummy read of the register.

    Fixes: fba4adbbf670 ("i2c: designware: must wait for enable")
    Signed-off-by: Alexander Monakov <amonakov@ispras.ru>
    Tested-by: Ben Gardner <gardner.ben@gmail.com>
    Acked-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
    Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
    Cc: stable@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/i2c/busses/i2c-designware-core.c | 5 ++++-
    1 file changed, 4 insertions(+), 1 deletion(-)

    --- a/drivers/i2c/busses/i2c-designware-core.c
    +++ b/drivers/i2c/busses/i2c-designware-core.c
    @@ -507,7 +507,10 @@ static void i2c_dw_xfer_init(struct dw_i
    i2c_dw_disable_int(dev);

    /* Enable the adapter */
    - __i2c_dw_enable_and_wait(dev, true);
    + __i2c_dw_enable(dev, true);
    +
    + /* Dummy read to avoid the register getting stuck on Bay Trail */
    + dw_readl(dev, DW_IC_ENABLE_STATUS);

    /* Clear and enable interrupts */
    dw_readl(dev, DW_IC_CLR_INTR);

    \
     
     \ /
      Last update: 2018-05-22 07:31    [W:3.044 / U:1.164 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site