From nobody Tue Apr 7 13:47:54 2026 Received: from mail-wm1-f44.google.com (mail-wm1-f44.google.com [209.85.128.44]) (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 CABC33128AE for ; Wed, 25 Feb 2026 10:17:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772014639; cv=none; b=K16OAyrnghXLqco/DgxSU5glTmg6LM9FVHtYUg+WVPFjjt9jgTV/AMwqdSaaRxkeanKjao2bzUmqqC/k16gpd2MxCXU+QDtzBSxzQxkGrZXkYDE+sv8MVzx7n7bPHC2g28v8AwCMkltBlnNWDB5h672XePEbBdBePU2yoAIrx8k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772014639; c=relaxed/simple; bh=8vSSfk/mqV/Diy8xqYAvuYstYG9PfyLi4Xga/dffatA=; h=From:To:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Hu8mAxhSDipsuEeYCvjePcxrdRI2OqyND58Wz0ePsbNrrO8lhacegYFdPNErL+uL3IJXYxTl1mEtBL6Gr9T9sNDIenKPhGZd45chWXroBrbRRIQzU67aelzJRKy/8BWLBCZxrieLjLgKWqYyAywxn3AgeaY//BD8PwreI4pxKIY= 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=XtzOXm+C; arc=none smtp.client-ip=209.85.128.44 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="XtzOXm+C" Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-48370174e18so35683545e9.2 for ; Wed, 25 Feb 2026 02:17:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1772014636; x=1772619436; 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=oGDK1Bq0ybXWleKDcajfmOxR9UUUs8qs+hjFsjzRODo=; b=XtzOXm+CsUo4pt2wQeJ93gjYava25dAKo1rlsIMmoKErnVj/cMjoHyXX2m38i6jqob ShhzEyigMM9bAQtpo52YHCbfv7ME5BIy8+Mo6XgkxEEfXXQr0baSK3EaBWuZMmkD5EiW QkQROMn1CEnY29V1XzljCY/EHihf7MorZvB3IHVaVfIZjVFdCBiTdwt5ey8uzSivghIo vV9/Ku0v4US8tM+T8Y1GzWL1fuB6vOT5xM5BjYEhzmr5Dd2m69ECuErZ8xwt3MLvUoqB dCgPLFPHoXe7TYhQGNCYNIuuOWGYwojkJXq9FJgmz+A/BQYXwvjlDCvFf452H3jAeUNg SKLw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772014636; x=1772619436; 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=oGDK1Bq0ybXWleKDcajfmOxR9UUUs8qs+hjFsjzRODo=; b=irpapULEly+Ef/Ot6TSWwqPrPRTZKZyxCllOMCQKxnMza98steKpUtgCB0dBXo+P7b st2/diz56567RZAkMP+SEofUhfPzD7BPqQwvmwMO5QFr89nVUbYWKQLj7zYrpfKpP6S1 xNquw5akB1ZiibS6CNVaA9/Xz6rUAUKMfWyZuh67uKRapCmLjBc8IvLDz08N/ImHaqdl heVpGk/EtN9NN0foRYPujJ7dplhdLOVO2CFwjosSCgySSfuFZGyNhj16js28LRrd5W3L RGIxDoKCi8oRPa81B+mHUWhm1jRz/vYc3BDuR/RzzE5OcOEGAOpwsWm7daNLdzEchvym BWAA== X-Forwarded-Encrypted: i=1; AJvYcCXTN0XREadBDdbMdSymIquM0RGh7W+62RvXfu+BRyI5EFhcst2fTvTAnpsrvuIIRt/Y7UHZflbP6eOJFHc=@vger.kernel.org X-Gm-Message-State: AOJu0YxcVctDum2mA6jsX8W0QiH9bTtZtPekJ+iK1MwvNCUi0vDGZebU ASxxTxFj6qqWUwQKrka/TIcL36QgqS1ld0o7VV8L0Ny61Q0pUn7iHQpUTM9vZo3OpSODWZPlmj7 xyI6vE7Y= X-Gm-Gg: ATEYQzwHtKLT2mm4nAoDIFbgiDcCvuloyD6aUtwvgqX5Jqpsz9cOKVq549Elb67dEKa zHLBA6awS4f9vIdQ78+cYd4S60VsICopicjdpxU3OTw1eHem3jHdECC5qni2+YlrLRIwcqauJK6 34fych6jA4cfW5lRvnVFGpOTQbhDOtmrmDLXKPAEIN20/sOKQLpKnFFgh7Rxnh5gyH6m2FvbKA9 TSKUnuo79xHFFCp8fvQm6au6RdbO8H2gD5UZnnZTer0e34fs2BA62VseAfiYZ6w+vvvN0kiyXcx CdxAi4YUQ5LSLVqPJPDQ/l+mx/GlYCBRJZc3eQZX7d4qGYII5qMcWjebe4GlkH/abGLPk42Fb8S sCEnLW25Ka8SOMh0ExLLoDN8/OJtkUbANDCbmi7dBYZqntcSqov5AVJMn70L78DnYD/Xntg== X-Received: by 2002:a05:600c:6090:b0:480:426e:9d38 with SMTP id 5b1f17b1804b1-483bef5aa31mr32058395e9.27.1772014636068; Wed, 25 Feb 2026 02:17:16 -0800 (PST) Received: from localhost ([151.35.220.155]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-483bd6f19f5sm145273255e9.1.2026.02.25.02.17.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 25 Feb 2026 02:17:15 -0800 (PST) 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 v6 3/7] iio: imu: st_lsm6dsx: Fix check for invalid samples from FIFO Date: Wed, 25 Feb 2026 11:17:11 +0100 Message-Id: <20260225101711.2368206-1-flavra@baylibre.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260225100421.2366864-1-flavra@baylibre.com> References: <20260225100421.2366864-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=3692; i=flavra@baylibre.com; h=from:subject; bh=8vSSfk/mqV/Diy8xqYAvuYstYG9PfyLi4Xga/dffatA=; b=owEB7QES/pANAwAKAe3xO3POlDZfAcsmYgBpnswnfn5oXpJpDx0hpSTDM4Sw5hhySnctawLYJ Rj4y1hM/+aJAbMEAAEKAB0WIQSGV4VPlTvcox7DFObt8TtzzpQ2XwUCaZ7MJwAKCRDt8TtzzpQ2 X+2yC/4sBe9Ti6DyUgsh4R9EH5M4vFQfZsYmaei2eO2sODb4uUQUe3M6KalTXlF1fgdNaHGsJ1L HuTbHKtXtUYI8EhBCTbaYdL5Cz2YwFX5McZgfg+EgJm1FQ0bSM9udsiJ6CrusmCbO+5Ql8K3nfL o9JK/pCwv020/cQDIoeBU6hsElQ1vbUbblJcLBY086rH4wRSAqvnoQvFczqLNc7vY2U4HdmKOge b7PutZgkvx0jk6J1s4ffQcqpG1w4oKPUROCWeXKWN1WvcXZzt/kd8nm76i4pHUIzBcXIg0PSJYY EpM3OeZuAlzZX2oobqNOWufowEkkouvZMaSxZafA+Bzt7ncetVLfztmOYcXw4S3S4Neh/CzGx8Z rgGM9o4jFTAxN/7xASKHYEVIOQMxSFKeFwnUL8YSQtCz4E1Z4yTPzoXDPJb9ifDGiuUBhKAX/k0 GrD92617djIy3sU4p80o6WQhjq7YA5AlTNftLKHDsN/Ml+BDZAoWVH9yUqEl9HsKWexmI= 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 --- .../iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c | 23 +++++++++++-------- 1 file changed, 14 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..a6ee2da5a06c 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. @@ -539,14 +537,14 @@ int st_lsm6dsx_read_fifo(struct st_lsm6dsx_hw *hw) #define ST_LSM6DSX_INVALID_SAMPLE 0x7ffd 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 ((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 -EINVAL; =20 /* @@ -609,7 +607,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 +652,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 +663,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 +674,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