From nobody Mon Apr 6 23:35:57 2026 Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3F6FF3E9F87 for ; Tue, 17 Mar 2026 15:03:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773759838; cv=none; b=ScJS8e8lG4kKtjgNlZ3VBjLotXA1p7va2kZUGVVpFS1VLlFdmycckuasoZokl0SFyhsLVkNQ0sXprdfuvJF0sd58hmBIRJT8l3AO+JtUxP1XVn5RprqkouHH5pNAevzqlADnIB1WQMruTr+BRfp26JhRbxYhlUno1b1zYZjw0Yg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773759838; c=relaxed/simple; bh=LhhuQW+kXumxf4ZHnfybInW36mhcntwwfWxHRNAL3MI=; h=From:To:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=BpaDCvLwTgow4plSHgsF/QI/Q2lrl/Jl5ZG0fw3nPBdguneA210QDqlhLBg+tf4r3tOtqJjcJIrqnzieXGedKUTYLlND3/etYNlqFE4N6jOOnslhxMt2HYeZxJq7gbuASBqwOZnVwWnw5LKXjTlAT1Un3nTPcHra0FTou+9F1Jc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b=PEt4xb8b; arc=none smtp.client-ip=209.85.128.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="PEt4xb8b" Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-48539cbb7b1so35130995e9.3 for ; Tue, 17 Mar 2026 08:03:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1773759834; x=1774364634; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=D6Ly+Y1OaGrVPqGuh6+YPQYhQbgbR6xEfPk5ktqV5IQ=; b=PEt4xb8bTBmjG8/yiQqWtWbhlqRlleg5cuuPH4tW3mNdQ9lGjqiB5f34TGWOQMEpKU UraYsoxowHUnVWE/0IlxbDAD4yoVA7F+jIkzBHqYdqmMslWFndRXK/T/VkvIjyvOkndS 1VIX2jqTd1gT/Bqu0tXZ6/UjalIh4soy0LPncQnt7i78Mwx+XT9zmGS1zt16nLmU6NBB 5cdWF/H6VafobRLAt81RjL8RNpf2Stq43qBIXNkGg0/Rmf811LoaeSCOC+lnl+JXahUo B3JfWnwVzqIlSzF+ap7M2KLpisfOAW1XBEPxNvRllBOsELeKRqIMmFBPcUHFb+sziK+y 2ZcA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773759834; x=1774364634; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=D6Ly+Y1OaGrVPqGuh6+YPQYhQbgbR6xEfPk5ktqV5IQ=; b=R/5a7ayPjcEIO/AAvg556SE4MsItwBD3usjJ9WaS5Quqd6Rz9b+gsPW7/ecsrYggR1 //AWy4jCJq+XpBLWwup2aggMiP9pKh7UR+lcW3LiLa7E9DEsgjgNN5YBr//Z4V9PWFKV 4l+jQxK6YEUnY3X1ufqxrfx4cl6JrYiKSqbHPN9qL/skLMVOjc6JO+2qcw5XqO/wJhh9 5yxmN7uYQYX1Xy7vHWQhadOsxSSnpHmoF92JRgQW0Cd0ho/CgBYWlLwzn5ugOxeHsZRo WDaOnpqg99xlfFnQDKmuNmSTKMoxrFLrHWpSeG8OnVKTt1MiCzqddaRI2civA1ZcSeIT TnkQ== X-Forwarded-Encrypted: i=1; AJvYcCU0lvSeAPLqcRyOn9vG+O+fj1eRvaT79AQoOHHTLWlvLH2eHY9JuwIcko8DiBNsXoOFK75i2B5xpHFDEVE=@vger.kernel.org X-Gm-Message-State: AOJu0Yxg3orq56Jmf0pUEgMHyaSA9wKOtoKCop9/N/zvw9EIOgKb2907 mawXYazWZb7k4RJJ1Q/XyeQk1TQPyXe1+1WH5JnNdoPxknKQvIdXaPIqY/2zFwXpJtc= X-Gm-Gg: ATEYQzwTS/LYqCvVw9Qo3912t+jzghyykAocLlmWQxHtmVkFu3C3pxrrJYn4j/6VQTw 5BO0+/Pk/IFK8yoAMxgidGPl6D6zv/1KLkdJkLvsgCf+4cPOczLkK3fsnieH8dDDsaKTgCZOyph TfNeQZ81MESDvGOxNp8cJ8Jlv5f9bJRN2FPGyROdxn2lGXZQ7Zhp3xEJ6SpU5zLsh6jdjePQHG4 BAqR9hTiE3YSWNUvJQ2KEr4eXhkWx01zt9mFTbkx4bIt1MYO6+lBVh6GRjtQ7E4NXejmvii9YZ1 tyRoLTgzWBgH2SaQcQxJ+IRUye/Sy+9z0cy6quDCoBeKEbBQZT8XZ1GyrAh3p8Ige3MvP1jULRP g0TOV+CqMMgvmePbWgf+fBTj2RA6FnCogg0ZiUAax3LKxH+gfZPpJAAIUL36Mo39SL/j8pEWRZQ WRs0+P X-Received: by 2002:a05:600c:c8d:b0:486:de04:5906 with SMTP id 5b1f17b1804b1-486de045a22mr27707715e9.19.1773759834477; Tue, 17 Mar 2026 08:03:54 -0700 (PDT) Received: from localhost ([151.37.101.237]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48634a7ac93sm51971735e9.2.2026.03.17.08.03.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 17 Mar 2026 08:03:53 -0700 (PDT) From: Francesco Lavra To: Lorenzo Bianconi , Jonathan Cameron , David Lechner , =?UTF-8?q?Nuno=20S=C3=A1?= , Andy Shevchenko , linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v8 1/6] iio: imu: st_lsm6dsx: Fix check for invalid samples from FIFO Date: Tue, 17 Mar 2026 16:03:53 +0100 Message-Id: <20260317150353.3878258-1-flavra@baylibre.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260317150316.3878107-1-flavra@baylibre.com> References: <20260317150316.3878107-1-flavra@baylibre.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=3896; i=flavra@baylibre.com; h=from:subject; bh=LhhuQW+kXumxf4ZHnfybInW36mhcntwwfWxHRNAL3MI=; b=owEB7QES/pANAwAKAe3xO3POlDZfAcsmYgBpuW1ZL3a1po6S4t6UgIXVMNxGsQxe+I2iIBwUl 6sQCXcfE7yJAbMEAAEKAB0WIQSGV4VPlTvcox7DFObt8TtzzpQ2XwUCabltWQAKCRDt8TtzzpQ2 X1J/DACyD4pzkSXnCGT5iq86Iumn+gkCFDC3Pr9/8KiY6RtBNBRXV0Lo1jKtM0nfoTfr6jOddm5 3oHlr8qpqd8tdfuywK2UVpeYjhx8+eggCUizNtoJSNzAsTXjWSOxRcGSxK2kusKOWGHhc9H+UlB biQffbicZ6+L9j09cOvI4MNbMphHBiuub8QvDMXXzwiezy6FblGoRdKKTUkfSPcwrUqYuP8FdxT aYRtOPDYgH5D9KvXage+7hqGu2iZZ0QAp8ERB3xzRDyQ0Ov/NeVlVtZNfWRymI/llgJDXlCMk6w 80FjomauvE8v6nK7WohfLgXoEygwHIa6q9E3WEPZbyQdQnTLOZ3aBiJtdqoQtYX78T+vfT/Iixr eloR4uYJc7arn7OZ0xMWMDKVIhzUM8rBnY8J4yBitHS99hLDhyg6SktlRnSs9kVAk4Kv6AnCraJ m2eMWcvp6bTiXjxzNVtfeZn8/zdOPt6Vk6X7zJOfA7Q/CDQ23THXC24zQU4D5F3zC080M= X-Developer-Key: i=flavra@baylibre.com; a=openpgp; fpr=8657854F953BDCA31EC314E6EDF13B73CE94365F Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The DRDY_MASK feature implemented in sensor chips marks gyroscope and accelerometer invalid samples (i.e. samples that have been acquired during the settling time of sensor filters) with the special values 0x7FFFh, 0x7FFE, and 0x7FFD. The driver checks FIFO samples against these special values in order to discard invalid samples; however, it does the check regardless of the type of samples being processed, whereas this feature is specific to gyroscope and accelerometer data. This could cause valid samples to be discarded. Fix the above check so that it takes into account the type of samples being processed. To avoid casting to __le16 * when checking sample values, clean up the type representation for data read from the FIFO. Fixes: 960506ed2c69 ("iio: imu: st_lsm6dsx: enable drdy-mask if available") Signed-off-by: Francesco Lavra Acked-by: Lorenzo Bianconi --- .../iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c | 31 +++++++++++++------ 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c b/drivers/iio/i= mu/st_lsm6dsx/st_lsm6dsx_buffer.c index 5b28a3ffcc3d..19232146bd61 100644 --- a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c +++ b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c @@ -365,8 +365,6 @@ static inline int st_lsm6dsx_read_block(struct st_lsm6d= sx_hw *hw, u8 addr, return 0; } =20 -#define ST_LSM6DSX_IIO_BUFF_SIZE (ALIGN(ST_LSM6DSX_SAMPLE_SIZE, \ - sizeof(s64)) + sizeof(s64)) /** * st_lsm6dsx_read_fifo() - hw FIFO read routine * @hw: Pointer to instance of struct st_lsm6dsx_hw. @@ -537,16 +535,24 @@ int st_lsm6dsx_read_fifo(struct st_lsm6dsx_hw *hw) } =20 #define ST_LSM6DSX_INVALID_SAMPLE 0x7ffd +static bool st_lsm6dsx_check_data(u8 tag, __le16 *data) +{ + if ((tag =3D=3D ST_LSM6DSX_GYRO_TAG || tag =3D=3D ST_LSM6DSX_ACC_TAG) && + (s16)le16_to_cpup(data) >=3D ST_LSM6DSX_INVALID_SAMPLE) + return false; + + return true; +} + static int st_lsm6dsx_push_tagged_data(struct st_lsm6dsx_hw *hw, u8 tag, - u8 *data, s64 ts) + __le16 *data, s64 ts) { - s16 val =3D le16_to_cpu(*(__le16 *)data); struct st_lsm6dsx_sensor *sensor; struct iio_dev *iio_dev; =20 /* invalid sample during bootstrap phase */ - if (val >=3D ST_LSM6DSX_INVALID_SAMPLE) + if (!st_lsm6dsx_check_data(tag, data)) return -EINVAL; =20 /* @@ -609,7 +615,13 @@ int st_lsm6dsx_read_tagged_fifo(struct st_lsm6dsx_hw *= hw) * must be passed a buffer that is aligned to 8 bytes so * as to allow insertion of a naturally aligned timestamp. */ - u8 iio_buff[ST_LSM6DSX_IIO_BUFF_SIZE] __aligned(8); + struct { + union { + __le16 data[3]; + __le32 fifo_ts; + }; + aligned_s64 timestamp; + } iio_buff =3D { }; u8 tag; bool reset_ts =3D false; int i, err, read_len; @@ -648,7 +660,7 @@ int st_lsm6dsx_read_tagged_fifo(struct st_lsm6dsx_hw *h= w) =20 for (i =3D 0; i < pattern_len; i +=3D ST_LSM6DSX_TAGGED_SAMPLE_SIZE) { - memcpy(iio_buff, &hw->buff[i + ST_LSM6DSX_TAG_SIZE], + memcpy(&iio_buff, &hw->buff[i + ST_LSM6DSX_TAG_SIZE], ST_LSM6DSX_SAMPLE_SIZE); =20 tag =3D hw->buff[i] >> 3; @@ -659,7 +671,7 @@ int st_lsm6dsx_read_tagged_fifo(struct st_lsm6dsx_hw *h= w) * B0 =3D ts[7:0], B1 =3D ts[15:8], B2 =3D ts[23:16], * B3 =3D ts[31:24] */ - ts =3D le32_to_cpu(*((__le32 *)iio_buff)); + ts =3D le32_to_cpu(iio_buff.fifo_ts); /* * check if hw timestamp engine is going to * reset (the sensor generates an interrupt @@ -670,7 +682,8 @@ int st_lsm6dsx_read_tagged_fifo(struct st_lsm6dsx_hw *h= w) reset_ts =3D true; ts *=3D hw->ts_gain; } else { - st_lsm6dsx_push_tagged_data(hw, tag, iio_buff, + st_lsm6dsx_push_tagged_data(hw, tag, + iio_buff.data, ts); } } --=20 2.39.5