FAILED: patch "[PATCH] iio: temperature: maxim_thermocouple: use DMA-safe buffer for" failed to apply to 6.1-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 6.1-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.1.y
git checkout FETCH_HEAD
git cherry-pick -x ae5bc07ec9f73a41734270ef3f800c5c8a7e0ad3
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2025082300-collapse-wireless-5bdc@gregkh' --subject-prefix 'PATCH 6.1.y' HEAD^..
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From ae5bc07ec9f73a41734270ef3f800c5c8a7e0ad3 Mon Sep 17 00:00:00 2001
From: David Lechner <[email protected]>
Date: Mon, 21 Jul 2025 18:04:04 -0500
Subject: [PATCH] iio: temperature: maxim_thermocouple: use DMA-safe buffer for
spi_read()
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Replace using stack-allocated buffers with a DMA-safe buffer for use with spi_read(). This allows the driver to be safely used with DMA-enabled SPI controllers.
The buffer array is also converted to a struct with a union to make the usage of the memory in the buffer more clear and ensure proper alignment.
drivers/iio/temperature/maxim_thermocouple.c +16 -10
@@ -11,6 +11,7 @@#include <linux/module.h> #include <linux/err.h> #include <linux/spi/spi.h> +#include <linux/types.h> #include <linux/iio/iio.h> #include <linux/iio/sysfs.h> #include <linux/iio/trigger.h>
@@ -121,8 +122,15 @@ struct maxim_thermocouple_data {struct spi_device *spi;const struct maxim_thermocouple_chip *chip;char tc_type; - -u8 buffer[16 ]__aligned(IIO_DMA_MINALIGN) ; +/* Buffer for reading up to 2 hardware channels. */ +struct { +union { +__be16 raw16; +__be32 raw32; +__be16 raw[2 ]; + }; +aligned_s64 timestamp; + } buffer__aligned(IIO_DMA_MINALIGN) ; }; static int maxim_thermocouple_read(struct maxim_thermocouple_data *data,
@@ -130,18 +138,16 @@ static int maxim_thermocouple_read(struct maxim_thermocouple_data *data, {unsigned int storage_bytes = data->chip->read_size;unsigned int shift = chan->scan_type.shift + (chan->address *8 ); -__be16 buf16; -__be32 buf32;int ret;switch (storage_bytes) {case 2 : - ret =spi_read (data->spi, (void *)&buf16, storage_bytes); - *val =be16_to_cpu (buf16); + ret =spi_read (data->spi, &data->buffer.raw16, storage_bytes); + *val =be16_to_cpu (data->buffer.raw16);break ;case 4 : - ret =spi_read (data->spi, (void *)&buf32, storage_bytes); - *val =be32_to_cpu (buf32); + ret =spi_read (data->spi, &data->buffer.raw32, storage_bytes); + *val =be32_to_cpu (data->buffer.raw32);break ;default : ret = -EINVAL ;
@@ -166,9 +172,9 @@ static irqreturn_t maxim_thermocouple_trigger_handler(int irq, void *private)struct maxim_thermocouple_data *data =iio_priv (indio_dev);int ret; - ret =spi_read (data->spi, data->buffer, data->chip->read_size); + ret =spi_read (data->spi, data->buffer.raw, data->chip->read_size);if (!ret) { -iio_push_to_buffers_with_ts (indio_dev, data->buffer, +iio_push_to_buffers_with_ts (indio_dev, &data->buffer,sizeof (data->buffer),iio_get_time_ns (indio_dev)); }
Sasha Levin
maintainerPATCH 1/1 iio: temperature: maxim_thermocouple: use DMA-safe buffer for spi_read()
From: David Lechner <[email protected]>
[ Upstream commit ae5bc07ec9f73a41734270ef3f800c5c8a7e0ad3 ]
Replace using stack-allocated buffers with a DMA-safe buffer for use with spi_read(). This allows the driver to be safely used with DMA-enabled SPI controllers.
The buffer array is also converted to a struct with a union to make the usage of the memory in the buffer more clear and ensure proper alignment.
--- drivers/iio/temperature/maxim_thermocouple.c | 26 ++++++++++++-------- 1 file changed, 16 insertions(+), 10 deletions(-)
drivers/iio/temperature/maxim_thermocouple.c +16 -10
@@ -12,6 +12,7 @@#include <linux/mutex.h> #include <linux/err.h> #include <linux/spi/spi.h> +#include <linux/types.h> #include <linux/iio/iio.h> #include <linux/iio/sysfs.h> #include <linux/iio/trigger.h>
@@ -122,8 +123,15 @@ struct maxim_thermocouple_data {struct spi_device *spi;const struct maxim_thermocouple_chip *chip;char tc_type; - -u8 buffer[16 ]__aligned(IIO_DMA_MINALIGN) ; +/* Buffer for reading up to 2 hardware channels. */ +struct { +union { +__be16 raw16; +__be32 raw32; +__be16 raw[2 ]; + }; +aligned_s64 timestamp; + } buffer__aligned(IIO_DMA_MINALIGN) ; }; static int maxim_thermocouple_read(struct maxim_thermocouple_data *data,
@@ -131,18 +139,16 @@ static int maxim_thermocouple_read(struct maxim_thermocouple_data *data, {unsigned int storage_bytes = data->chip->read_size;unsigned int shift = chan->scan_type.shift + (chan->address *8 ); -__be16 buf16; -__be32 buf32;int ret;switch (storage_bytes) {case 2 : - ret =spi_read (data->spi, (void *)&buf16, storage_bytes); - *val =be16_to_cpu (buf16); + ret =spi_read (data->spi, &data->buffer.raw16, storage_bytes); + *val =be16_to_cpu (data->buffer.raw16);break ;case 4 : - ret =spi_read (data->spi, (void *)&buf32, storage_bytes); - *val =be32_to_cpu (buf32); + ret =spi_read (data->spi, &data->buffer.raw32, storage_bytes); + *val =be32_to_cpu (data->buffer.raw32);break ;default : ret = -EINVAL ;
@@ -167,9 +173,9 @@ static irqreturn_t maxim_thermocouple_trigger_handler(int irq, void *private)struct maxim_thermocouple_data *data =iio_priv (indio_dev);int ret; - ret =spi_read (data->spi, data->buffer, data->chip->read_size); + ret =spi_read (data->spi, data->buffer.raw, data->chip->read_size);if (!ret) { -iio_push_to_buffers_with_timestamp (indio_dev, data->buffer, +iio_push_to_buffers_with_timestamp (indio_dev, &data->buffer,iio_get_time_ns (indio_dev)); }
Signature · 1 line
2.50.1