diff options
author | Alain Volmat <alain.volmat@foss.st.com> | 2021-02-05 19:59:28 +0100 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2021-02-05 20:16:58 +0100 |
commit | 084de5232820c9e857ccc2282c3d94f33f92a381 (patch) | |
tree | 0c9262efea4ca314048c043318d37b49d51f623e /drivers/spi/spi-stm32.c | |
parent | spi: stm32: use bitfield macros (diff) | |
download | linux-084de5232820c9e857ccc2282c3d94f33f92a381.tar.xz linux-084de5232820c9e857ccc2282c3d94f33f92a381.zip |
spi: stm32h7: ensure message are smaller than max size
Ensure that messages given to transfer_one handler can actually be
handled by it. For that purpose rely on the SPI framework
spi_split_transfers_maxsize function to split messages whenever necessary.
Signed-off-by: Alain Volmat <alain.volmat@foss.st.com>
Link: https://lore.kernel.org/r/1612551572-495-5-git-send-email-alain.volmat@foss.st.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'drivers/spi/spi-stm32.c')
-rw-r--r-- | drivers/spi/spi-stm32.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/spi/spi-stm32.c b/drivers/spi/spi-stm32.c index a46132e81533..8e4db219b95d 100644 --- a/drivers/spi/spi-stm32.c +++ b/drivers/spi/spi-stm32.c @@ -1004,6 +1004,20 @@ static int stm32_spi_prepare_msg(struct spi_master *master, !!(spi_dev->mode & SPI_LSB_FIRST), !!(spi_dev->mode & SPI_CS_HIGH)); + /* On STM32H7, messages should not exceed a maximum size setted + * afterward via the set_number_of_data function. In order to + * ensure that, split large messages into several messages + */ + if (spi->cfg->set_number_of_data) { + int ret; + + ret = spi_split_transfers_maxsize(master, msg, + STM32H7_SPI_TSIZE_MAX, + GFP_KERNEL | GFP_DMA); + if (ret) + return ret; + } + spin_lock_irqsave(&spi->lock, flags); /* CPOL, CPHA and LSB FIRST bits have common register */ |