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.vol...@st.com>
---
 drivers/spi/spi-stm32.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/drivers/spi/spi-stm32.c b/drivers/spi/spi-stm32.c
index b909afd9e99b..bd21b698af84 100644
--- a/drivers/spi/spi-stm32.c
+++ b/drivers/spi/spi-stm32.c
@@ -1021,6 +1021,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 */
-- 
2.7.4

Reply via email to