• Heiner Kallweit's avatar
    spi: fsl-espi: fix and improve writing to TX FIFO · 54731265
    Heiner Kallweit authored
    This change addresses two issues:
    - If the TX FIFO is full the ISR polls until there's free space again.
      An ISR should never wait for something.
    - Currently the number of bytes to transfer is rounded up to the next
      multiple of 4. For most transfers therefore few bytes remain in the
      TX FIFO after end of transfer.
      This would cause the next transfer to fail and as a workaround the
      ESPI block is disabled / re-enabled in fsl_espi_change_mode.
      This seems to clear the FIFO's (although it's not mentioned in the
      spec).
    
    With this change the TX FIFO is filled as much as possible initially
    and whenever the ISR is called. Also the exact number of bytes is
    transferred.
    The spinlock protects against a potential race if the first interrupt
    occurs whilst the TX FIFO is still being initially filled.
    Signed-off-by: default avatarHeiner Kallweit <hkallweit1@gmail.com>
    Signed-off-by: default avatarMark Brown <broonie@kernel.org>
    54731265
spi-fsl-lib.h 3.43 KB