From 8266ec48f1e067f76b1fca9cbfb41ae5982510c5 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 25 Aug 2025 09:33:03 +0200 Subject: [PATCH] 6.12-stable patches added patches: iio-imu-inv_icm42600-change-invalid-data-error-to-ebusy.patch iio-imu-inv_icm42600-convert-to-uxx-and-sxx-integer-types.patch iio-imu-inv_icm42600-switch-timestamp-type-from-int64_t-__aligned-8-to-aligned_s64.patch iio-imu-inv_icm42600-use-instead-of-memset.patch --- ...0-change-invalid-data-error-to-ebusy.patch | 49 ++ ...convert-to-uxx-and-sxx-integer-types.patch | 423 ++++++++++++++++++ ...m-int64_t-__aligned-8-to-aligned_s64.patch | 52 +++ ...u-inv_icm42600-use-instead-of-memset.patch | 70 +++ queue-6.12/series | 4 + 5 files changed, 598 insertions(+) create mode 100644 queue-6.12/iio-imu-inv_icm42600-change-invalid-data-error-to-ebusy.patch create mode 100644 queue-6.12/iio-imu-inv_icm42600-convert-to-uxx-and-sxx-integer-types.patch create mode 100644 queue-6.12/iio-imu-inv_icm42600-switch-timestamp-type-from-int64_t-__aligned-8-to-aligned_s64.patch create mode 100644 queue-6.12/iio-imu-inv_icm42600-use-instead-of-memset.patch diff --git a/queue-6.12/iio-imu-inv_icm42600-change-invalid-data-error-to-ebusy.patch b/queue-6.12/iio-imu-inv_icm42600-change-invalid-data-error-to-ebusy.patch new file mode 100644 index 0000000000..1725b05aec --- /dev/null +++ b/queue-6.12/iio-imu-inv_icm42600-change-invalid-data-error-to-ebusy.patch @@ -0,0 +1,49 @@ +From stable+bounces-172734-greg=kroah.com@vger.kernel.org Sun Aug 24 15:39:15 2025 +From: Sasha Levin +Date: Sun, 24 Aug 2025 09:39:03 -0400 +Subject: iio: imu: inv_icm42600: change invalid data error to -EBUSY +To: stable@vger.kernel.org +Cc: Jean-Baptiste Maneyrol , Andy Shevchenko , Sean Nyekjaer , Jonathan Cameron , Sasha Levin +Message-ID: <20250824133904.2896884-4-sashal@kernel.org> + +From: Jean-Baptiste Maneyrol + +[ Upstream commit dfdc31e7ccf3ac1d5ec01d5120c71e14745e3dd8 ] + +Temperature sensor returns the temperature of the mechanical parts +of the chip. If both accel and gyro are off, the temperature sensor is +also automatically turned off and returns invalid data. + +In this case, returning -EBUSY error code is better then -EINVAL and +indicates userspace that it needs to retry reading temperature in +another context. + +Fixes: bc3eb0207fb5 ("iio: imu: inv_icm42600: add temperature sensor support") +Signed-off-by: Jean-Baptiste Maneyrol +Cc: stable@vger.kernel.org +Reviewed-by: Andy Shevchenko +Reviewed-by: Sean Nyekjaer +Link: https://patch.msgid.link/20250808-inv-icm42600-change-temperature-error-code-v1-1-986fbf63b77d@tdk.com +Signed-off-by: Jonathan Cameron +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + drivers/iio/imu/inv_icm42600/inv_icm42600_temp.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +--- a/drivers/iio/imu/inv_icm42600/inv_icm42600_temp.c ++++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_temp.c +@@ -32,8 +32,12 @@ static int inv_icm42600_temp_read(struct + goto exit; + + *temp = (s16)be16_to_cpup(raw); ++ /* ++ * Temperature data is invalid if both accel and gyro are off. ++ * Return -EBUSY in this case. ++ */ + if (*temp == INV_ICM42600_DATA_INVALID) +- ret = -EINVAL; ++ ret = -EBUSY; + + exit: + mutex_unlock(&st->lock); diff --git a/queue-6.12/iio-imu-inv_icm42600-convert-to-uxx-and-sxx-integer-types.patch b/queue-6.12/iio-imu-inv_icm42600-convert-to-uxx-and-sxx-integer-types.patch new file mode 100644 index 0000000000..98b4fac528 --- /dev/null +++ b/queue-6.12/iio-imu-inv_icm42600-convert-to-uxx-and-sxx-integer-types.patch @@ -0,0 +1,423 @@ +From stable+bounces-172733-greg=kroah.com@vger.kernel.org Sun Aug 24 15:39:13 2025 +From: Sasha Levin +Date: Sun, 24 Aug 2025 09:39:02 -0400 +Subject: iio: imu: inv_icm42600: Convert to uXX and sXX integer types +To: stable@vger.kernel.org +Cc: Andy Shevchenko , Jean-Baptiste Maneyrol , Jonathan Cameron , Sasha Levin +Message-ID: <20250824133904.2896884-3-sashal@kernel.org> + +From: Andy Shevchenko + +[ Upstream commit a4135386fa49c2a170b89296da12c4a3be2089d9 ] + +The driver code is full of intXX_t and uintXX_t types which is +not the pattern we use in the IIO subsystem. Switch the driver +to use kernel internal types for that. No functional changes. + +Signed-off-by: Andy Shevchenko +Acked-by: Jean-Baptiste Maneyrol +Link: https://patch.msgid.link/20250616090423.575736-1-andriy.shevchenko@linux.intel.com +Signed-off-by: Jonathan Cameron +Stable-dep-of: dfdc31e7ccf3 ("iio: imu: inv_icm42600: change invalid data error to -EBUSY") +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + drivers/iio/imu/inv_icm42600/inv_icm42600.h | 8 ++-- + drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c | 26 +++++++-------- + drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.c | 22 ++++++------ + drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.h | 10 ++--- + drivers/iio/imu/inv_icm42600/inv_icm42600_core.c | 6 +-- + drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c | 36 ++++++++++----------- + drivers/iio/imu/inv_icm42600/inv_icm42600_temp.c | 6 +-- + 7 files changed, 57 insertions(+), 57 deletions(-) + +--- a/drivers/iio/imu/inv_icm42600/inv_icm42600.h ++++ b/drivers/iio/imu/inv_icm42600/inv_icm42600.h +@@ -164,11 +164,11 @@ struct inv_icm42600_state { + struct inv_icm42600_suspended suspended; + struct iio_dev *indio_gyro; + struct iio_dev *indio_accel; +- uint8_t buffer[2] __aligned(IIO_DMA_MINALIGN); ++ u8 buffer[2] __aligned(IIO_DMA_MINALIGN); + struct inv_icm42600_fifo fifo; + struct { +- int64_t gyro; +- int64_t accel; ++ s64 gyro; ++ s64 accel; + } timestamp; + }; + +@@ -410,7 +410,7 @@ const struct iio_mount_matrix * + inv_icm42600_get_mount_matrix(const struct iio_dev *indio_dev, + const struct iio_chan_spec *chan); + +-uint32_t inv_icm42600_odr_to_period(enum inv_icm42600_odr odr); ++u32 inv_icm42600_odr_to_period(enum inv_icm42600_odr odr); + + int inv_icm42600_set_accel_conf(struct inv_icm42600_state *st, + struct inv_icm42600_sensor_conf *conf, +--- a/drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c ++++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c +@@ -177,7 +177,7 @@ static const struct iio_chan_spec inv_ic + */ + struct inv_icm42600_accel_buffer { + struct inv_icm42600_fifo_sensor_data accel; +- int16_t temp; ++ s16 temp; + aligned_s64 timestamp; + }; + +@@ -241,7 +241,7 @@ out_unlock: + + static int inv_icm42600_accel_read_sensor(struct iio_dev *indio_dev, + struct iio_chan_spec const *chan, +- int16_t *val) ++ s16 *val) + { + struct inv_icm42600_state *st = iio_device_get_drvdata(indio_dev); + struct inv_icm42600_sensor_state *accel_st = iio_priv(indio_dev); +@@ -284,7 +284,7 @@ static int inv_icm42600_accel_read_senso + if (ret) + goto exit; + +- *val = (int16_t)be16_to_cpup(data); ++ *val = (s16)be16_to_cpup(data); + if (*val == INV_ICM42600_DATA_INVALID) + ret = -EINVAL; + exit: +@@ -492,11 +492,11 @@ static int inv_icm42600_accel_read_offse + int *val, int *val2) + { + struct device *dev = regmap_get_device(st->map); +- int64_t val64; +- int32_t bias; ++ s64 val64; ++ s32 bias; + unsigned int reg; +- int16_t offset; +- uint8_t data[2]; ++ s16 offset; ++ u8 data[2]; + int ret; + + if (chan->type != IIO_ACCEL) +@@ -550,7 +550,7 @@ static int inv_icm42600_accel_read_offse + * result in micro (1000000) + * (offset * 5 * 9.806650 * 1000000) / 10000 + */ +- val64 = (int64_t)offset * 5LL * 9806650LL; ++ val64 = (s64)offset * 5LL * 9806650LL; + /* for rounding, add + or - divisor (10000) divided by 2 */ + if (val64 >= 0) + val64 += 10000LL / 2LL; +@@ -568,10 +568,10 @@ static int inv_icm42600_accel_write_offs + int val, int val2) + { + struct device *dev = regmap_get_device(st->map); +- int64_t val64; +- int32_t min, max; ++ s64 val64; ++ s32 min, max; + unsigned int reg, regval; +- int16_t offset; ++ s16 offset; + int ret; + + if (chan->type != IIO_ACCEL) +@@ -596,7 +596,7 @@ static int inv_icm42600_accel_write_offs + inv_icm42600_accel_calibbias[1]; + max = inv_icm42600_accel_calibbias[4] * 1000000L + + inv_icm42600_accel_calibbias[5]; +- val64 = (int64_t)val * 1000000LL + (int64_t)val2; ++ val64 = (s64)val * 1000000LL + (s64)val2; + if (val64 < min || val64 > max) + return -EINVAL; + +@@ -671,7 +671,7 @@ static int inv_icm42600_accel_read_raw(s + int *val, int *val2, long mask) + { + struct inv_icm42600_state *st = iio_device_get_drvdata(indio_dev); +- int16_t data; ++ s16 data; + int ret; + + switch (chan->type) { +--- a/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.c ++++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.c +@@ -26,28 +26,28 @@ + #define INV_ICM42600_FIFO_HEADER_ODR_GYRO BIT(0) + + struct inv_icm42600_fifo_1sensor_packet { +- uint8_t header; ++ u8 header; + struct inv_icm42600_fifo_sensor_data data; +- int8_t temp; ++ s8 temp; + } __packed; + #define INV_ICM42600_FIFO_1SENSOR_PACKET_SIZE 8 + + struct inv_icm42600_fifo_2sensors_packet { +- uint8_t header; ++ u8 header; + struct inv_icm42600_fifo_sensor_data accel; + struct inv_icm42600_fifo_sensor_data gyro; +- int8_t temp; ++ s8 temp; + __be16 timestamp; + } __packed; + #define INV_ICM42600_FIFO_2SENSORS_PACKET_SIZE 16 + + ssize_t inv_icm42600_fifo_decode_packet(const void *packet, const void **accel, +- const void **gyro, const int8_t **temp, ++ const void **gyro, const s8 **temp, + const void **timestamp, unsigned int *odr) + { + const struct inv_icm42600_fifo_1sensor_packet *pack1 = packet; + const struct inv_icm42600_fifo_2sensors_packet *pack2 = packet; +- uint8_t header = *((const uint8_t *)packet); ++ u8 header = *((const u8 *)packet); + + /* FIFO empty */ + if (header & INV_ICM42600_FIFO_HEADER_MSG) { +@@ -100,7 +100,7 @@ ssize_t inv_icm42600_fifo_decode_packet( + + void inv_icm42600_buffer_update_fifo_period(struct inv_icm42600_state *st) + { +- uint32_t period_gyro, period_accel, period; ++ u32 period_gyro, period_accel, period; + + if (st->fifo.en & INV_ICM42600_SENSOR_GYRO) + period_gyro = inv_icm42600_odr_to_period(st->conf.gyro.odr); +@@ -204,8 +204,8 @@ int inv_icm42600_buffer_update_watermark + { + size_t packet_size, wm_size; + unsigned int wm_gyro, wm_accel, watermark; +- uint32_t period_gyro, period_accel, period; +- uint32_t latency_gyro, latency_accel, latency; ++ u32 period_gyro, period_accel, period; ++ u32 latency_gyro, latency_accel, latency; + bool restore; + __le16 raw_wm; + int ret; +@@ -459,7 +459,7 @@ int inv_icm42600_buffer_fifo_read(struct + __be16 *raw_fifo_count; + ssize_t i, size; + const void *accel, *gyro, *timestamp; +- const int8_t *temp; ++ const s8 *temp; + unsigned int odr; + int ret; + +@@ -550,7 +550,7 @@ int inv_icm42600_buffer_hwfifo_flush(str + struct inv_icm42600_sensor_state *gyro_st = iio_priv(st->indio_gyro); + struct inv_icm42600_sensor_state *accel_st = iio_priv(st->indio_accel); + struct inv_sensors_timestamp *ts; +- int64_t gyro_ts, accel_ts; ++ s64 gyro_ts, accel_ts; + int ret; + + gyro_ts = iio_get_time_ns(st->indio_gyro); +--- a/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.h ++++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.h +@@ -28,7 +28,7 @@ struct inv_icm42600_state; + struct inv_icm42600_fifo { + unsigned int on; + unsigned int en; +- uint32_t period; ++ u32 period; + struct { + unsigned int gyro; + unsigned int accel; +@@ -41,7 +41,7 @@ struct inv_icm42600_fifo { + size_t accel; + size_t total; + } nb; +- uint8_t data[2080] __aligned(IIO_DMA_MINALIGN); ++ u8 data[2080] __aligned(IIO_DMA_MINALIGN); + }; + + /* FIFO data packet */ +@@ -52,7 +52,7 @@ struct inv_icm42600_fifo_sensor_data { + } __packed; + #define INV_ICM42600_FIFO_DATA_INVALID -32768 + +-static inline int16_t inv_icm42600_fifo_get_sensor_data(__be16 d) ++static inline s16 inv_icm42600_fifo_get_sensor_data(__be16 d) + { + return be16_to_cpu(d); + } +@@ -60,7 +60,7 @@ static inline int16_t inv_icm42600_fifo_ + static inline bool + inv_icm42600_fifo_is_data_valid(const struct inv_icm42600_fifo_sensor_data *s) + { +- int16_t x, y, z; ++ s16 x, y, z; + + x = inv_icm42600_fifo_get_sensor_data(s->x); + y = inv_icm42600_fifo_get_sensor_data(s->y); +@@ -75,7 +75,7 @@ inv_icm42600_fifo_is_data_valid(const st + } + + ssize_t inv_icm42600_fifo_decode_packet(const void *packet, const void **accel, +- const void **gyro, const int8_t **temp, ++ const void **gyro, const s8 **temp, + const void **timestamp, unsigned int *odr); + + extern const struct iio_buffer_setup_ops inv_icm42600_buffer_ops; +--- a/drivers/iio/imu/inv_icm42600/inv_icm42600_core.c ++++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_core.c +@@ -103,7 +103,7 @@ const struct regmap_config inv_icm42600_ + EXPORT_SYMBOL_NS_GPL(inv_icm42600_spi_regmap_config, IIO_ICM42600); + + struct inv_icm42600_hw { +- uint8_t whoami; ++ u8 whoami; + const char *name; + const struct inv_icm42600_conf *conf; + }; +@@ -188,9 +188,9 @@ inv_icm42600_get_mount_matrix(const stru + return &st->orientation; + } + +-uint32_t inv_icm42600_odr_to_period(enum inv_icm42600_odr odr) ++u32 inv_icm42600_odr_to_period(enum inv_icm42600_odr odr) + { +- static uint32_t odr_periods[INV_ICM42600_ODR_NB] = { ++ static u32 odr_periods[INV_ICM42600_ODR_NB] = { + /* reserved values */ + 0, 0, 0, + /* 8kHz */ +--- a/drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c ++++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c +@@ -77,7 +77,7 @@ static const struct iio_chan_spec inv_ic + */ + struct inv_icm42600_gyro_buffer { + struct inv_icm42600_fifo_sensor_data gyro; +- int16_t temp; ++ s16 temp; + aligned_s64 timestamp; + }; + +@@ -139,7 +139,7 @@ out_unlock: + + static int inv_icm42600_gyro_read_sensor(struct inv_icm42600_state *st, + struct iio_chan_spec const *chan, +- int16_t *val) ++ s16 *val) + { + struct device *dev = regmap_get_device(st->map); + struct inv_icm42600_sensor_conf conf = INV_ICM42600_SENSOR_CONF_INIT; +@@ -179,7 +179,7 @@ static int inv_icm42600_gyro_read_sensor + if (ret) + goto exit; + +- *val = (int16_t)be16_to_cpup(data); ++ *val = (s16)be16_to_cpup(data); + if (*val == INV_ICM42600_DATA_INVALID) + ret = -EINVAL; + exit: +@@ -399,11 +399,11 @@ static int inv_icm42600_gyro_read_offset + int *val, int *val2) + { + struct device *dev = regmap_get_device(st->map); +- int64_t val64; +- int32_t bias; ++ s64 val64; ++ s32 bias; + unsigned int reg; +- int16_t offset; +- uint8_t data[2]; ++ s16 offset; ++ u8 data[2]; + int ret; + + if (chan->type != IIO_ANGL_VEL) +@@ -457,7 +457,7 @@ static int inv_icm42600_gyro_read_offset + * result in nano (1000000000) + * (offset * 64 * Pi * 1000000000) / (2048 * 180) + */ +- val64 = (int64_t)offset * 64LL * 3141592653LL; ++ val64 = (s64)offset * 64LL * 3141592653LL; + /* for rounding, add + or - divisor (2048 * 180) divided by 2 */ + if (val64 >= 0) + val64 += 2048 * 180 / 2; +@@ -475,9 +475,9 @@ static int inv_icm42600_gyro_write_offse + int val, int val2) + { + struct device *dev = regmap_get_device(st->map); +- int64_t val64, min, max; ++ s64 val64, min, max; + unsigned int reg, regval; +- int16_t offset; ++ s16 offset; + int ret; + + if (chan->type != IIO_ANGL_VEL) +@@ -498,11 +498,11 @@ static int inv_icm42600_gyro_write_offse + } + + /* inv_icm42600_gyro_calibbias: min - step - max in nano */ +- min = (int64_t)inv_icm42600_gyro_calibbias[0] * 1000000000LL + +- (int64_t)inv_icm42600_gyro_calibbias[1]; +- max = (int64_t)inv_icm42600_gyro_calibbias[4] * 1000000000LL + +- (int64_t)inv_icm42600_gyro_calibbias[5]; +- val64 = (int64_t)val * 1000000000LL + (int64_t)val2; ++ min = (s64)inv_icm42600_gyro_calibbias[0] * 1000000000LL + ++ (s64)inv_icm42600_gyro_calibbias[1]; ++ max = (s64)inv_icm42600_gyro_calibbias[4] * 1000000000LL + ++ (s64)inv_icm42600_gyro_calibbias[5]; ++ val64 = (s64)val * 1000000000LL + (s64)val2; + if (val64 < min || val64 > max) + return -EINVAL; + +@@ -577,7 +577,7 @@ static int inv_icm42600_gyro_read_raw(st + int *val, int *val2, long mask) + { + struct inv_icm42600_state *st = iio_device_get_drvdata(indio_dev); +- int16_t data; ++ s16 data; + int ret; + + switch (chan->type) { +@@ -806,9 +806,9 @@ int inv_icm42600_gyro_parse_fifo(struct + ssize_t i, size; + unsigned int no; + const void *accel, *gyro, *timestamp; +- const int8_t *temp; ++ const s8 *temp; + unsigned int odr; +- int64_t ts_val; ++ s64 ts_val; + /* buffer is copied to userspace, zeroing it to avoid any data leak */ + struct inv_icm42600_gyro_buffer buffer = { }; + +--- a/drivers/iio/imu/inv_icm42600/inv_icm42600_temp.c ++++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_temp.c +@@ -13,7 +13,7 @@ + #include "inv_icm42600.h" + #include "inv_icm42600_temp.h" + +-static int inv_icm42600_temp_read(struct inv_icm42600_state *st, int16_t *temp) ++static int inv_icm42600_temp_read(struct inv_icm42600_state *st, s16 *temp) + { + struct device *dev = regmap_get_device(st->map); + __be16 *raw; +@@ -31,7 +31,7 @@ static int inv_icm42600_temp_read(struct + if (ret) + goto exit; + +- *temp = (int16_t)be16_to_cpup(raw); ++ *temp = (s16)be16_to_cpup(raw); + if (*temp == INV_ICM42600_DATA_INVALID) + ret = -EINVAL; + +@@ -48,7 +48,7 @@ int inv_icm42600_temp_read_raw(struct ii + int *val, int *val2, long mask) + { + struct inv_icm42600_state *st = iio_device_get_drvdata(indio_dev); +- int16_t temp; ++ s16 temp; + int ret; + + if (chan->type != IIO_TEMP) diff --git a/queue-6.12/iio-imu-inv_icm42600-switch-timestamp-type-from-int64_t-__aligned-8-to-aligned_s64.patch b/queue-6.12/iio-imu-inv_icm42600-switch-timestamp-type-from-int64_t-__aligned-8-to-aligned_s64.patch new file mode 100644 index 0000000000..ab38152805 --- /dev/null +++ b/queue-6.12/iio-imu-inv_icm42600-switch-timestamp-type-from-int64_t-__aligned-8-to-aligned_s64.patch @@ -0,0 +1,52 @@ +From stable+bounces-172731-greg=kroah.com@vger.kernel.org Sun Aug 24 15:39:11 2025 +From: Sasha Levin +Date: Sun, 24 Aug 2025 09:39:00 -0400 +Subject: iio: imu: inv_icm42600: switch timestamp type from int64_t __aligned(8) to aligned_s64 +To: stable@vger.kernel.org +Cc: Jonathan Cameron , Jean-Baptiste Maneyrol , Andy Shevchenko , Sasha Levin +Message-ID: <20250824133904.2896884-1-sashal@kernel.org> + +From: Jonathan Cameron + +[ Upstream commit 27e6ddf291b1c05bfcc3534e8212ed6c46447c60 ] + +The vast majority of IIO drivers use aligned_s64 for the type of the +timestamp field. It is not a bug to use int64_t and until this series +iio_push_to_buffers_with_timestamp() took and int64_t timestamp, it +is inconsistent. This change is to remove that inconsistency and +ensure there is one obvious choice for future drivers. + +Acked-by: Jean-Baptiste Maneyrol +Reviewed-by: Andy Shevchenko +Link: https://patch.msgid.link/20241215182912.481706-19-jic23@kernel.org +Signed-off-by: Jonathan Cameron +Stable-dep-of: dfdc31e7ccf3 ("iio: imu: inv_icm42600: change invalid data error to -EBUSY") +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c | 2 +- + drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +--- a/drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c ++++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c +@@ -178,7 +178,7 @@ static const struct iio_chan_spec inv_ic + struct inv_icm42600_accel_buffer { + struct inv_icm42600_fifo_sensor_data accel; + int16_t temp; +- int64_t timestamp __aligned(8); ++ aligned_s64 timestamp; + }; + + #define INV_ICM42600_SCAN_MASK_ACCEL_3AXIS \ +--- a/drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c ++++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c +@@ -78,7 +78,7 @@ static const struct iio_chan_spec inv_ic + struct inv_icm42600_gyro_buffer { + struct inv_icm42600_fifo_sensor_data gyro; + int16_t temp; +- int64_t timestamp __aligned(8); ++ aligned_s64 timestamp; + }; + + #define INV_ICM42600_SCAN_MASK_GYRO_3AXIS \ diff --git a/queue-6.12/iio-imu-inv_icm42600-use-instead-of-memset.patch b/queue-6.12/iio-imu-inv_icm42600-use-instead-of-memset.patch new file mode 100644 index 0000000000..8620921f40 --- /dev/null +++ b/queue-6.12/iio-imu-inv_icm42600-use-instead-of-memset.patch @@ -0,0 +1,70 @@ +From stable+bounces-172732-greg=kroah.com@vger.kernel.org Sun Aug 24 15:39:12 2025 +From: Sasha Levin +Date: Sun, 24 Aug 2025 09:39:01 -0400 +Subject: iio: imu: inv_icm42600: use = { } instead of memset() +To: stable@vger.kernel.org +Cc: "David Lechner" , "Nuno Sá" , "Andy Shevchenko" , "Jonathan Cameron" , "Sasha Levin" +Message-ID: <20250824133904.2896884-2-sashal@kernel.org> + +From: David Lechner + +[ Upstream commit 352112e2d9aab6a156c2803ae14eb89a9fd93b7d ] + +Use { } instead of memset() to zero-initialize stack memory to simplify +the code. + +Signed-off-by: David Lechner +Reviewed-by: Nuno Sá +Reviewed-by: Andy Shevchenko +Link: https://patch.msgid.link/20250611-iio-zero-init-stack-with-instead-of-memset-v1-16-ebb2d0a24302@baylibre.com +Signed-off-by: Jonathan Cameron +Stable-dep-of: dfdc31e7ccf3 ("iio: imu: inv_icm42600: change invalid data error to -EBUSY") +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c | 5 ++--- + drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c | 5 ++--- + 2 files changed, 4 insertions(+), 6 deletions(-) + +--- a/drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c ++++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c +@@ -905,7 +905,8 @@ int inv_icm42600_accel_parse_fifo(struct + const int8_t *temp; + unsigned int odr; + int64_t ts_val; +- struct inv_icm42600_accel_buffer buffer; ++ /* buffer is copied to userspace, zeroing it to avoid any data leak */ ++ struct inv_icm42600_accel_buffer buffer = { }; + + /* parse all fifo packets */ + for (i = 0, no = 0; i < st->fifo.count; i += size, ++no) { +@@ -924,8 +925,6 @@ int inv_icm42600_accel_parse_fifo(struct + inv_sensors_timestamp_apply_odr(ts, st->fifo.period, + st->fifo.nb.total, no); + +- /* buffer is copied to userspace, zeroing it to avoid any data leak */ +- memset(&buffer, 0, sizeof(buffer)); + memcpy(&buffer.accel, accel, sizeof(buffer.accel)); + /* convert 8 bits FIFO temperature in high resolution format */ + buffer.temp = temp ? (*temp * 64) : 0; +--- a/drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c ++++ b/drivers/iio/imu/inv_icm42600/inv_icm42600_gyro.c +@@ -809,7 +809,8 @@ int inv_icm42600_gyro_parse_fifo(struct + const int8_t *temp; + unsigned int odr; + int64_t ts_val; +- struct inv_icm42600_gyro_buffer buffer; ++ /* buffer is copied to userspace, zeroing it to avoid any data leak */ ++ struct inv_icm42600_gyro_buffer buffer = { }; + + /* parse all fifo packets */ + for (i = 0, no = 0; i < st->fifo.count; i += size, ++no) { +@@ -828,8 +829,6 @@ int inv_icm42600_gyro_parse_fifo(struct + inv_sensors_timestamp_apply_odr(ts, st->fifo.period, + st->fifo.nb.total, no); + +- /* buffer is copied to userspace, zeroing it to avoid any data leak */ +- memset(&buffer, 0, sizeof(buffer)); + memcpy(&buffer.gyro, gyro, sizeof(buffer.gyro)); + /* convert 8 bits FIFO temperature in high resolution format */ + buffer.temp = temp ? (*temp * 64) : 0; diff --git a/queue-6.12/series b/queue-6.12/series index beee554a64..364cb6b81a 100644 --- a/queue-6.12/series +++ b/queue-6.12/series @@ -244,3 +244,7 @@ drm-i915-icl-tc-cache-the-max-lane-count-value.patch ovl-use-i_mutex_parent-when-locking-parent-in-ovl_create_temp.patch powerpc-boot-fix-build-with-gcc-15.patch tls-fix-handling-of-zero-length-records-on-the-rx_list.patch +iio-imu-inv_icm42600-switch-timestamp-type-from-int64_t-__aligned-8-to-aligned_s64.patch +iio-imu-inv_icm42600-use-instead-of-memset.patch +iio-imu-inv_icm42600-convert-to-uxx-and-sxx-integer-types.patch +iio-imu-inv_icm42600-change-invalid-data-error-to-ebusy.patch -- 2.47.3