spi: Add Analog Devices AXI SPI Engine controller support
authorLars-Peter Clausen <lars@metafoo.de>
Thu, 4 Feb 2016 16:13:30 +0000 (17:13 +0100)
committerMark Brown <broonie@kernel.org>
Fri, 5 Feb 2016 18:12:57 +0000 (18:12 +0000)
commitb1353d1c1d4555b7c40066fa2cacc7da266e9904
tree9312609fe10097a2d44da7f5a813d75dc5c6017a
parent2ec3b6287b12a7131c28cd9408b368cd451bdc48
spi: Add Analog Devices AXI SPI Engine controller support

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_engine

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/Kconfig
drivers/spi/Makefile
drivers/spi/spi-axi-spi-engine.c [new file with mode: 0644]