From nobody Wed Apr 15 13:01:47 2026 Received: from mail-wm1-f52.google.com (mail-wm1-f52.google.com [209.85.128.52]) (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 A39C0388E40 for ; Wed, 4 Mar 2026 08:06:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772611565; cv=none; b=Vo3kGITZZIsY6QylCMoh6SaTHbABiV1QD0n67U9Sy+MY42LVOVXruuP8zIkR697brbxViGNHn2dP/ZwgUeV0hp/B+VI6Yb+bDN9IdznvutIeqay2Sa36u0+1JNx+vl1cZxesd0qVEU6GZLmMlzs+2mVu2Yr3oX2y1QwCJ4kdSqc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772611565; c=relaxed/simple; bh=8vSSfk/mqV/Diy8xqYAvuYstYG9PfyLi4Xga/dffatA=; h=From:To:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=gcT9n5pPfn5t3qbmV3SnGH7xl3cq+CZEN/RYmzO7DJzreahGtgVRhb+ZatlF749EBfSOx6JNxUZqAXzaZAnBRdbmKrAF26wW1DVDAZknpPtO4TR8rK2wjT9/KeeLcXxFoiAToCpyJfGo5prZQReNDIdO/99808Lb/xq2T4RS0jM= 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=PBN6bi+y; arc=none smtp.client-ip=209.85.128.52 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="PBN6bi+y" Received: by mail-wm1-f52.google.com with SMTP id 5b1f17b1804b1-4837907f535so58081855e9.3 for ; Wed, 04 Mar 2026 00:06:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1772611562; x=1773216362; 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=PBN6bi+yMi6otpkTa1iWhLRPrHuqmjROttuG8WwMjzaprZnYP34MmRs0Mm7w3kiTn1 lYQyGeNHdNZ7YS0cklc62mrLiO4e2KOU7Xcik94jjQMVuapa6REOvDGFShJVuHNediNI /EvinsMO56Sb5bRv5S671751Qf9pV/abnZtpbEVkKcu6PQA+wRjWYBA0Jm24JI51RVGZ X7k42TPSrg/zp9R8iZm+M8BccGX8+S654p48bRTGMId1yWDUj6bgb+YLPyvN/9T++dqj lH6/Gi/Qa59oC843dI/hBR2Jp9iWee8QXfcgonYgEVwsQGDSXH2uRpSQoVGpXLBHc9YY 0m2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772611562; x=1773216362; 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=UB784gvzSGTidLC0yOt5uA9gcWEoemg4cRmodHPibA8kCIXckI8KJRSVqlpPBSwB7C lENvu9PMBVhycm6xa1yb86KWJmyGmgQzZVDh+6c4f7G512lsNS3FqpAJkGlgQBzL8nmA mmeZmmV7toc1Ah/UhzevThMvCeUr8E+1xIWAlC0Gosqv8258WL/ps/c2b5C55vjLQgWT /5fCphdxA931xevn0dIRVisA26N5iVS8P2PpDrRkzBhLT1WX4JZcV/D3A31hxoKlIOdx 0nfHwar9khkIGIz/eJ9T5blWom1NI1yfhm0jILZq0+korAMDM5cna1Bl3wIH2OwZHkqI BJQg== X-Forwarded-Encrypted: i=1; AJvYcCUtFuXr8c5ECCkaD9P3oOgMgO/+uBGIk+5wL5lgACSJvrHElip+dN5FoqLrAaXWxFrNvKKPYK8gEj61ueE=@vger.kernel.org X-Gm-Message-State: AOJu0YwOt0O+r1MIfBIl0YYX29rGHbnbmAlq4QEOw18/WHyOtCcp0zAj +dNvUO+P1mdCdNTBzLWweMiWtRhaYP7vN1+m58pva8Adax38TAlpRNB3B7tz+xM9KEw= X-Gm-Gg: ATEYQzxDMziXTj+SnFMlwqUw2toF7psQLZNJ59M7vw4ex7wF5toYy0T+v8jvQnnTZT1 rCjwY9s9zx8BPCrNhJD2/Y4giIus0YxxiFi5lSV+hyChgaKcQyWDd/2HhaeknhTZ/wF1wxpkCiF cG0kZY1CrFvQj71k4jFTepRTlgUDteBsgSkoUajlsV5ZEWsGSY40fpyaI1RNDCZE6xshIr3dLme qdLTrK7/rCZnIQ/LFs/MZ8Oqp0vL4q/SpRlh+uAYiPMwY9YoLSujfRq3+KnAO4NbH6jqN44otFa e3CNchOt4TJNU3XuFY3L+I9PXdAdn0EnW00T5hRyI8rgHbZNuzFBbchrzcviZ6eBwFm37c8CpFj K4KxVTB+NgGZxaZEiK/gthx+uzmp8px+EwPgTtH3R/cvpTq0VhQ7f6ZyV2o1HQtDeS6QY X-Received: by 2002:a05:600c:4fc9:b0:471:1765:839c with SMTP id 5b1f17b1804b1-4851986eff6mr14795685e9.20.1772611561838; Wed, 04 Mar 2026 00:06:01 -0800 (PST) Received: from localhost ([151.19.177.89]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4851883a012sm64697625e9.3.2026.03.04.00.06.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 04 Mar 2026 00:06:01 -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 v7 1/6] iio: imu: st_lsm6dsx: Fix check for invalid samples from FIFO Date: Wed, 4 Mar 2026 09:06:00 +0100 Message-Id: <20260304080600.2844267-1-flavra@baylibre.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20260304080519.2844101-1-flavra@baylibre.com> References: <20260304080519.2844101-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/pANAwAKAe3xO3POlDZfAcsmYgBpp+fofn5oXpJpDx0hpSTDM4Sw5hhySnctawLYJ Rj4y1hM/+aJAbMEAAEKAB0WIQSGV4VPlTvcox7DFObt8TtzzpQ2XwUCaafn6AAKCRDt8TtzzpQ2 XxtDC/sHNqQxlIUz/V1r2lRsfTwpuGSACKMas3mZHZjObvAtV8D0Ga5LYF8qjCcvhv+hCxBZqmQ nVrVGO9Kjvi47IYechGHmL33jvOPYCHaKZfCSqdDpXcHA6lVs0MmswPm5T1Jtiehd2r8Nqz7uOr QixqryE28gbOxU1hB3ahYaLA5eoQy3o2UMMZgkgoFqWO/KoprBAq/SCo6jD9o5pZkphwscrOEmL eJMMxgDAh8B9j7nGTl6a8K//2C2gl6iZfPIGku0x5zNKFXuzQnI1amjEig8oHmrCoyns/q6ZNVL bXDlIAI7f+E/FwVnF4JQamHlQlscoR0Oar0ZRHNtLKZcYuwxD+g8JlIhds3fZPaaP9MQ0ts8qQ7 azjDkq+EjljTxDw71TfNyZayVRaHAdkW3iMXZ/Rs18cD5Sty7vRwzVShHvGAAnVCDCDjySx3vNi SJWDmJFcmvLnfyJC3YSMwqzG6Ns8FrKG7OHRVRf8NSv5oMZUcscoUZCrUrZWlayNn2BWA= 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 | 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