• George Cherian's avatar
    i2c: xlp9xx: Fix case where SSIF read transaction completes early · 5eb173f5
    George Cherian authored
    During ipmi stress tests we see occasional failure of transactions
    at the boot time. This happens in the case of a I2C_M_RECV_LEN
    transactions, when the read transfer completes (with the initial
    read length of 34) before the driver gets a chance to handle interrupts.
    
    The current driver code expects at least 2 interrupts for I2C_M_RECV_LEN
    transactions. The length is updated during the first interrupt, and  the
    buffer contents are only copied during subsequent interrupts. In case of
    just one interrupt, we will complete the transaction without copying
    out the bytes from RX fifo.
    
    Update the code to drain the RX fifo after the length update,
    so that the transaction completes correctly in all cases.
    Signed-off-by: default avatarGeorge Cherian <george.cherian@cavium.com>
    Signed-off-by: default avatarWolfram Sang <wsa@the-dreams.de>
    Cc: stable@kernel.org
    5eb173f5
i2c-xlp9xx.c 15.7 KB