spi: stm32h7: ensure message are smaller than max size
authorAlain Volmat <alain.volmat@foss.st.com>
Fri, 5 Feb 2021 18:59:28 +0000 (19:59 +0100)
committerMark Brown <broonie@kernel.org>
Fri, 5 Feb 2021 19:16:58 +0000 (19:16 +0000)
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>
drivers/spi/spi-stm32.c

index a46132e81533542f96771c9de4b463cee118b960..8e4db219b95d13eb843e0655a79d65fbd6d3ece3 100644 (file)
@@ -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 */