• Lars-Peter Clausen's avatar
    spi: Add Analog Devices AXI SPI Engine controller support · b1353d1c
    Lars-Peter Clausen authored
    This patch adds support for the AXI SPI Engine controller which is a FPGA
    soft-peripheral which is used in some of Analog Devices' reference designs.
    
    The AXI SPI Engine controller is part of the SPI Engine framework[1] and
    allows memory mapped access to the SPI Engine control bus. This allows it
    to be used as a general purpose software driven SPI controller. The SPI
    Engine in addition offers some optional advanced acceleration and
    offloading capabilities, which are not part of this patch though and will
    be introduced separately.
    
    At the core of the SPI Engine framework is a small sort of co-processor
    that accepts a command stream and turns the commands into low-level SPI
    transactions. Communication is done through three memory mapped FIFOs in
    the register map of the AXI SPI Engine peripheral. One FIFO for the command
    stream and one each for transmit and receive data.
    
    The driver translates a spi_message in a command stream and writes it to
    the peripheral which executes it asynchronously. This allows it to perform
    very precise timings which are required for some SPI slave devices to
    achieve maximum performance (e.g. analog-to-digital and digital-to-analog
    converters). The execution flow is synchronized to the host system by a
    special synchronize instruction which generates a interrupt.
    
    [1] https://wiki.analog.com/resources/fpga/peripherals/spi_engineSigned-off-by: default avatarLars-Peter Clausen <lars@metafoo.de>
    Signed-off-by: default avatarMark Brown <broonie@kernel.org>
    b1353d1c
spi-axi-spi-engine.c 14.9 KB