| From 16d03892d157b7be9edc29c8b19c6863c70766a6 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 3 Nov 2022 15:00:29 +0200 |
| Subject: iio: temperature: ltc2983: make bulk write buffer DMA-safe |
| |
| From: Cosmin Tanislav <cosmin.tanislav@analog.com> |
| |
| [ Upstream commit 5e0176213949724fbe9a8e4a39817edce337b8a0 ] |
| |
| regmap_bulk_write() does not guarantee implicit DMA-safety, |
| even though the current implementation duplicates the given |
| buffer. Do not rely on it. |
| |
| Fixes: f110f3188e56 ("iio: temperature: Add support for LTC2983") |
| Signed-off-by: Cosmin Tanislav <cosmin.tanislav@analog.com> |
| Link: https://lore.kernel.org/r/20221103130041.2153295-2-demonsingur@gmail.com |
| Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/iio/temperature/ltc2983.c | 10 +++++----- |
| 1 file changed, 5 insertions(+), 5 deletions(-) |
| |
| diff --git a/drivers/iio/temperature/ltc2983.c b/drivers/iio/temperature/ltc2983.c |
| index 8306daa77908..b2ae2d2c7eef 100644 |
| --- a/drivers/iio/temperature/ltc2983.c |
| +++ b/drivers/iio/temperature/ltc2983.c |
| @@ -205,6 +205,7 @@ struct ltc2983_data { |
| * Holds the converted temperature |
| */ |
| __be32 temp ____cacheline_aligned; |
| + __be32 chan_val; |
| }; |
| |
| struct ltc2983_sensor { |
| @@ -309,19 +310,18 @@ static int __ltc2983_fault_handler(const struct ltc2983_data *st, |
| return 0; |
| } |
| |
| -static int __ltc2983_chan_assign_common(const struct ltc2983_data *st, |
| +static int __ltc2983_chan_assign_common(struct ltc2983_data *st, |
| const struct ltc2983_sensor *sensor, |
| u32 chan_val) |
| { |
| u32 reg = LTC2983_CHAN_START_ADDR(sensor->chan); |
| - __be32 __chan_val; |
| |
| chan_val |= LTC2983_CHAN_TYPE(sensor->type); |
| dev_dbg(&st->spi->dev, "Assign reg:0x%04X, val:0x%08X\n", reg, |
| chan_val); |
| - __chan_val = cpu_to_be32(chan_val); |
| - return regmap_bulk_write(st->regmap, reg, &__chan_val, |
| - sizeof(__chan_val)); |
| + st->chan_val = cpu_to_be32(chan_val); |
| + return regmap_bulk_write(st->regmap, reg, &st->chan_val, |
| + sizeof(st->chan_val)); |
| } |
| |
| static int __ltc2983_chan_custom_sensor_assign(struct ltc2983_data *st, |
| -- |
| 2.35.1 |
| |