• Serge Semin's avatar
    spi: dw: Refactor IRQ-based SPI transfer procedure · ddcc2733
    Serge Semin authored
    Current IRQ-based SPI transfer execution procedure doesn't work well at
    the final stage of the execution. If all the Tx data is sent out (written
    to the Tx FIFO) but there is some data left to receive, the Tx FIFO Empty
    IRQ will constantly happen until all of the requested inbound data is
    received. Though for a short period of time, but it will make the system
    less responsive. In order to fix that let's refactor the SPI transfer
    execution procedure by taking the Rx FIFO Full IRQ into account. We'll read
    and write SPI transfer data each time the IRQ happens as before. If all
    the outbound data is sent out, we'll disable the Tx FIFO Empty IRQ. If
    there is still some data to receive, we'll adjust the Rx FIFO Threshold
    level, so the next IRQ would be raised at the moment of all incoming data
    being available in the Rx FIFO.
    Signed-off-by: default avatarSerge Semin <Sergey.Semin@baikalelectronics.ru>
    Link: https://lore.kernel.org/r/20201007235511.4935-10-Sergey.Semin@baikalelectronics.ruSigned-off-by: default avatarMark Brown <broonie@kernel.org>
    ddcc2733
spi-dw-core.c 14.7 KB