• Vladimir Oltean's avatar
    spi: spi-fsl-dspi: Convert TCFQ users to XSPI FIFO mode · d59c90a2
    Vladimir Oltean authored
    The Transfer Complete Flag (TCF) interrupt gets raised after each write
    to the TX FIFO (PUSHR) which means that it is not possible to devise a
    transfer procedure that makes full utilization of the FIFO depth (4
    entries on most controllers, 16 entries on some).
    
    On the other hand, XSPI mode has a feature called "command cycling",
    which allows a single TX command to be run for a pre-specified number of
    TX words. When the command cycle ends, the Command Transfer Complete
    Flag bit asserts and raises an interrupt. The advantage in this mode is
    that the TX FIFO can be better utilized (more words can be batched at
    once).
    
    Other changes brought by this patch:
     - The dspi->rx_end variable has been removed, since now the
       dspi_fifo_write function sets up dspi->words_in_flight, so
       dspi_fifo_read knows how much to read without overrunning the RX
       buffer.
     - Stop using poll mode unconditionally for TCFQ mode, since XSPI mode
       is a little less efficient than that, and so, poll mode doesn't bring
       as many improvements for XSPI.
     - Stop relying on the hardware transfer counter (SPI_TCR_GET_TCNT) and
       instead increment the message->actual_length based on the newly
       introduced dspi->words_in_flight variable.
     - The CTARE register is now written in the hotpath instead of just at
       transfer init time, since it contains the DTCP field (transfer
       preload - the counter indicating how many txdata words will follow),
       which is a dynamic value.
    
    Due to the fact that the Chip Select toggling setting is part of the
    command written to the TX FIFO, the ending word of each buffer needs to
    be sent via its own TX command, so that we have a chance to emit a
    1-word command with deasserted PCS.
    Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
    Link: https://lore.kernel.org/r/20200304220044.11193-9-olteanv@gmail.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
    d59c90a2
spi-fsl-dspi.c 32.3 KB