Improve usability of target mode by reporting FIFO errors and increasing the buffer size when DMA is used. While we're touching DMA stuff also switch to non-coherent memory, although this is unrelated to target mode. With the combination of the commit to increase the DMA buffer size and the commit to use non-coherent memory, the host mode performance figures are as follows on S32G3: # spidev_test --device /dev/spidev1.0 --bpw 8 --size <test_size> --cpha --iter 10000000 --speed 10000000 Coherent (4096 byte transfers): 6534 kbps Non-coherent: 7347 kbps Coherent (16 byte transfers): 447 kbps Non-coherent: 448 kbps Just for comparison running the same test in XSPI mode: 4096 byte transfers: 2143 kbps 16 byte transfers: 637 kbps These tests required hacking S32G3 to use DMA in host mode, although the figures should be representative of target mode too where DMA is used. And the other devices that use DMA in host mode should see similar improvements. Signed-off-by: James Clark <james.clark@linaro.org> --- Changes in v6: - Indentation fix - Fix trailers in first commit - Explain reasoning for "spi: spi-fsl-dspi: Stub out DMA functions" - Link to v5: https://lore.kernel.org/r/20250829-james-nxp-spi-dma-v5-0-3246957a6ea9@linaro.org Changes in v5: - Change some ints to size_t for consistency - Separate change for making buffer size a page and making target mode buffer larger - Explain reasoning for target mode buffer size change in commit message - Replace an if with a min() - Drop applied fixes: commit - Take Vladimir's change to separate -EINPROGRESS and cur_msg->status changes and fix the bug - Get max segment size from dmaengine rather than hardcoding it and store the size in struct fsl_dspi_dma - Link to v4: https://lore.kernel.org/r/20250627-james-nxp-spi-dma-v4-0-178dba20c120@linaro.org Changes in v4: - Fix !CONFIG_DMA_ENGINE build (and actually test it this time) - Reword completion counter comment - Reword some commit messages - Reset tries in dspi_poll() for each transfer - Check for fifo errors in dspi_poll() before checking for completion - Link to v3: https://lore.kernel.org/r/20250624-james-nxp-spi-dma-v3-0-e7d574f5f62c@linaro.org Changes in v3: - Stub out DMA functions in the driver so no-DMA builds work - Link to v2: https://lore.kernel.org/r/20250613-james-nxp-spi-dma-v2-0-017eecf24aab@linaro.org Changes in v2: - Store status in cur_msg->status rather than adding xfer_status - Show exact underflow/overflow flags in error message - Rate limit error messages - Add a comment about resetting the completion counter prior to transfer - Rename dspi_is_fifo_overflow() -> dspi_fifo_error() - Add performance figures to cover letter - Rebase onto https://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi.git/for-next to avoid some conflicts - Link to v1: https://lore.kernel.org/r/20250609-james-nxp-spi-dma-v1-0-2b831e714be2@linaro.org --- James Clark (7): spi: fsl-dspi: Avoid using -EINPROGRESS error code spi: fsl-dspi: Store status directly in cur_msg->status spi: spi-fsl-dspi: Stub out DMA functions spi: spi-fsl-dspi: Use non-coherent memory for DMA spi: spi-fsl-dspi: Use whole page for DMA buffers spi: spi-fsl-dspi: Increase target mode DMA buffer size spi: spi-fsl-dspi: Report FIFO overflows as errors drivers/spi/spi-fsl-dspi.c | 232 +++++++++++++++++++++++++++++++-------------- 1 file changed, 162 insertions(+), 70 deletions(-) --- base-commit: b320789d6883cc00ac78ce83bccbfe7ed58afcf0 change-id: 20250522-james-nxp-spi-dma-a997ebebfb6b Best regards, -- James Clark <james.clark@linaro.org>
On Tue, 02 Sep 2025 13:44:52 +0100, James Clark wrote: > Improve usability of target mode by reporting FIFO errors and increasing > the buffer size when DMA is used. While we're touching DMA stuff also > switch to non-coherent memory, although this is unrelated to target > mode. > > With the combination of the commit to increase the DMA buffer size and > the commit to use non-coherent memory, the host mode performance figures > are as follows on S32G3: > > [...] Applied to https://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi.git for-next Thanks! [1/7] spi: fsl-dspi: Avoid using -EINPROGRESS error code commit: bfddd34d67a0402c0476b36fc1b1f373cd5b0054 [2/7] spi: fsl-dspi: Store status directly in cur_msg->status commit: 5484440aa0a98b76e7829cd06dda33cf62830d73 [3/7] spi: spi-fsl-dspi: Stub out DMA functions commit: 4850f158c06eeaf4997fc65c47544f2c82ad5a45 [4/7] spi: spi-fsl-dspi: Use non-coherent memory for DMA commit: 36db0b03d3745700aca4fced26f6eb624f6ea4bc [5/7] spi: spi-fsl-dspi: Use whole page for DMA buffers commit: fbb618e11fa7976c5295facb28afbf1a08393f51 [6/7] spi: spi-fsl-dspi: Increase target mode DMA buffer size commit: 7d9baf1e530930e28b45805e3855a4a465a9e36e [7/7] spi: spi-fsl-dspi: Report FIFO overflows as errors commit: 5cc49b5a36b32a2dba41441ea13b93fb5ea21cfd All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted. You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed. If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced. Please add any relevant lists and maintainers to the CCs when replying to this mail. Thanks, Mark
On Tue, Sep 02, 2025 at 01:44:52PM +0100, James Clark wrote: > Improve usability of target mode by reporting FIFO errors and increasing > the buffer size when DMA is used. While we're touching DMA stuff also > switch to non-coherent memory, although this is unrelated to target > mode. > > With the combination of the commit to increase the DMA buffer size and > the commit to use non-coherent memory, the host mode performance figures > are as follows on S32G3: > > # spidev_test --device /dev/spidev1.0 --bpw 8 --size <test_size> --cpha --iter 10000000 --speed 10000000 > > Coherent (4096 byte transfers): 6534 kbps > Non-coherent: 7347 kbps > > Coherent (16 byte transfers): 447 kbps > Non-coherent: 448 kbps > > Just for comparison running the same test in XSPI mode: > > 4096 byte transfers: 2143 kbps > 16 byte transfers: 637 kbps > > These tests required hacking S32G3 to use DMA in host mode, although > the figures should be representative of target mode too where DMA is > used. And the other devices that use DMA in host mode should see similar > improvements. > > Signed-off-by: James Clark <james.clark@linaro.org> > --- > Changes in v6: > - Indentation fix > - Fix trailers in first commit > - Explain reasoning for "spi: spi-fsl-dspi: Stub out DMA functions" > - Link to v5: https://lore.kernel.org/r/20250829-james-nxp-spi-dma-v5-0-3246957a6ea9@linaro.org For the entire set: Reviewed-by: Vladimir Oltean <vladimir.oltean@nxp.com>
© 2016 - 2025 Red Hat, Inc.