[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20251109170545.7e07ab41@jic23-huawei>
Date: Sun, 9 Nov 2025 17:05:45 +0000
From: Jonathan Cameron <jic23@...nel.org>
To: David Lechner <dlechner@...libre.com>
Cc: Mark Brown <broonie@...nel.org>, Rob Herring <robh@...nel.org>,
Krzysztof Kozlowski <krzk+dt@...nel.org>, Conor Dooley
<conor+dt@...nel.org>, Marcelo Schmitt <marcelo.schmitt@...log.com>,
Michael Hennerich <michael.hennerich@...log.com>, Nuno Sá
<nuno.sa@...log.com>, Andy Shevchenko <andy@...nel.org>, Sean Anderson
<sean.anderson@...ux.dev>, linux-spi@...r.kernel.org,
devicetree@...r.kernel.org, linux-kernel@...r.kernel.org,
linux-iio@...r.kernel.org
Subject: Re: [PATCH v2 0/6] spi: add multi-bus support
On Fri, 07 Nov 2025 14:52:46 -0600
David Lechner <dlechner@...libre.com> wrote:
> This series is adding support for SPI controllers and peripherals that
> have multiple SPI data buses (data buses being independent sets of
> SDI/SDO lines, each with their own serializer/deserializer).
>
> This series covers this specific use case:
>
> +--------------+ +---------+
> | SPI | | SPI |
> | Controller | | ADC |
> | | | |
> | CS0 |--->| CS |
> | SCLK |--->| SCLK |
> | SDO |--->| SDI |
> | SDI0 |<---| SDOA |
> | SDI1 |<---| SDOB |
> | SDI2 |<---| SDOC |
> | SDI3 |<---| SDOD |
> +--------------+ +--------+
>
> The ADC is a simultaneous sampling ADC that can convert 4 samples at the
> same time. It has 4 data output lines (SDOA-D) that each contain the
> data of one of the 4 channels. So it requires a SPI controller with 4
> separate deserializers in order to receive all of the information at the
> same time.
>
> This should also work for the use case in [1] as well. (Some of the
> patches in this series were already submitted there). In that case the
> SPI controller is used kind of like it is two separate SPI controllers,
> each with its own chip select, clock, and data lines.
>
> [1]: https://lore.kernel.org/linux-spi/20250616220054.3968946-1-sean.anderson@linux.dev/
>
> The DT bindings are a fairly straight-forward mapping of which pins on
> the peripheral are connected to which pins on the controller. The SPI
> core code parses this and makes the information available to drivers.
> When a peripheral driver sees that multiple data buses are wired up, it
> can chose to use them when sending messages.
>
> The SPI message API is a bit higher-level than just specifying the
> number of data lines for a SPI transfer though. I did some research on
> other SPI controllers that have this feature. They tend to be the kind
> meant for connecting to two flash memory chips at the same time but can
> be used more generically as well. They generally have the option to
> either use one bus at a time (Sean's use case), or can mirror the same
> data on multiple buses (no users of this yet) or can perform striping
> of a single data FIFO/DMA stream to/from the two buses (our use case).
>
> For now, the API assumes that if you want to do mirror/striping, then
> you want to use all available data buses. Otherwise, it just uses the
> first data bus for "normal" SPI transfers.
>
> Signed-off-by: David Lechner <dlechner@...libre.com>
Series looks good to me. If the SPI and DT folk are fine with it, then
I guess time to ask Mark for another immutable branch so the SPI stuff
can be in the SPI tree and IIO tree.
J
> ---
> Changes in v2:
> - Renamed devicetree property spi-buses to spi-data-buses. (Driver code
> was already using spi->data_buses, so it matches).
> - Fixed a small bug in the AXI ADC driver changes.
> - Moved one line of code in the ADC driver changes.
> - Link to v1: https://lore.kernel.org/r/20251014-spi-add-multi-bus-support-v1-0-2098c12d6f5f@baylibre.com
>
> ---
> David Lechner (6):
> spi: dt-bindings: Add spi-data-buses property
> spi: Support multi-bus controllers
> spi: add multi_bus_mode field to struct spi_transfer
> spi: axi-spi-engine: support SPI_MULTI_BUS_MODE_STRIPE
> dt-bindings: iio: adc: adi,ad7380: add spi-buses property
> iio: adc: ad7380: Add support for multiple SPI buses
>
> .../devicetree/bindings/iio/adc/adi,ad7380.yaml | 22 ++++
> .../bindings/spi/spi-peripheral-props.yaml | 12 ++
> drivers/iio/adc/ad7380.c | 42 ++++---
> drivers/spi/spi-axi-spi-engine.c | 128 ++++++++++++++++++++-
> drivers/spi/spi.c | 28 ++++-
> include/linux/spi/spi.h | 23 ++++
> 6 files changed, 237 insertions(+), 18 deletions(-)
> ---
> base-commit: 1a26618e7466b8d825989201086c235e76aa999a
> change-id: 20250815-spi-add-multi-bus-support-1b35d05c54f6
>
> Best regards,
Powered by blists - more mailing lists