• Josef Ahmad's avatar
    i2c: designware: fix RX FIFO overrun · e6f34cea
    Josef Ahmad authored
    i2c_dw_xfer_msg() pushes a number of bytes to transmit/receive
    to/from the bus into the TX FIFO.
    For master-rx transactions, the maximum amount of data that can be
    received is calculated depending solely on TX and RX FIFO load.
    
    This is racy - TX FIFO may contain master-rx data yet to be
    processed, which will eventually land into the RX FIFO. This
    data is not taken into account and the function may request more
    data than the controller is actually capable of storing.
    
    This patch ensures the driver takes into account the outstanding
    master-rx data in TX FIFO to prevent RX FIFO overrun.
    Signed-off-by: default avatarJosef Ahmad <josef.ahmad@linux.intel.com>
    Acked-by: default avatarMika Westerberg <mika.westerberg@linux.intel.com>
    Signed-off-by: default avatarWolfram Sang <wsa@the-dreams.de>
    Cc: stable@kernel.org
    e6f34cea
i2c-designware-core.h 3.77 KB