Patch "spi: amd: Limit max transfer and message size" has been added to the 5.18-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    spi: amd: Limit max transfer and message size

to the 5.18-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     spi-amd-limit-max-transfer-and-message-size.patch
and it can be found in the queue-5.18 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 186902be4bbe431a355fb3149156b67771c0e3ad
Author: Cristian Ciocaltea <cristian.ciocaltea@xxxxxxxxxxxxx>
Date:   Wed Jul 6 13:06:22 2022 +0300

    spi: amd: Limit max transfer and message size
    
    [ Upstream commit 6ece49c56965544262523dae4a071ace3db63507 ]
    
    Enabling the SPI CS35L41 audio codec driver for Steam Deck [1]
    revealed a problem with the current AMD SPI controller driver
    implementation, consisting of an unrecoverable system hang.
    
    The issue can be prevented if we ensure the max transfer size
    and the max message size do not exceed the FIFO buffer size.
    
    According to the implementation of the downstream driver, the
    AMD SPI controller is not able to handle more than 70 bytes per
    transfer, which corresponds to the size of the FIFO buffer.
    
    Hence, let's fix this by setting the SPI limits mentioned above.
    
    [1] https://lore.kernel.org/r/20220621213819.262537-1-cristian.ciocaltea@xxxxxxxxxxxxx
    
    Reported-by: Anastasios Vacharakis <vacharakis@xxxxxxxxx>
    Fixes: bbb336f39efc ("spi: spi-amd: Add AMD SPI controller driver support")
    Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@xxxxxxxxxxxxx>
    Link: https://lore.kernel.org/r/20220706100626.1234731-2-cristian.ciocaltea@xxxxxxxxxxxxx
    Signed-off-by: Mark Brown <broonie@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/spi/spi-amd.c b/drivers/spi/spi-amd.c
index cba6a4486c24..efdcbe6c4c26 100644
--- a/drivers/spi/spi-amd.c
+++ b/drivers/spi/spi-amd.c
@@ -33,6 +33,7 @@
 #define AMD_SPI_RX_COUNT_REG	0x4B
 #define AMD_SPI_STATUS_REG	0x4C
 
+#define AMD_SPI_FIFO_SIZE	70
 #define AMD_SPI_MEM_SIZE	200
 
 /* M_CMD OP codes for SPI */
@@ -270,6 +271,11 @@ static int amd_spi_master_transfer(struct spi_master *master,
 	return 0;
 }
 
+static size_t amd_spi_max_transfer_size(struct spi_device *spi)
+{
+	return AMD_SPI_FIFO_SIZE;
+}
+
 static int amd_spi_probe(struct platform_device *pdev)
 {
 	struct device *dev = &pdev->dev;
@@ -302,6 +308,8 @@ static int amd_spi_probe(struct platform_device *pdev)
 	master->flags = SPI_MASTER_HALF_DUPLEX;
 	master->setup = amd_spi_master_setup;
 	master->transfer_one_message = amd_spi_master_transfer;
+	master->max_transfer_size = amd_spi_max_transfer_size;
+	master->max_message_size = amd_spi_max_transfer_size;
 
 	/* Register the controller with SPI framework */
 	err = devm_spi_register_master(dev, master);



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux