From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pj1-f43.google.com (mail-pj1-f43.google.com [209.85.216.43]) (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 E61A44582D4 for ; Fri, 14 Aug 2026 10:19:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.43 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786702757; cv=none; b=U2OkAOavlKMbp+zqh/xGHzBwVru59lhqeZwTpEtlQr4s97XHWyrHpPv5PxOXrSzNxLTIdqv8mUip5YP5dSmelGqnZaQqTpzwdkJojaqqWhGYB1fJvR4uZGN29IdZ0tV705HcIlxp2A/ZQ2lQnkO9jkAueSaip4n6aqB4hrTlUbE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786702757; c=relaxed/simple; bh=N1zYGwn3lS/lHxK27p6fiV8lb49hdDwVYs4y5wTr/U0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=OVWMbqOQOVJQ/PsxVMXXJS4p7YfUcmi4KdPFOWmzIPdNEINSuGrURZDwY8wnzpYuCpktNGTDbgZRvEdPdA9SUvhIzHOZ87clzimmZhLvoJHyb+3OYr+QrJbDMohpaTyDWP6B+EVy1WVnWe5WQGJLLJhqAEvyl14IF7qJMtHUjYE= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=CkGgzrm7; arc=none smtp.client-ip=209.85.216.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="CkGgzrm7" Received: by mail-pj1-f43.google.com with SMTP id 98e67ed59e1d1-38dc69c74b8so846551a91.0 for ; Fri, 14 Aug 2026 03:19:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786702743; x=1787307543; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=4LB4D7prrJKar32PuQlOy+F4uxxxhz/ejXYg/JbcjVI=; b=CkGgzrm7IL7n37A8aWp25Y6V2Uc8Mf/z2F156geP5IxWO7vC9RWtr6732AeD2fsqit git8+HN9lG3PaXeDaOdb8cUeSD/3x87zwR6P5+gEUaMSw+/SPtFCQ/GVRe/cINkmrsc/ d/Uwfmxw+aop1rETYHQbN0Wd7Ls7IQ5mY6D6sWnlyu8VAUjvPu+EpjiiiyVYQy9bxMJ2 PnvULt+fni7Qbr4wWwrZuOSuAwCnJnv7etjKXF7rq3rRvSUodcaeF2m234VTXQCdLsSs vR49e2lsi/LcmdwM56Y9B6ebWCmC+54jFv4t4dIScYAdNGDIbFjvwn0AGa6rjmCJftoN Zn+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786702743; x=1787307543; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=4LB4D7prrJKar32PuQlOy+F4uxxxhz/ejXYg/JbcjVI=; b=T9tJniEYAlOuFH7AGdKt5G08Fby8VvXwR2Ow9Vtoet2kTUEfFMe3MndSxGmtQPjMeT ZwgLoq0KmupZOsTiuiRA3lrZ/jbwB4t9VVyG+L5uBpVGaWEv0TCAlcd58uLb6i/bTjmx hM/e6GduPMAcIulGm2M+bQ7VYmNBgXos3I+bCYc7Tx5D+X+CDjTym4MOHy+HGvjxujpx VxYWj6EXM8HUbumZyB921RsFcna/e4VIWBCyJDeEQq0kNGgcJsDCCXe4zutYosBjWFZ5 VuKNHaI46C1qodRm8gb2iNdz+mpRuSi0Tz4l5h4ceEHT3MQgKxtxajAeH95Q9p/jYdWs aXkg== X-Forwarded-Encrypted: i=1; AHgh+RrNoNnD58Zq0OvVKhnVg6ici4jpxehDdPEbryq4B7ZBVA6uuvUI6+NqYIoV+QVrqQBfWIw1rigyxBCPv6k=@vger.kernel.org X-Gm-Message-State: AOJu0YxYaB/cuwofjjIcILdP+a2xcF0bOrv4O5xrrGEIgN70O4jNfg7a UFkyYEBRRgrtgDYr3NFrZ0VViHXKVX5unsNdWBKy68q/U8oFp0083oBM X-Gm-Gg: AR+sD10vsLnIqMUV7mZT8IWwNFzL+4QMcpy6zTSORUmx2s2zBdtmmKvojkux3KlQRwa ZM3dA7y9hUsL4jSQiHZ2rjlk7rK3gWKsFZW8LxLYMt/H8RMuElDimLGesyl8zoi4ZonhIOfbx/1 acBke2/TFD15Ci818UjQoamLhHp4Tnuf2qfYtD9Sb0CfMB5yu+vf7XuCbVVd2WFb1uZSpIfLOOu H27DIAKgSWsUkuji21v7t+9oHy9r3TtBL1qATiY+iETNoDDjsT8u6WFDNxKzYKSQtEhTFaVfRws gRahpiUeQB74VQyFT7/DoOB9JuHGV24ZJ3r14Ksgv7yUw86myVPAX5lvVSuyt4X9bRtCmBzqZVu moY+YLeLHT0R3ZFoDMCrgZL9pzIA/2EoGhjSSDBaiV59qRRfKi+kTdt2Gq7X7iaDheyFZEygNIF gf2cxdDDFJyVkCd0O3tL7FTACFATCjaYGjZNm0gbBfb4MZlFPTzubA6Gv2k4ALEflK8sSFvbz4i oV3QZA3 X-Received: by 2002:a17:90a:d006:b0:38e:75f3:ad4d with SMTP id 98e67ed59e1d1-3933cae6243mr5172951a91.7.1786702742910; Fri, 14 Aug 2026 03:19:02 -0700 (PDT) Received: from yash-Bravo-15-B5DD.. ([2409:40d4:124c:2e49:6997:3d3f:909e:c279]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-394e920ba18sm2074218a91.0.2026.08.14.03.18.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Aug 2026 03:19:02 -0700 (PDT) From: Yash Suthar To: jic23@kernel.org Cc: dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, yashsuthar983@gmail.com, grondon@gmail.com, linusw@kernel.org, hexlabsecurity@proton.me, sakari.ailus@linux.intel.com, srinivas.pandruvada@linux.intel.com, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 2/3] iio: accel: bmc150: use DMA-safe buffers for regmap bulk reads Date: Fri, 14 Aug 2026 15:48:43 +0530 Message-ID: <20260814101845.301769-3-yashsuthar983@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260814101845.301769-1-yashsuthar983@gmail.com> References: <20260814101845.301769-1-yashsuthar983@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit The FIFO and read_raw buffers are passed to regmap bulk/raw reads ,which is not DMA-safe.Moved them into struct bmc150_accel_data after scan, each aligned to IIO_DMA_MINALIGN. Suggested-by: Jonathan Cameron Signed-off-by: Yash Suthar --- drivers/iio/accel/bmc150-accel-core.c | 14 ++++++-------- drivers/iio/accel/bmc150-accel.h | 6 ++++++ 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/drivers/iio/accel/bmc150-accel-core.c b/drivers/iio/accel/bmc150-accel-core.c index 596ff8267ead..30d91d417ac4 100644 --- a/drivers/iio/accel/bmc150-accel-core.c +++ b/drivers/iio/accel/bmc150-accel-core.c @@ -125,7 +125,6 @@ #define BMC150_ACCEL_REG_FIFO_CONFIG0 0x30 #define BMC150_ACCEL_REG_FIFO_CONFIG1 0x3E #define BMC150_ACCEL_REG_FIFO_DATA 0x3F -#define BMC150_ACCEL_FIFO_LENGTH 32 enum bmc150_accel_axis { AXIS_X, @@ -622,7 +621,6 @@ static int bmc150_accel_get_axis(struct bmc150_accel_data *data, struct device *dev = regmap_get_device(data->regmap); int ret; int axis = chan->scan_index; - __le16 raw_val; mutex_lock(&data->mutex); ret = bmc150_accel_set_power_state(data, true); @@ -632,14 +630,14 @@ static int bmc150_accel_get_axis(struct bmc150_accel_data *data, } ret = regmap_bulk_read(data->regmap, BMC150_ACCEL_AXIS_TO_REG(axis), - &raw_val, sizeof(raw_val)); + &data->regval, sizeof(data->regval)); if (ret < 0) { dev_err(dev, "Error reading axis %d\n", axis); bmc150_accel_set_power_state(data, false); mutex_unlock(&data->mutex); return ret; } - *val = sign_extend32(le16_to_cpu(raw_val) >> chan->scan_type.shift, + *val = sign_extend32(le16_to_cpu(data->regval) >> chan->scan_type.shift, chan->scan_type.realbits - 1); ret = bmc150_accel_set_power_state(data, false); mutex_unlock(&data->mutex); @@ -918,7 +916,7 @@ static int bmc150_accel_set_watermark(struct iio_dev *indio_dev, unsigned val) * frame data is discarded. */ static int bmc150_accel_fifo_transfer(struct bmc150_accel_data *data, - char *buffer, int samples) + void *buffer, int samples) { struct device *dev = regmap_get_device(data->regmap); int sample_length = 3 * 2; @@ -941,7 +939,6 @@ static int __bmc150_accel_fifo_flush(struct iio_dev *indio_dev, struct device *dev = regmap_get_device(data->regmap); int ret, i; u8 count; - u16 buffer[BMC150_ACCEL_FIFO_LENGTH * 3]; int64_t tstamp; uint64_t sample_period; unsigned int val; @@ -993,7 +990,7 @@ static int __bmc150_accel_fifo_flush(struct iio_dev *indio_dev, count = min_t(u8, count, BMC150_ACCEL_FIFO_LENGTH); - ret = bmc150_accel_fifo_transfer(data, (u8 *)buffer, count); + ret = bmc150_accel_fifo_transfer(data, data->fifo_buff, count); if (ret) return ret; @@ -1008,7 +1005,8 @@ static int __bmc150_accel_fifo_flush(struct iio_dev *indio_dev, j = 0; iio_for_each_active_channel(indio_dev, bit) - memcpy(&data->scan.channels[j++], &buffer[i * 3 + bit], + memcpy(&data->scan.channels[j++], + &data->fifo_buff[i * 3 + bit], sizeof(data->scan.channels[0])); iio_push_to_buffers_with_timestamp(indio_dev, &data->scan, diff --git a/drivers/iio/accel/bmc150-accel.h b/drivers/iio/accel/bmc150-accel.h index 9deff256aed5..a1734f5d30a4 100644 --- a/drivers/iio/accel/bmc150-accel.h +++ b/drivers/iio/accel/bmc150-accel.h @@ -56,6 +56,8 @@ enum bmc150_accel_trigger_id { BMC150_ACCEL_TRIGGERS, }; +#define BMC150_ACCEL_FIFO_LENGTH 32 + struct bmc150_accel_data { struct regmap *regmap; int irq; @@ -81,6 +83,10 @@ struct bmc150_accel_data { __le16 channels[3]; aligned_s64 ts; } scan __aligned(IIO_DMA_MINALIGN); + /* DMA-safe buffers for bulk/raw reads */ + __le16 fifo_buff[BMC150_ACCEL_FIFO_LENGTH * 3] + __aligned(IIO_DMA_MINALIGN); + __le16 regval __aligned(IIO_DMA_MINALIGN); }; int bmc150_accel_core_probe(struct device *dev, struct regmap *regmap, int irq, -- 2.43.0