From nobody Thu Sep 24 23:34:05 2026 Received: from mx1.white.stw.pengutronix.de (mx1.white.stw.pengutronix.de [185.203.200.13]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D7CDD480DEB; Thu, 24 Sep 2026 13:44:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=185.203.200.13 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790257453; cv=pass; b=eeAo5i1rGx/dGPS6vHu0f1HSnTwBfde+//L+qpQijBDxqxiSuzfubXAPoqTgSR4p/+oCV1ZhJ9bBmmHJClOh6VFc+/Hp4lEgB+t/GVmeoilwLHgxLh6RP8IKxyfwMrZbZq/QsSglBS+WCr5Eu93o71Lo2Du/syCB3x3byGzYxXM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790257453; c=relaxed/simple; bh=XzJjoVhnb/s7cdDvuM4wM0NdbOkb23/JUb5yHGelLtw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=CaxiHaeXKPxyjBam9L0iC9ydcax6sJyqcJfunlrqizhWIbEceA/w3rpfSaAoQUcvUjl17QPq79qp06qxt/eLf4LGycQLiczfXWMztmHGzH/jBeZyd1uZGspSplmWYsvAcpml7Zm+Sq7SolF5WoTMuhiEGDYujDpMOHNBdjmw0jA= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; dkim=pass (2048-bit key) header.d=pengutronix.de header.i=@pengutronix.de header.b=PFS60yD2; arc=pass smtp.client-ip=185.203.200.13 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pengutronix.de header.i=@pengutronix.de header.b="PFS60yD2" Received: from dude04.red.stw.pengutronix.de (dude04.red.stw.4.pengutronix.de [10.17.1.12]) (Authenticated sender: relay-from-dude04.red.stw.pengutronix.de) by mx1.white.stw.pengutronix.de (Postfix) with ESMTPSA id B2C26202108; Thu, 24 Sep 2026 15:44:07 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pengutronix.de; s=20260414; t=1790257447; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=fXC3cfYABYvUUoB5Rrruor3jNI2VcQ2LV9agEBgud0g=; b=PFS60yD2CbzMngxeDHzfv9F8+9Ig098P2fhVx8h8IKhm2wLsXBCiDiDq/tplKJncxHfiAP 8Sb6MQa9tn4RKiRC19CcVyvvm+DdgGktz746A9w9g4IBIrCBzeQVsejFe5vHev5tRCk2oG t5/dM6Ciona1pyzRvAb4LFYSm5hRwAoA74jVY9OmLFr6WK+6JOOWj2vvPSabEdWbxhhVyz bbdHDLuo+ZpyNl9jV1O/JKLDe+NJ2WevhqK0UPJettGARVGwrnDoppQAqACt49QfrOtAVY IQkEaQZ7NezU+8YXnNPqaOt4O0Th3oovegYO2COLhAe1lKsMHd5SXhMlwUqlWA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=pengutronix.de; s=20260414; t=1790257447; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=fXC3cfYABYvUUoB5Rrruor3jNI2VcQ2LV9agEBgud0g=; b=WCJR5gQkiqC0SRNQUI1Yh3jun0qATawBIw6PaxziJTcVqKw44cHVZYWFKH8galuPWlcZlO sGZGinBoDZedImuuc/af7P8jT3kb5sdDXFYw58avqdAIXaa8Fz/VUowtEjeq8QHW+8LfRp ZwIgeyZwkpajP4bAepOLFeNrgKDyRxB7tLG534vQ0/Bg8abM8dG25/Wrlp0feq76mbdIWc /WLXRo1O4kfMjh15cea2BJpTJh2Uh58rdD7SQ//zIpMjDpPAEaynSRlzuApzbPPQwVvrqO /flno9oPV9hr9zMW2pDTpjNZeOQb9TqoOodhhvwHlroWc4tZ/EFRIb5AOAho9w== ARC-Seal: i=1; s=20260414; d=pengutronix.de; t=1790257447; a=rsa-sha256; cv=none; b=LHsotmozPWkO80wY7y6PPeBx7tPrNd+1S0JlgwHrZm7S7plmHVC0J/QhBNe86MPG31dFTL 8i6OidKadOBts2NwWJYYHFggOJ8InP+LgcG8ch1uNED0R4DL1Gf0srbXgnHSObnB8oQMt7 sjM7u9E4Ntt+nrBimcEKlA7P3xWWzk2Iious5veN1XKV/sFm9IWZqerBQhpznKLQ86KBea 8byuxKs/gY0x4FiOq53Y9dpoYKVRRZPCwC6/Z4IwnX3cA2WojiZFEE85CMyky1RJ1saquc nuQE/q61CsNn+cxyEW8XkZVP868CI+fAnb5a13e7bD7NBOHAj2SDgPBplIVZug== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=relay-from-dude04.red.stw.pengutronix.de smtp.mailfrom=jre@pengutronix.de Received: from dude04.red.stw.pengutronix.de (localhost [IPv6:::1]) by dude04.red.stw.pengutronix.de (Postfix) with ESMTP id 943A2380260; Thu, 24 Sep 2026 15:44:07 +0200 (CEST) From: Jonas Rebmann Date: Thu, 24 Sep 2026 15:43:51 +0200 Subject: [PATCH v7 01/13] spi: spidev_test: include tools/include Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260924-spi-sun4i-spidev_test-v7-1-126e31a07fdc@pengutronix.de> References: <20260924-spi-sun4i-spidev_test-v7-0-126e31a07fdc@pengutronix.de> In-Reply-To: <20260924-spi-sun4i-spidev_test-v7-0-126e31a07fdc@pengutronix.de> To: Mark Brown Cc: linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, Marc Kleine-Budde , kernel@pengutronix.de, Jonas Rebmann X-Mailer: b4 0.16-dev X-Developer-Signature: v=1; a=openpgp-sha256; l=1720; i=jre@pengutronix.de; h=from:subject:message-id; bh=XzJjoVhnb/s7cdDvuM4wM0NdbOkb23/JUb5yHGelLtw=; b=owGbwMvMwCV2ZcYT3onnbjcwnlZLYsjaqqmYp3RF734T/4bZjU2Xbq52T3zQtMCvr4V1m3Pws WOtEh6HO0pZGMS4GGTFFFli1eQUhIz9r5tV2sXCzGFlAhnCwMUpABO5e5qR4XHKcvvvkR9OXb4w Z9bLW6JZK5R+y/T/v8gU+nLvtenrpx5n+MOn4VpwXnbt4qg1Ic8q448fMwhP//LReb5V7Lo35y4 96+EGAA== X-Developer-Key: i=jre@pengutronix.de; a=openpgp; fpr=0B7B750D5D3CD21B3B130DE8B61515E135CD49B5 Add tools/include to include paths to allow using macro helpers. Use ARRAY_SIZE() from tools/include/linux/kernel.h instead of maintaining a copy. Remove the obsolete comment with cross-compile instructions from the header since spidev_test is integrated with the tools buildsystem since commit f325b73dc4db ("spi: tools: move to tools buildsystem"). Signed-off-by: Jonas Rebmann --- tools/spi/Makefile | 2 +- tools/spi/spidev_test.c | 5 +---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/tools/spi/Makefile b/tools/spi/Makefile index 7fccd245a535..8cf21ff8cd03 100644 --- a/tools/spi/Makefile +++ b/tools/spi/Makefile @@ -12,7 +12,7 @@ endif # (this improves performance and avoids hard-to-debug behaviour); MAKEFLAGS +=3D -r =20 -CFLAGS +=3D -O2 -Wall -g -D_GNU_SOURCE -I$(OUTPUT)include +CFLAGS +=3D -O2 -Wall -g -D_GNU_SOURCE -I$(OUTPUT)include -I$(srctree)/too= ls/include =20 ALL_TARGETS :=3D spidev_test spidev_fdx ALL_PROGRAMS :=3D $(patsubst %,$(OUTPUT)%,$(ALL_TARGETS)) diff --git a/tools/spi/spidev_test.c b/tools/spi/spidev_test.c index f2135d619a0b..bd5ee7a6ac82 100644 --- a/tools/spi/spidev_test.c +++ b/tools/spi/spidev_test.c @@ -4,8 +4,6 @@ * * Copyright (c) 2007 MontaVista Software, Inc. * Copyright (c) 2007 Anton Vorontsov - * - * Cross-compile with cross-gcc -I/path/to/cross-kernel/include */ =20 #include @@ -22,8 +20,7 @@ #include #include #include - -#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0])) +#include =20 static void pabort(const char *s) { --=20 2.56.0.rc0.108.gf0ef1b96a0 From nobody Thu Sep 24 23:34:05 2026 Received: from mx1.white.stw.pengutronix.de (mx1.white.stw.pengutronix.de [185.203.200.13]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CF8C04746B7; Thu, 24 Sep 2026 13:44:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=185.203.200.13 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790257454; cv=pass; b=fYkOqsCaVP1t3i5yMjjP5ZCoNCbazc4uKYLiBh3IJ0+mFEiXv5TqYUOKD8+m+3LRHp2UOVjwDyirX/hXEADILq7aZCfHNBfX2W0aAY7Z9BAmJEm2Uz2XnSKn5xUoP0aJl/gbmul7FdMFB7I6a/ZmxTndQ3fH7ni2MlJWssAiRGI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790257454; c=relaxed/simple; bh=QIM3ATguBW1KxFnBRxcFy1QeaPHB0iP0ILr09Q6npOc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=szHKfXHUzqfAYMVz2q4YYRaSPLBqWJpE1M3PKmzucRLWDN8eUY82pV8Xgr21HZMYnL2vbOxc8GyZE6alQJENaxT3geVBlrTqV5V7jhHQvnVX/milObMFlYUKmzjo7lm3xTvQwzBnihuQn7ASd+TFfRJ5N0Jl6lhEKjp5u26x/3Q= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; dkim=pass (2048-bit key) header.d=pengutronix.de header.i=@pengutronix.de header.b=BlQ7g70h; arc=pass smtp.client-ip=185.203.200.13 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pengutronix.de header.i=@pengutronix.de header.b="BlQ7g70h" Received: from dude04.red.stw.pengutronix.de (dude04.red.stw.pengutronix.de [IPv6:2a0a:edc0:0:1101:1d::ac]) (Authenticated sender: relay-from-dude04.red.stw.pengutronix.de) by mx1.white.stw.pengutronix.de (Postfix) with ESMTPSA id ADB922010E2; Thu, 24 Sep 2026 15:44:07 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pengutronix.de; s=20260414; t=1790257447; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ERK0rnOr1yfnoRiGKDjw68xenkNj89jkhbImLRhjWzQ=; b=BlQ7g70hbXkrKIQUXt5DDGUoAUMThpwj7JokOhb4fAzKTreCHNmCDil/oxAtHyp9p1E6j2 We/u8VQTIGdgMxz4o+ZRQ4NLRdefOGzrHqN1E/RMyVClhZy7lhS84QlMAUTqelenrnQKoo pQYdvFrRC4mPefr3zhRSpPfUEhjAkuFRBTeljge8mqTuDq5BsPYHG9ZNNcc7hcd2KqGsXK NDIcvHbFhz7o/p5ZRMT/Y5twoAtEB0vahblJH9spdWhiOglHIAK7DOZbiV4q1jKKZa70bc svFzb97rGJzt5WnPWs36y1s0bCsKj6aG2FTfKok3JrFQZnqZZpm2dWdeWJWtnA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=pengutronix.de; s=20260414; t=1790257447; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ERK0rnOr1yfnoRiGKDjw68xenkNj89jkhbImLRhjWzQ=; b=Xm0/kWXOEW/nMfoL1Y2hPNvrrGldq2jirumZhl/ag0/rfrUg04X5dhMW0GszrgMX5tHB5P I79LqeHEvjbl0+wLefq+f0CC1cwYNRtBVSu87DW9Lz8i4sTL0EIHU6mzy312cwlHcB2UsW tTkINkBMFLRaofRA8m90XOrJK8yX+ct71onIYweANrFbE4dwYuMO/sxT3GuQFATE9WyBHF xfwspPUVYHH4I9AUrEqHmnYtMbGOg9Pu3+Oym5tizhxIvCDWHmc7l6/20V0X9oXipFcM6Q tvR6IQ4cBAFllPNT/rNoG2cDR33t/qZhKFdQg5AisuV5TMKJwp4vf9BJbdvGTg== ARC-Seal: i=1; s=20260414; d=pengutronix.de; t=1790257447; a=rsa-sha256; cv=none; b=Nn56oz9jVMhf5KcNUhNNnWtjGSXByl27No5UOkUa1/OcoqURPLgkN4WPR17jpLkYIodthz nL/e4gmaVFrUHa39XhlBKomhJ6xQQSkLFxO0OZ9yq7UUg36ItuocpiTTqEA5bT8Tg7PX80 wa1i34wz+hbUFK4hnR5p8zje5Rh4rbHEw1Bc3X7QlowtwR5so/gygxToDizJDcRTfyoqsG fjufGlo3lk8tI4RFAECLgADnJsqmqiwY9TdQzw6qCaAb2xKq0nqViDeulc/2KH3M/xOBM8 b+HyypmTHrzw6oRrtK1x/m5d73leExBAZaxwMTSU6VqRg9eWQaWOYyGALqtqIA== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=relay-from-dude04.red.stw.pengutronix.de smtp.mailfrom=jre@pengutronix.de Received: from dude04.red.stw.pengutronix.de (localhost [IPv6:::1]) by dude04.red.stw.pengutronix.de (Postfix) with ESMTP id 9478E3802CD; Thu, 24 Sep 2026 15:44:07 +0200 (CEST) From: Jonas Rebmann Date: Thu, 24 Sep 2026 15:43:52 +0200 Subject: [PATCH v7 02/13] spi: spidev_test: clarify usage for --size Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260924-spi-sun4i-spidev_test-v7-2-126e31a07fdc@pengutronix.de> References: <20260924-spi-sun4i-spidev_test-v7-0-126e31a07fdc@pengutronix.de> In-Reply-To: <20260924-spi-sun4i-spidev_test-v7-0-126e31a07fdc@pengutronix.de> To: Mark Brown Cc: linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, Marc Kleine-Budde , kernel@pengutronix.de, Jonas Rebmann X-Mailer: b4 0.16-dev X-Developer-Signature: v=1; a=openpgp-sha256; l=2544; i=jre@pengutronix.de; h=from:subject:message-id; bh=QIM3ATguBW1KxFnBRxcFy1QeaPHB0iP0ILr09Q6npOc=; b=owGbwMvMwCV2ZcYT3onnbjcwnlZLYsjaqqnIdWnlvZttF0656MfoqfQadVt+1EtU5w7PC316i f3Ehi9hHaUsDGJcDLJiiiyxanIKQsb+180q7WJh5rAygQxh4OIUgIm4TmP4w5lnO+HEKevE2lON Rk+aeypXNs4wbW9a38sym13pkeENFkaGkyd8FRI4+WaHbp0qv9wrlJk/0EJwaZp/pltk07SEfdc YAA== X-Developer-Key: i=jre@pengutronix.de; a=openpgp; fpr=0B7B750D5D3CD21B3B130DE8B61515E135CD49B5 By default, spidev_test transmits the predetermined message default_tx. Given the --size parameter, the given number of random bytes are transmitted instead. Make all the input options (random bytes, string, file) mutually exclusive. Clarify the help text for --size. While at it, make the -p help text consistently lowercase. Signed-off-by: Jonas Rebmann --- tools/spi/spidev_test.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/tools/spi/spidev_test.c b/tools/spi/spidev_test.c index bd5ee7a6ac82..0bd6ae419cbf 100644 --- a/tools/spi/spidev_test.c +++ b/tools/spi/spidev_test.c @@ -44,6 +44,7 @@ static int verbose; static int transfer_size; static int iterations; static int interval =3D 5; /* interval in seconds for showing transfer rat= e */ +static int input_choices; =20 static uint8_t default_tx[] =3D { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, @@ -191,8 +192,8 @@ static void print_usage(const char *prog) "data:\n" " -i --input input data from a file (e.g. \"test.bin\")\n" " -o --output output data to a file (e.g. \"results.bin\")\n" - " -p Send data (e.g. \"1234\\xde\\xad\")\n" - " -S --size transfer size\n" + " -p send data (e.g. \"1234\\xde\\xad\")\n" + " -S --size transfer the given number of random bytes\n" " -I --iter iterations\n" "additional parameters:\n" " -b --bpw bits per word\n" @@ -262,6 +263,7 @@ static void parse_opts(int argc, char *argv[]) break; case 'i': input_file =3D optarg; + input_choices++; break; case 'o': output_file =3D optarg; @@ -304,6 +306,7 @@ static void parse_opts(int argc, char *argv[]) break; case 'p': input_tx =3D optarg; + input_choices++; break; case '2': mode |=3D SPI_TX_DUAL; @@ -316,6 +319,7 @@ static void parse_opts(int argc, char *argv[]) break; case 'S': transfer_size =3D atoi(optarg); + input_choices++; break; case 'I': iterations =3D atoi(optarg); @@ -446,8 +450,9 @@ int main(int argc, char *argv[]) =20 parse_opts(argc, argv); =20 - if (input_tx && input_file) - pabort("only one of -p and --input may be selected"); + if (input_choices > 1) + pabort("at most one of -S (--size), -p, -i (--input) may be selected, " + "and each may be specified only once"); =20 fd =3D open(device, O_RDWR); if (fd < 0) --=20 2.56.0.rc0.108.gf0ef1b96a0 From nobody Thu Sep 24 23:34:05 2026 Received: from mx1.white.stw.pengutronix.de (mx1.white.stw.pengutronix.de [185.203.200.13]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D7DFC480DF5; Thu, 24 Sep 2026 13:44:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=185.203.200.13 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790257452; cv=pass; b=EDvsAf/Qi+Vrxg9Ce+CLD0ILuDP2m+lFFoTBe/bKWmRPb3IU8ro7pV6AeYX2HVO8FsqK7xTeV/JuXiU7d20NhZ030AWsPHc0Lbjit7iv8bsPV3AErdrTm0VkQXAfY13gFW6E/PfOdU0btfQ2uMtjtYAkb1ui+gt4box1eqTQZBo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790257452; c=relaxed/simple; bh=chUZ4H9gzohN8TLTDzyvec0pQbdQdjb/qaJ9OiRTHo4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=aTzmwh/9FZEK406rOqVV36bdcQ/9jGUjI55zBYpQHrmP0TRjKGFiYDwxplbK1ur3seRdyVQGVLiAwkUqlB7089TRTwu4DxWQ6k0c1WoHrf0myZ19BYEJNkymAsN8Seo4dX6SlvNp1VmFgLOeBRLHmNjKMxF+jbiMd9O69DnT0ss= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; dkim=pass (2048-bit key) header.d=pengutronix.de header.i=@pengutronix.de header.b=RwVdj+6W; arc=pass smtp.client-ip=185.203.200.13 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pengutronix.de header.i=@pengutronix.de header.b="RwVdj+6W" Received: from dude04.red.stw.pengutronix.de (dude04.red.stw.pengutronix.de [IPv6:2a0a:edc0:0:1101:1d::ac]) (Authenticated sender: relay-from-dude04.red.stw.pengutronix.de) by mx1.white.stw.pengutronix.de (Postfix) with ESMTPSA id BB7C920211C; Thu, 24 Sep 2026 15:44:07 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pengutronix.de; s=20260414; t=1790257447; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=TZySE/8lMcr5V7XmjatX6PTkFNjPZl8xDRvgIr/SfiA=; b=RwVdj+6W2hBpI2iZmdup377vMNVe2jBav3hX2SiuzT+biAjRqtTjzyqREm0KB7vFXQNXLF SfDVoMwhYfAXXWPb8ma0Gwig/jkzM14dkkD1zgzRL2pw49SGOvaqaKP8RVDik8U9dRNDAp 4qPsIwM1ushqkobntSI5suVCS1URZiPREAQHtH7zXQibeNEkNS4EuLtERrgr6W90SWFqZO /W1V3y7qQeuVqF6cHJCDZnJ/sXtDaHwdmtMUrK4+CMrLJZpxVoMcs6CNy/5Rrklt11IWe3 1BJhTEo1K/6i7u8G9HTWdcDdRHnLk72gF7gLjLJ3wnS0b1OyBamt/+rkFF9CwA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=pengutronix.de; s=20260414; t=1790257447; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=TZySE/8lMcr5V7XmjatX6PTkFNjPZl8xDRvgIr/SfiA=; b=c+H9VSdQaM6J//BTL6wa7FqrbjxhmtOWADnfrV8sAOoj3rXEdZ1x+kdeZOOuNPgg+pYP/X rwZk4slI3rUFqJdXMq6W4U5gAWgHTJ+FUpOJdNMSyKEgouUp0TJ0lIEGd+qwB/NiyM5X2j 2ZkNXlJywxM9PhJjb5TAwwbjhHM7szXkkTG1hWZW0wzpJkBffxptRILd6gBCdVxlcIe0TV Gr7/bhlmjmHshQwMaWGEtWSWH7DswIfVXR94a6/hlfs2LHXXtVqG9N/zZ9qiPFrn+AcMnj 6qTxFb1JjFYMvM8sho3LyuZq5H8ZVWDyy4ZpUiacsnVQaZ0rhQ1u7jly76Ggpg== ARC-Seal: i=1; s=20260414; d=pengutronix.de; t=1790257447; a=rsa-sha256; cv=none; b=a8D179TcHebeaq/sdtGRhmLxV8Ff9GcniXbD2EOLbl28eqXAHc/G9zrFw3TEaTbJErCUQV mlVS6SusrlgIw7bZudf3cBzySxhr/Wpl0pkgfo5q4ALRG9mbS6a5RwxcA9Df1ODpTdSEoi lcebnHefbRyz9btxvOBa1e4WrXSlM7U0Kb16rpVA2VRsuRakyf/jaluQMU2NhvT/pfMznO zxSxH+QFWlJhThC3LTG+nE4L4AhZQHZ0pTdgWeX+kgtozndyvhLwhcglPYPHMetktsohXx mVc0lHml+WRzeeUSrODtU//QCJYjravSKkaQbuSla1sbe9Blf2K4qvq9L7tklA== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=relay-from-dude04.red.stw.pengutronix.de smtp.mailfrom=jre@pengutronix.de Received: from dude04.red.stw.pengutronix.de (localhost [IPv6:::1]) by dude04.red.stw.pengutronix.de (Postfix) with ESMTP id 94B19380371; Thu, 24 Sep 2026 15:44:07 +0200 (CEST) From: Jonas Rebmann Date: Thu, 24 Sep 2026 15:43:53 +0200 Subject: [PATCH v7 03/13] spi: spidev_test: make size argument mandatory for --size Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260924-spi-sun4i-spidev_test-v7-3-126e31a07fdc@pengutronix.de> References: <20260924-spi-sun4i-spidev_test-v7-0-126e31a07fdc@pengutronix.de> In-Reply-To: <20260924-spi-sun4i-spidev_test-v7-0-126e31a07fdc@pengutronix.de> To: Mark Brown Cc: linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, Marc Kleine-Budde , kernel@pengutronix.de, Jonas Rebmann X-Mailer: b4 0.16-dev X-Developer-Signature: v=1; a=openpgp-sha256; l=1707; i=jre@pengutronix.de; h=from:subject:message-id; bh=chUZ4H9gzohN8TLTDzyvec0pQbdQdjb/qaJ9OiRTHo4=; b=owGbwMvMwCV2ZcYT3onnbjcwnlZLYsjaqqmUb/7TO4TtDHvu4SkeFxQ3xC9Tze14Gd55f/W3K +uyIrYs7yhlYRDjYpAVU2SJVZNTEDL2v25WaRcLM4eVCWQIAxenAExkxXpGhu3rNI6t0lXe8u7w SaspNrUvJJiO31u28ZSe6HxGXb6TsmsZfjEtUNy4cN3x63MUKjfFnlF8VaU694+ynDj7x/TZ2W7 rWxgB X-Developer-Key: i=jre@pengutronix.de; a=openpgp; fpr=0B7B750D5D3CD21B3B130DE8B61515E135CD49B5 When the argument to --size is omitted, abort with a message instead of transmitting default_tx[]. Signed-off-by: Jonas Rebmann --- tools/spi/spidev_test.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/tools/spi/spidev_test.c b/tools/spi/spidev_test.c index 0bd6ae419cbf..36292d868d69 100644 --- a/tools/spi/spidev_test.c +++ b/tools/spi/spidev_test.c @@ -41,9 +41,10 @@ static uint32_t speed =3D 500000; static uint16_t delay; static uint16_t word_delay; static int verbose; -static int transfer_size; +static int transfer_size =3D -1; static int iterations; static int interval =3D 5; /* interval in seconds for showing transfer rat= e */ +static int random_input; static int input_choices; =20 static uint8_t default_tx[] =3D { @@ -319,6 +320,7 @@ static void parse_opts(int argc, char *argv[]) break; case 'S': transfer_size =3D atoi(optarg); + random_input =3D 1; input_choices++; break; case 'I': @@ -454,6 +456,9 @@ int main(int argc, char *argv[]) pabort("at most one of -S (--size), -p, -i (--input) may be selected, " "and each may be specified only once"); =20 + if (random_input && transfer_size < 0) + pabort("a size argument is mandatory for -S (--size)"); + fd =3D open(device, O_RDWR); if (fd < 0) pabort("can't open device"); @@ -509,7 +514,7 @@ int main(int argc, char *argv[]) transfer_escaped_string(fd, input_tx); else if (input_file) transfer_file(fd, input_file); - else if (transfer_size) { + else if (transfer_size >=3D 0) { struct timespec last_stat; =20 clock_gettime(CLOCK_MONOTONIC, &last_stat); --=20 2.56.0.rc0.108.gf0ef1b96a0 From nobody Thu Sep 24 23:34:05 2026 Received: from mx1.white.stw.pengutronix.de (mx1.white.stw.pengutronix.de [185.203.200.13]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D11BE481657; Thu, 24 Sep 2026 13:44:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=185.203.200.13 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790257459; cv=pass; b=jL18LNfBhV/6HrNv3hKmPWqh6j48k5c5ch5Hm6KQWs1m37riSs6ba43IUs7ptnINY6F9N5ADyAZ/cNgjbCh/dMFvOwNdBxg0WYpfmmKintK2j5kgDr8cz5sN6lDOJb3ecFQtwwF7ZGXrh301Q14fPDn6Hd1hYlgJwl9L1L7iCP8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790257459; c=relaxed/simple; bh=e1lyzIN2yK38kMVVEnZr4CyFEuSoy1/+Xx5TAndcZZA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=GfEJHxWUsrcZePSknyc0WxqhdXB/Jhu1p8ZGH0i/Tqngpwgl7VXBJ8tFVX5yaTckubGQjjLRMx+4lWOjhIYRvlsPD6NNVGUYJp6U1Vh05YXkR3PD4ZFJPKokdgVlxHvleJGGpPRj+jaDIPgSmkKRNq2wTzUj8cX2srVzV62l4L0= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; dkim=pass (2048-bit key) header.d=pengutronix.de header.i=@pengutronix.de header.b=YcJNw/ib; arc=pass smtp.client-ip=185.203.200.13 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pengutronix.de header.i=@pengutronix.de header.b="YcJNw/ib" Received: from dude04.red.stw.pengutronix.de (dude04.red.stw.pengutronix.de [IPv6:2a0a:edc0:0:1101:1d::ac]) (Authenticated sender: relay-from-dude04.red.stw.pengutronix.de) by mx1.white.stw.pengutronix.de (Postfix) with ESMTPSA id C872A202139; Thu, 24 Sep 2026 15:44:07 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pengutronix.de; s=20260414; t=1790257447; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=5VKvwYgTV+3klTNx4TKLlBFDJQwc6zphT2d4plwh8xg=; b=YcJNw/ib/qJWFsPWYn8ISHj6gx47mbRJOs3LuGkPfjmY8YKMmTAJNkYpwDEZzOZxQUtYtK 0yEaae2ixVuSbK2636Ixl0jMghKuEuokoNgrlGv4bInQ/clXiXFDeSCtyYHUhM40MeKo0W JA9bt71Qf3gnn4Qk79Fe8jv1KUTuqE/Rc8O8hud2u0DMEreY2z+x0lW+2fUmFf3YY5vmu/ sbV7FI0t7ChJN0wl+zb2eNi0KWjvT4mj0bNrezln/yHqJ5qCuLPBpjlMX8DwQgOCXx+Dlx HQi9doIjXZ+INwOVrj+MMrHKS1OK43vzEtYAstm+I/nu2bV7ir5NOBcGYdHvIA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=pengutronix.de; s=20260414; t=1790257447; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=5VKvwYgTV+3klTNx4TKLlBFDJQwc6zphT2d4plwh8xg=; b=Qs26ka44TG3udFP5MGuo/LJ24TCnN5Vt0VCPVRLm7SMRCEyjCERmDBqLxEbOEpMGKL0pw6 qTpMACDufVZuZ5v9tDKQZo4zsSmjU+veKWogVSnsCh/K+Fy/LESCu8t0JkRHUkpFKe6Bsy zkTcCQURvrV/XjMbEJT8xkc/5ChDeSmcPyP8VNWofUAy4ALivhhhKpWvZ8bAKxzP2hYkNn ml3jwRCPPC9bvodQ8oXwoT0Z0rn1WMYmN8+/2xUL4jCVC0XkOvujOp4mmua5PDJFtJecKz QgXvpA2zR2aAilSx0rmdrn34ncjRV8xJ874rc9xuroS3ZnH0mzOaiaWEIq8b6Q== ARC-Seal: i=1; s=20260414; d=pengutronix.de; t=1790257447; a=rsa-sha256; cv=none; b=FTpslgkUua0eYiUAlZqrJVhIbRhfIDJ6857j5iUCN/o3XHX9T4SVZEsfSMLnvoYsA6gxGn 0+sESXD5++f0WbvCtuO2qHdeO2fbW6vVMsKj+OqAh9p3yqokWQvWKIa6D/+xTt/YHx0YMb ImU81VZky5rNcZAYbEnbYnsbKn8knj63EdiZ3t7lzgIfMpt2rNMIVE7+7eZwTeWY8fCeZu DbDAMTQ7vW8RkBHG96B4H3E40ggLgnPzkXutJOqbuuaTBdp4OWX2cB97CX4uXXsUwsvRg2 fRsZgNMml5ejyK5/sO5XpN/QMrs0AiZWRBZqAiqeqCvKXUHG3etK521oR6tTpw== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=relay-from-dude04.red.stw.pengutronix.de smtp.mailfrom=jre@pengutronix.de Received: from dude04.red.stw.pengutronix.de (localhost [IPv6:::1]) by dude04.red.stw.pengutronix.de (Postfix) with ESMTP id 94E83380A10; Thu, 24 Sep 2026 15:44:07 +0200 (CEST) From: Jonas Rebmann Date: Thu, 24 Sep 2026 15:43:54 +0200 Subject: [PATCH v7 04/13] spi: spidev_test: allow zero-length transfers Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260924-spi-sun4i-spidev_test-v7-4-126e31a07fdc@pengutronix.de> References: <20260924-spi-sun4i-spidev_test-v7-0-126e31a07fdc@pengutronix.de> In-Reply-To: <20260924-spi-sun4i-spidev_test-v7-0-126e31a07fdc@pengutronix.de> To: Mark Brown Cc: linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, Marc Kleine-Budde , kernel@pengutronix.de, Jonas Rebmann X-Mailer: b4 0.16-dev X-Developer-Signature: v=1; a=openpgp-sha256; l=1433; i=jre@pengutronix.de; h=from:subject:message-id; bh=e1lyzIN2yK38kMVVEnZr4CyFEuSoy1/+Xx5TAndcZZA=; b=owGbwMvMwCV2ZcYT3onnbjcwnlZLYsjaqqn07KxttFn6Z8cJJ1Q+KJ+eInnq6cLrbal7I1c4S Gx9debsmY5SFgYxLgZZMUWWWDU5BSFj/+tmlXaxMHNYmUCGMHBxCsBEDM0ZGVakTamTXd1d0hy6 PrjhLodWyxZdgZT9ywt6k4++errk9hpGho/5qqZOZgdFS979PP+86bDI68nnYq1YXp95cMPi87R X+WwA X-Developer-Key: i=jre@pengutronix.de; a=openpgp; fpr=0B7B750D5D3CD21B3B130DE8B61515E135CD49B5 SPI drivers may in fact handle zero-length transfers. The behavior so far was that such transfers would be executed but then result in the "can't send spi message" error message because the spi_sync() call returning 0 would be treated as an error while really it simply indicates that zero bytes were successfully transferred in a message. Don't treat a return value of zero as indication of an error. Update hex_dump() to work with empty buffers now printing e.g. TX | __ || Now including a trailing newline. Signed-off-by: Jonas Rebmann --- tools/spi/spidev_test.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tools/spi/spidev_test.c b/tools/spi/spidev_test.c index 36292d868d69..908ed038889b 100644 --- a/tools/spi/spidev_test.c +++ b/tools/spi/spidev_test.c @@ -68,6 +68,10 @@ static void hex_dump(const void *src, size_t length, siz= e_t line_size, unsigned char c; =20 printf("%s | ", prefix); + + if (length =3D=3D 0) + printf("__ ||\n"); + while (length-- > 0) { printf("%02X ", *address++); if (!(++i % line_size) || (length =3D=3D 0 && i % line_size)) { @@ -149,7 +153,7 @@ static void transfer(int fd, uint8_t const *tx, uint8_t= const *rx, size_t len) } =20 ret =3D ioctl(fd, SPI_IOC_MESSAGE(1), &tr); - if (ret < 1) + if (ret < 0) pabort("can't send spi message"); =20 if (verbose) --=20 2.56.0.rc0.108.gf0ef1b96a0 From nobody Thu Sep 24 23:34:05 2026 Received: from mx1.white.stw.pengutronix.de (mx1.white.stw.pengutronix.de [185.203.200.13]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D7BAF480941; Thu, 24 Sep 2026 13:44:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=185.203.200.13 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790257452; cv=pass; b=ExzoMnw/wwHLxDH0pGRFohC3lNJ4zVdLDfX7y2xpPUQF3wE0d+0Qd9KHgHm1Hx5L0iciLidZLGQRBTJaVVIfn3HpddKhcDeT+iyAc+tY+clkF3d8+K3s4id4DoZnOotyFDgrPr/YSoswLiXLT28PNMCCwevqxi81ZF0os71FSgg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790257452; c=relaxed/simple; bh=YL6bGPb7MprYfUaFW/tPvVJKl6Y/8aB1aa+Lk/BBNUA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=T2wXQhWJhSdT3kb02b7E/UrGcn6WHXUfJ9YMB2hfJTkzBeP4DUIh/jS4ZziXSibBD+1e4g+xbGsk9t7ZWmKrEC6+iHNQDmgWGNCOEjXzEfAyndTuS64R6qRgtxkNFuVR5pwW1ma8++FKFXjKzxisbB5NIr7UCmvUEnuumIlCaWQ= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; dkim=pass (2048-bit key) header.d=pengutronix.de header.i=@pengutronix.de header.b=O2yRnT6T; arc=pass smtp.client-ip=185.203.200.13 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pengutronix.de header.i=@pengutronix.de header.b="O2yRnT6T" Received: from dude04.red.stw.pengutronix.de (dude04.red.stw.4.pengutronix.de [10.17.1.12]) (Authenticated sender: relay-from-dude04.red.stw.pengutronix.de) by mx1.white.stw.pengutronix.de (Postfix) with ESMTPSA id C09B7202122; Thu, 24 Sep 2026 15:44:07 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pengutronix.de; s=20260414; t=1790257447; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=5CDoSXUgWZ0smyrwuvUxoUgbXYI8V3xlaN9/Q451+sg=; b=O2yRnT6TlCyHFj2uATaSnMwc+3yjfeTcGoyl95UWJ0cHCHw+p4sZSsEXe8QxUDa8+km4XP yPa3o2S/kyKLhcqEaLwzDlARNvw4tQ0DqREN9soUbciALNoJX+wR2TQO5J6GklwSy5qxLM cXtPX+GpclijCQZK9IkRAJ5P6n/qBgjVdzruDKuaMf/fmvdM+ar3H9A0o4odDRxIHMOZzt cC82GotQ9UCb1CfpTYeB0kQrRtBWjVmx6jsUlZkNyfSbJ2XLpKgtA5C03d3uiJ1ysFN3zh XwjbW9BGAqGp4dtTNNRUbpMi4EnBvYFckrZdWw5iemUQY/yIATyeAOJn9sNSGQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=pengutronix.de; s=20260414; t=1790257447; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=5CDoSXUgWZ0smyrwuvUxoUgbXYI8V3xlaN9/Q451+sg=; b=ZKGMOSaXvUjUsQreK2sl/+KKzO6RI5w53nytV6k90cixqpTFox3C8wndnvDAbYdn34Aoj3 uNzoGg6N0oP3dmFiVIlim7HjmJFrz8naufFdcNKLhaLbZHXV/GGK5Je0ZqOtPKOUxIP7G4 afVQ5vn7sXQJpZt6GrOLACav+3kHpUajEBFGjZ2hqf2zaqICrW5o21xLLpZD/vWJzvfYpr MDMGWRRFZcEzXs0hXC8hLzFiZkME2DyHId3/rdW+Pk6VN7DZSFJ0WLLmSM8YTDVkzBCOXy ajbuJUTm68vvnXYO/5FpsfxG+JVBPaCloh8VXu0eZVKgB/v/Dw3in8jCsz5lQQ== ARC-Seal: i=1; s=20260414; d=pengutronix.de; t=1790257447; a=rsa-sha256; cv=none; b=S4cdx/4Is7W28V/EtPtCgm25SX5MOsaTEfqNcvBjUq/WzeUOM198m90euflrd4XqV/n3Gx ofxM/eRnq3C2qE6yR5Sjl6fYvDMHh2F7ZBYvoeo/9s2p9NySIh4uGJHXvtW3q98GJDvm/F jjBQVG0hT5xki/khZvLCgwfSFJ8MMJRa2BGGkB5teI7NnuCN5YC+kR9XZZih8OE/BXLaS+ aQK8eErsUbCV6FHfNKePndPr3gOkd/Y5ON8YUtpFpa+X7H3l/QzNJQ5rhYUw8pWe0/H2+y c1fLq742Z/+TcnXVrnGKVsvr+TdtDi9k4p2Wh8I4t9Jif/ufYOVduxYELCeFfA== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=relay-from-dude04.red.stw.pengutronix.de smtp.mailfrom=jre@pengutronix.de Received: from dude04.red.stw.pengutronix.de (localhost [IPv6:::1]) by dude04.red.stw.pengutronix.de (Postfix) with ESMTP id 951B1380E3F; Thu, 24 Sep 2026 15:44:07 +0200 (CEST) From: Jonas Rebmann Date: Thu, 24 Sep 2026 15:43:55 +0200 Subject: [PATCH v7 05/13] spi: spidev_test: abort when -I is selected without -S Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260924-spi-sun4i-spidev_test-v7-5-126e31a07fdc@pengutronix.de> References: <20260924-spi-sun4i-spidev_test-v7-0-126e31a07fdc@pengutronix.de> In-Reply-To: <20260924-spi-sun4i-spidev_test-v7-0-126e31a07fdc@pengutronix.de> To: Mark Brown Cc: linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, Marc Kleine-Budde , kernel@pengutronix.de, Jonas Rebmann X-Mailer: b4 0.16-dev X-Developer-Signature: v=1; a=openpgp-sha256; l=880; i=jre@pengutronix.de; h=from:subject:message-id; bh=YL6bGPb7MprYfUaFW/tPvVJKl6Y/8aB1aa+Lk/BBNUA=; b=owGbwMvMwCV2ZcYT3onnbjcwnlZLYsjaqql89n/N/8XsWj1pKkeWlExlc9pxO+zvkprJXUccC 1X931ju7yhlYRDjYpAVU2SJVZNTEDL2v25WaRcLM4eVCWQIAxenAEzE+DzD/9gXcQHL2XXtPz/T 3rs+Pjg5JaVugkLiYoHwDX3t93b+b2T4w595f8chyf7VufcPaO/0ePt8TsmpNZGCql6yiU8MOeL fcQIA X-Developer-Key: i=jre@pengutronix.de; a=openpgp; fpr=0B7B750D5D3CD21B3B130DE8B61515E135CD49B5 -I (--iter) for transferring multiple iterations of the selected input currently only has an effect when transferring random data using -S (--size). Error out if -I is used without -S to avoid confusion. Signed-off-by: Jonas Rebmann --- tools/spi/spidev_test.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tools/spi/spidev_test.c b/tools/spi/spidev_test.c index 908ed038889b..97d09bf4dafb 100644 --- a/tools/spi/spidev_test.c +++ b/tools/spi/spidev_test.c @@ -463,6 +463,9 @@ int main(int argc, char *argv[]) if (random_input && transfer_size < 0) pabort("a size argument is mandatory for -S (--size)"); =20 + if (iterations && transfer_size < 0) + pabort("-I (--iter) is only implemented for -S (--size)"); + fd =3D open(device, O_RDWR); if (fd < 0) pabort("can't open device"); --=20 2.56.0.rc0.108.gf0ef1b96a0 From nobody Thu Sep 24 23:34:05 2026 Received: from mx1.white.stw.pengutronix.de (mx1.white.stw.pengutronix.de [185.203.200.13]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C18A139768F; Thu, 24 Sep 2026 13:44:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=185.203.200.13 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790257458; cv=pass; b=sAWg/na7TYaqsYdMw/iCmpxZL4VcgXn4vApCz4XIA/wLq+xlWryiUVfmdbYY6oaAGHC8lYnfzsSA9sYgIDjyatOkvviUnaBCV9Ca5k//L/6vRriSLsoNv9z5Pb37U9ylTuftpAJHzQdHbROd18M2jbHbTK4Dciq+6RPaqINc2NQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790257458; c=relaxed/simple; bh=aLJdTcfY1SJeao33nULpegw/broOjWVZMJ2Yyqfb+BE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=cZuUWemj1rzNkmiq7m5bfKuq2Pa+GY3H0bs90DdrA+OkewKQloAkVlcpdiLI8yBCugTBrGkO3GXMw0dUw22Uzj7KRpgfg3SueofgfrWDc1fFUvFSWoOAPNElgIKXUfDLDkDRnfV9FTFn8mVf4R79bf3d+wr7jNrwaMlwPEGu/Vk= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; dkim=pass (2048-bit key) header.d=pengutronix.de header.i=@pengutronix.de header.b=ZnvYhXn+; arc=pass smtp.client-ip=185.203.200.13 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pengutronix.de header.i=@pengutronix.de header.b="ZnvYhXn+" Received: from dude04.red.stw.pengutronix.de (dude04.red.stw.4.pengutronix.de [10.17.1.12]) (Authenticated sender: relay-from-dude04.red.stw.pengutronix.de) by mx1.white.stw.pengutronix.de (Postfix) with ESMTPSA id C7AE3202136; Thu, 24 Sep 2026 15:44:07 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pengutronix.de; s=20260414; t=1790257447; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=5m4dO0JnHDZwqU78fXcDoZdrLvSPchXUhEENin9s9QI=; b=ZnvYhXn+UAo9D9zE5B5rMZAa85AK74OkLG8aBWVrO7MDCQZ3vRooKNJiTiWaOe1aWdDoSM fpVnLdUnI92lZKTSLFro+KUEOekQJZf3hZvk06aD1tbP9fc9ZhIVbDRpnb1oHVkUkesrK1 DlGUmKwmd6irj4ACnvly8X0PmrZzTjnKpUPlKqU7sTG/cu0ASTEyHINQLRkeXZBsIYbe3Y ekGqn3+cgG0OmtXCQvKvd9/M3JG92As32MjLLp1vyTfOGQBY28WjtB7r+lro2LwWgVhwK5 OQYrdyUrIeETR2k1VdxEHXfJcNEjjDeLRwu8HDlTJ9ARHd5YTw8dx6drbogr9Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=pengutronix.de; s=20260414; t=1790257447; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=5m4dO0JnHDZwqU78fXcDoZdrLvSPchXUhEENin9s9QI=; b=WZIVEJeJoQ5v8xKMAFPEj64BUC8ml67Ac17ivX68YJuWQT7akSypOFBZF7lc//ZB/GCdZ0 ZzMA4jPY1scaydhIaA+fxUj4bLphvczRVb2N/j9aKIX4HIUpHH7xZjFlFlMuq0LrcuuBFf QDZgzpLYz3S79SE9VJU6VUWwlGpOqtqd2jShVi5x4Ls70Le08rT25ErvANlNKQJSl3vvQ4 mlH0BSEZ1dVj844BgPWfe63o4uZ/2WTCLjuPv4cyAX5NIsReQHjz67l3ev/VyDbP7RI+mJ iMxnAKBDOg4wsXPOXhuQlvISjgzgnMs9yTIo7iT/qOGbMkWNFRq4tNUG/o465g== ARC-Seal: i=1; s=20260414; d=pengutronix.de; t=1790257447; a=rsa-sha256; cv=none; b=UM6MBHxt2srIJ3lkl38Vghm3pzsOy6FJiH469NC3L2AEDpbRc6HQVQDkobknCphzcDaI30 PTlemSH38gHHL1Im9Qz9gj3fKNECbVs6kcqySo5zLgOIeY0aReo24lej0v8gzisCXKdeIK +W1HAco9z8cAvMXkD53i4oGJylBezPUPninT3IsELnJfWY9XU1jmUQMV0ekjVfB8eJtSGC Wkely3NQB10rS2uxh1bu+vWaCSm58Va6fSTnYGDq3ahE5hVLuMwmCzGy3HIMBvPtsYgEUV 3Kex7J6FvVQhjA5onMjyQZL23vD0KhcEwFme5TNBrZQhM+0aU7Cs+WtHXn82bQ== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=relay-from-dude04.red.stw.pengutronix.de smtp.mailfrom=jre@pengutronix.de Received: from dude04.red.stw.pengutronix.de (localhost [IPv6:::1]) by dude04.red.stw.pengutronix.de (Postfix) with ESMTP id 954FD381110; Thu, 24 Sep 2026 15:44:07 +0200 (CEST) From: Jonas Rebmann Date: Thu, 24 Sep 2026 15:43:56 +0200 Subject: [PATCH v7 06/13] spi: spidev_test: always compare loopback data Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260924-spi-sun4i-spidev_test-v7-6-126e31a07fdc@pengutronix.de> References: <20260924-spi-sun4i-spidev_test-v7-0-126e31a07fdc@pengutronix.de> In-Reply-To: <20260924-spi-sun4i-spidev_test-v7-0-126e31a07fdc@pengutronix.de> To: Mark Brown Cc: linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, Marc Kleine-Budde , kernel@pengutronix.de, Jonas Rebmann X-Mailer: b4 0.16-dev X-Developer-Signature: v=1; a=openpgp-sha256; l=1356; i=jre@pengutronix.de; h=from:subject:message-id; bh=aLJdTcfY1SJeao33nULpegw/broOjWVZMJ2Yyqfb+BE=; b=owGbwMvMwCV2ZcYT3onnbjcwnlZLYsjaqqkc/CB7bp3OFr1pG9nurdH5olIy4YdOaouM5Nu0h Xtf1zeVdJSyMIhxMciKKbLEqskpCBn7XzertIuFmcPKBDKEgYtTACaiv4SR4SDrbYY14ZdFMyqT Xv6eIZZ/4t0xRo5nbyS38Ma/OXzkVCPDP80NUr4bbsg9e138cu+Bo7eFslJ42pK3prH+cl7yy8F /OicA X-Developer-Key: i=jre@pengutronix.de; a=openpgp; fpr=0B7B750D5D3CD21B3B130DE8B61515E135CD49B5 In loopback mode, spidev_test verifies that the received data matches the sent data. However this test was only performed when random data was transferred using the -S switch. Always perform the test by moving it from transfer_buf() to transfer(). Signed-off-by: Jonas Rebmann --- tools/spi/spidev_test.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/tools/spi/spidev_test.c b/tools/spi/spidev_test.c index 97d09bf4dafb..e46eaef4d2ab 100644 --- a/tools/spi/spidev_test.c +++ b/tools/spi/spidev_test.c @@ -173,6 +173,15 @@ static void transfer(int fd, uint8_t const *tx, uint8_= t const *rx, size_t len) =20 if (verbose) hex_dump(rx, len, 32, "RX"); + + if (mode & SPI_LOOP) { + if (memcmp(tx, rx, len)) { + fprintf(stderr, "transfer error !\n"); + hex_dump(tx, len, 32, "TX"); + hex_dump(rx, len, 32, "RX"); + exit(1); + } + } } =20 static void print_usage(const char *prog) @@ -435,15 +444,6 @@ static void transfer_buf(int fd, int len) _write_count +=3D len; _read_count +=3D len; =20 - if (mode & SPI_LOOP) { - if (memcmp(tx, rx, len)) { - fprintf(stderr, "transfer error !\n"); - hex_dump(tx, len, 32, "TX"); - hex_dump(rx, len, 32, "RX"); - exit(1); - } - } - free(rx); free(tx); } --=20 2.56.0.rc0.108.gf0ef1b96a0 From nobody Thu Sep 24 23:34:05 2026 Received: from mx1.white.stw.pengutronix.de (mx1.white.stw.pengutronix.de [185.203.200.13]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A444548820D; Thu, 24 Sep 2026 13:44:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=185.203.200.13 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790257459; cv=pass; b=EaQGv8LcYAZOKjqWoebnjoYlRBgsjsJKHXWBw37C4kt9z7GUPsxZ2p2mcSZtvLlVrUc5J30tKpTMaIoQOjUtBLoWZDXYxAbPhHPp4dIgHF7pRlm5ZvFdwsEoEYF2dSEnZ8eA6oW7IPfQ6qyWMqt9QhjxbLmzfbmDtMOyjpf1Koc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790257459; c=relaxed/simple; bh=GE2IZwoNuKbcimoAQbnNFI8jCDtlCm5Q7YBRLHm4kwk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Zqh4rxnA+pxSMI5W/YTM/9YQ1o5Lbg3utYmLW6jhNac35H/aF5fViyZ/gIcf+zOX5L6l2dNfMfx/xHQKFQ+7nUQpzoTpRFIOvcTSEUMEsmTv8vgh3MVahPcphgb6kWMNXGgzY55wkLxscFEd2y2eUsR3umrQ63xIOK+dSjDlQ0A= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; dkim=pass (2048-bit key) header.d=pengutronix.de header.i=@pengutronix.de header.b=gZLa3nU6; arc=pass smtp.client-ip=185.203.200.13 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pengutronix.de header.i=@pengutronix.de header.b="gZLa3nU6" Received: from dude04.red.stw.pengutronix.de (dude04.red.stw.4.pengutronix.de [10.17.1.12]) (Authenticated sender: relay-from-dude04.red.stw.pengutronix.de) by mx1.white.stw.pengutronix.de (Postfix) with ESMTPSA id D09B8202148; Thu, 24 Sep 2026 15:44:07 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pengutronix.de; s=20260414; t=1790257447; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=9UrzVfIS+tiJtdHJqi30Cc56dsqG2vVFZJsao508Mak=; b=gZLa3nU6CS4Sz7nDg1PnbzymZDd2OB/G/5ShEyTVbTcawtCW3PgUTSj8mLPbrTrw6uP6E/ deJmq3vEz4exbBJNlOOP6waA6tkHQxKp0Ek+EVpR3kGihM4r2AEhS3WUcOsO5rM63Sx93G BFUyH2hI9Dvz+AS1+7IwQ4CwXNuX2lhlW7ndcZz9nUn0yO242xVY05xGduIQm/uP8kW+4S 6DdmiMUCj4xaVXaSyxhFA3jg5TRENXOp6adTP8uRq1504QSbz9rKnrpG11RN8XsXba649G wtMqJaEn8iJp1lBydXCycdFE8Ix8myYr+hnIHpGa6xaHLg8MqHUfje8qEWk2+Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=pengutronix.de; s=20260414; t=1790257447; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=9UrzVfIS+tiJtdHJqi30Cc56dsqG2vVFZJsao508Mak=; b=dH0GDdsMivkJZJgw10PJ3RVBNkSe5W/m4BNUsZQ9sBwaWA+mhMpin0Jkn4y5tZG1anIBxn 4VwjEMbi3rGPV2v2h1a/LhFREKxfErM5K/UlP6v9q6s72iM7coLVPYqCs+DpdRMiks1T8+ IPuPAGsGVH0U+MXJODYhIoidMmh0sIvNpG7qwQJevwcoxvMPNP2UOwyiGZvnGcSJgCBb30 rH0f612W/JkOKlSDOkDsiUSxX5nlypcxAfP0WgIMSJaYc6FauFSus+QqoV5LsD9ksU/fgH xj/xxiYbKWbuZ5bxKAb5bLf71f7+zjewcSVMPDcWk3q/h2Gr2A+TyhZJ7l5T1g== ARC-Seal: i=1; s=20260414; d=pengutronix.de; t=1790257447; a=rsa-sha256; cv=none; b=FPMtK67FSHIa/iqTYHJi/NbXU9DyJh1XkSKP3WAs+KmULnVA83sRHDF8MRWESs9ZynGsGD LB9dU9FarYuPLiZ9oUhTgBQYvrBicnyIcWHeJ36gzz49Pv310tJEtCkirblNRPL7jocm+f HkqQEEsCPxk++kF5yMGFtAdvDKe4gEvFbrIIOihtdpoaG4SeOv2xsJHmVou5DBWcp1VEEa SWPB6pkzg4TuglTSkC6cDLbxDfmOANeQj3XHmt+k6droIjpckHVS34wppCaqkQIMalUI7c sydOWZMXDh/cJ878HYGo1BvnlU233w4nSLLHp3HweNw4C2qO3a/I0q8XTzzeIA== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=relay-from-dude04.red.stw.pengutronix.de smtp.mailfrom=jre@pengutronix.de Received: from dude04.red.stw.pengutronix.de (localhost [IPv6:::1]) by dude04.red.stw.pengutronix.de (Postfix) with ESMTP id 95836389203; Thu, 24 Sep 2026 15:44:07 +0200 (CEST) From: Jonas Rebmann Date: Thu, 24 Sep 2026 15:43:57 +0200 Subject: [PATCH v7 07/13] spi: spidev_test: add compare mode Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260924-spi-sun4i-spidev_test-v7-7-126e31a07fdc@pengutronix.de> References: <20260924-spi-sun4i-spidev_test-v7-0-126e31a07fdc@pengutronix.de> In-Reply-To: <20260924-spi-sun4i-spidev_test-v7-0-126e31a07fdc@pengutronix.de> To: Mark Brown Cc: linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, Marc Kleine-Budde , kernel@pengutronix.de, Jonas Rebmann X-Mailer: b4 0.16-dev X-Developer-Signature: v=1; a=openpgp-sha256; l=3177; i=jre@pengutronix.de; h=from:subject:message-id; bh=iiVt8FFbdDNYXbVlEGd24i9U1o2f3a8oqYSP+ebf+Zc=; b=owGbwMvMwCV2ZcYT3onnbjcwnlZLYsjaqqniu3UHz5pZmhYlH+L/qTz1KWPYXxMjWhhxuf7yB M274t4mHaUsDGJcDLJiiiyxanIKQsb+180q7WJh5rAygQxh4OIUgIkI1TD894hXrHyr6znPNnfG t0WOuXJdTL8LLprEa0nuOG/ofOrWJYbf7NubNwYuzZkpvvk6c4/zr2rVrpvPJU9c/vXN6fGjSs3 NbAA= X-Developer-Key: i=jre@pengutronix.de; a=openpgp; fpr=0B7B750D5D3CD21B3B130DE8B61515E135CD49B5 From: Marc Kleine-Budde Check whether the received data correspond to the transferred data but without enabling loopback mode in the controller. This is for testing with TX physically bridged to RX which is useful if a loopback mode is unavailable or insufficient. Signed-off-by: Marc Kleine-Budde Signed-off-by: Jonas Rebmann --- tools/spi/spidev_test.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/tools/spi/spidev_test.c b/tools/spi/spidev_test.c index e46eaef4d2ab..7b343803903e 100644 --- a/tools/spi/spidev_test.c +++ b/tools/spi/spidev_test.c @@ -44,6 +44,7 @@ static int verbose; static int transfer_size =3D -1; static int iterations; static int interval =3D 5; /* interval in seconds for showing transfer rat= e */ +static int compare; static int random_input; static int input_choices; =20 @@ -174,7 +175,7 @@ static void transfer(int fd, uint8_t const *tx, uint8_t= const *rx, size_t len) if (verbose) hex_dump(rx, len, 32, "RX"); =20 - if (mode & SPI_LOOP) { + if (compare || mode & SPI_LOOP) { if (memcmp(tx, rx, len)) { fprintf(stderr, "transfer error !\n"); hex_dump(tx, len, 32, "TX"); @@ -186,13 +187,14 @@ static void transfer(int fd, uint8_t const *tx, uint8= _t const *rx, size_t len) =20 static void print_usage(const char *prog) { - printf("Usage: %s [-2348CDFHILMNORSZbdilopsvw]\n", prog); + printf("Usage: %s [-2348CDFHILMNORSZbcdilopsvw]\n", prog); puts("general device settings:\n" " -D --device device to use (default /dev/spidev1.1)\n" " -s --speed max speed (Hz)\n" " -d --delay delay (usec)\n" " -w --word-delay word delay (usec)\n" " -l --loop loopback\n" + " -c --compare compare RX'ed and TX'ed data\n" "spi mode:\n" " -H --cpha clock phase\n" " -O --cpol clock polarity\n" @@ -230,6 +232,7 @@ static void parse_opts(int argc, char *argv[]) { "delay", 1, 0, 'd' }, { "word-delay", 1, 0, 'w' }, { "loop", 0, 0, 'l' }, + { "compare", 0, 0, 'c' }, { "cpha", 0, 0, 'H' }, { "cpol", 0, 0, 'O' }, { "rx-cpha-flip", 0, 0, 'F' }, @@ -253,7 +256,7 @@ static void parse_opts(int argc, char *argv[]) }; int c; =20 - c =3D getopt_long(argc, argv, "D:s:d:w:b:i:o:lHOLC3ZFMNR248p:vS:I:", + c =3D getopt_long(argc, argv, "D:s:d:w:b:i:o:lcHOLC3ZFMNR248p:vS:I:", lopts, NULL); =20 if (c =3D=3D -1) @@ -285,6 +288,9 @@ static void parse_opts(int argc, char *argv[]) case 'l': mode |=3D SPI_LOOP; break; + case 'c': + compare =3D 1; + break; case 'H': mode |=3D SPI_CPHA; break; @@ -466,6 +472,9 @@ int main(int argc, char *argv[]) if (iterations && transfer_size < 0) pabort("-I (--iter) is only implemented for -S (--size)"); =20 + if (compare && mode & (SPI_TX_OCTAL | SPI_TX_QUAD | SPI_TX_DUAL)) + pabort("-c (--compare) conflicts with -2 (--dual), -4 (--quad) or -8 (--= octal)"); + fd =3D open(device, O_RDWR); if (fd < 0) pabort("can't open device"); --=20 2.56.0.rc0.108.gf0ef1b96a0 From nobody Thu Sep 24 23:34:05 2026 Received: from mx1.white.stw.pengutronix.de (mx1.white.stw.pengutronix.de [185.203.200.13]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7F2A93EB7F1; Thu, 24 Sep 2026 13:44:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=185.203.200.13 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790257460; cv=pass; b=UDc6o7hpkQ+yeGb5NmgJmR+RmRDWN+m+RKQxGW2SPR4Pq7ZpXMG1RECbbBFSfQS53M/qLWfa+bfIqktxuIuzNb6wa5LQVRrSsVspuErY9xemnhzUXA5NPiyAXzq4bE2X8uH7lzurDeRUPVVP4+P5G/b8+9Jt20I6L2gHd5gWWk8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790257460; c=relaxed/simple; bh=pmiHAYoL5DejakDEuW5LJ4rVM3eUhDSub8A1ECGnk18=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=caxh0tqU3OCgSQh3cGnYtTjv29ZqPsGuUM4fD0gomHeJYKR8GJFGkDUilWBWWPKYFDnw9Fc7qCX8Juaj9yeFDAD58RF2lY4Fvq0i679WaCCBaO9ioL3uWxiRysPOZ+9y3D9+jAnHj53/Tw+0firxKu2meMwtIy6bDmgIlEXEFQg= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; dkim=pass (2048-bit key) header.d=pengutronix.de header.i=@pengutronix.de header.b=L6lXz1u2; arc=pass smtp.client-ip=185.203.200.13 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pengutronix.de header.i=@pengutronix.de header.b="L6lXz1u2" Received: from dude04.red.stw.pengutronix.de (dude04.red.stw.4.pengutronix.de [10.17.1.12]) (Authenticated sender: relay-from-dude04.red.stw.pengutronix.de) by mx1.white.stw.pengutronix.de (Postfix) with ESMTPSA id D074F202146; Thu, 24 Sep 2026 15:44:07 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pengutronix.de; s=20260414; t=1790257447; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=pS2M3jmjM6rlh02id3kbSdC1ox1X59K7xtv6Fq7j2F0=; b=L6lXz1u2cL5aRoGe1X/sUKUgD+6NrmWLUHJ8YhEwL2MpzQCE3k2dDCDmwYAVlDs4m9YnMh tvbq6K7kspcBKCgGEYJS1KVi4fUcEpk6Vop2xcNk1inaqlUBxHrkmJx6s7R0ltqgCpYEq1 QJlVghHpv70tCZHE5GK9wwc2YdvIeZDtJm+n39vOquQPg21LY+YIv4MDMvmmOfKlE6vMgl +50p2uM9v9ng71+D8M6FDpXZwCgn+c0LOkAxwh2aR1V+fdF/owEIps8vvwjvWX3y4TC23b Pc98w5BnPgJrW+3AU5qpX3dgOpsv3wBytuMYMuI3ByIW8otqRD3o667DIq202w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=pengutronix.de; s=20260414; t=1790257447; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=pS2M3jmjM6rlh02id3kbSdC1ox1X59K7xtv6Fq7j2F0=; b=M82xFq/tw9LUn+VjL9sbB6UZ5nH58oUirQd6jPFfomASnhxEF4V7lWfNAAgMlC/uZjKCm9 jsqnuKz/c5ROZliNe/syUJB1vfV35JjJucAuTZ0RP3BpOkISTbWzDpU4jx0NNotW30O6Rh 6vXPnNdkvQTT317tOso5nUKN6HkyikkFBEL+C9A1fYosWGbE+CEuN78PSYfl2RMOa13NBl 1taWr1GRs+29HchlswVADlpHO+1Rz7SSfqeCONJmmPpJZeYtxVYJe93dMSA+FExIkIUxLV uQJYurRHCh+9GaHwW9w/sDNhlL0oJoyiik4FIsqNYzGeoSymHETugbiPlSoWaw== ARC-Seal: i=1; s=20260414; d=pengutronix.de; t=1790257447; a=rsa-sha256; cv=none; b=eoYYgKpBcMCA1FgqzqZh3+I4gR6ghFEInU5fgfOtblnuE1Vs54DscjwcGV0xJDTP7Kgpiu RE5wmsRe5oqvpdhXHP+fYy4Jow8aHUzqlpYqPvwXskHE5j+7YD/z/QcJ6HbGIlEXyXXpSe 9HEm/5ATvP7zzDP9P8JmBZaJoIebvKyePU/vsEd6Sa6WAhx/uKB4C2KjttHPgEAEi1CwoL TNSoIliE6bVRvphN6KMhuzBC709tI9Admcgwvh2hqDZ6rw4zewHJkzIJEzmZp4vxsEmary 0I9TXUBwy8Yaz8oAVVbV+9TAI9Ua5aZl9xIhoIJ4msR9p8sztcDKBBz3ZLOiEg== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=relay-from-dude04.red.stw.pengutronix.de smtp.mailfrom=jre@pengutronix.de Received: from dude04.red.stw.pengutronix.de (localhost [IPv6:::1]) by dude04.red.stw.pengutronix.de (Postfix) with ESMTP id 95C05389209; Thu, 24 Sep 2026 15:44:07 +0200 (CEST) From: Jonas Rebmann Date: Thu, 24 Sep 2026 15:43:58 +0200 Subject: [PATCH v7 08/13] spi: spidev_test: allow disabling rx or tx buffers Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260924-spi-sun4i-spidev_test-v7-8-126e31a07fdc@pengutronix.de> References: <20260924-spi-sun4i-spidev_test-v7-0-126e31a07fdc@pengutronix.de> In-Reply-To: <20260924-spi-sun4i-spidev_test-v7-0-126e31a07fdc@pengutronix.de> To: Mark Brown Cc: linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, Marc Kleine-Budde , kernel@pengutronix.de, Jonas Rebmann X-Mailer: b4 0.16-dev X-Developer-Signature: v=1; a=openpgp-sha256; l=6191; i=jre@pengutronix.de; h=from:subject:message-id; bh=g8e/FAHF7ARJmiDeOBHpXrHrr0jwWi7quYYux7LCuYM=; b=owGbwMvMwCV2ZcYT3onnbjcwnlZLYsjaqqnyddX03t3vMjzcfpa0eZwP5Nn2+/sqy66wd56PJ k3aks1zvKOUhUGMi0FWTJElVk1OQcjY/7pZpV0szBxWJpAhDFycAjCR9fGMDO1Wesd2TciqXtIZ sclv5Xr+1ynNcc0v+3VuJfFPMPBzvsHwz1R/tuKtU8o3rq8KdZUXu5g5scF68bv8vq7t/7JSMyN eMwMA X-Developer-Key: i=jre@pengutronix.de; a=openpgp; fpr=0B7B750D5D3CD21B3B130DE8B61515E135CD49B5 From: Marc Kleine-Budde Allow not providing rx or tx buffers. This is useful to check if drivers that don't use SPI_CONTROLLER_MUST_RX (or -TX respectively) handle their operations correctly without a buffer. Signed-off-by: Marc Kleine-Budde Signed-off-by: Jonas Rebmann --- tools/spi/spidev_test.c | 84 +++++++++++++++++++++++++++++++++------------= ---- 1 file changed, 57 insertions(+), 27 deletions(-) diff --git a/tools/spi/spidev_test.c b/tools/spi/spidev_test.c index 7b343803903e..b02a6384d27b 100644 --- a/tools/spi/spidev_test.c +++ b/tools/spi/spidev_test.c @@ -45,6 +45,7 @@ static int transfer_size =3D -1; static int iterations; static int interval =3D 5; /* interval in seconds for showing transfer rat= e */ static int compare; +static int do_tx =3D 1, do_rx =3D 1; static int random_input; static int input_choices; =20 @@ -157,7 +158,7 @@ static void transfer(int fd, uint8_t const *tx, uint8_t= const *rx, size_t len) if (ret < 0) pabort("can't send spi message"); =20 - if (verbose) + if (verbose && tx) hex_dump(tx, len, 32, "TX"); =20 if (output_file) { @@ -172,10 +173,10 @@ static void transfer(int fd, uint8_t const *tx, uint8= _t const *rx, size_t len) close(out_fd); } =20 - if (verbose) + if (verbose && rx) hex_dump(rx, len, 32, "RX"); =20 - if (compare || mode & SPI_LOOP) { + if (tx && rx && (compare || mode & SPI_LOOP)) { if (memcmp(tx, rx, len)) { fprintf(stderr, "transfer error !\n"); hex_dump(tx, len, 32, "TX"); @@ -187,7 +188,7 @@ static void transfer(int fd, uint8_t const *tx, uint8_t= const *rx, size_t len) =20 static void print_usage(const char *prog) { - printf("Usage: %s [-2348CDFHILMNORSZbcdilopsvw]\n", prog); + printf("Usage: %s [-2348CDFHILMNORSZbcdiloprstvw]\n", prog); puts("general device settings:\n" " -D --device device to use (default /dev/spidev1.1)\n" " -s --speed max speed (Hz)\n" @@ -195,6 +196,8 @@ static void print_usage(const char *prog) " -w --word-delay word delay (usec)\n" " -l --loop loopback\n" " -c --compare compare RX'ed and TX'ed data\n" + " -t --no-tx don't send data\n" + " -r --no-rx don't receive data\n" "spi mode:\n" " -H --cpha clock phase\n" " -O --cpol clock polarity\n" @@ -233,6 +236,8 @@ static void parse_opts(int argc, char *argv[]) { "word-delay", 1, 0, 'w' }, { "loop", 0, 0, 'l' }, { "compare", 0, 0, 'c' }, + { "no-tx", 0, 0, 't' }, + { "no-rx", 0, 0, 'r' }, { "cpha", 0, 0, 'H' }, { "cpol", 0, 0, 'O' }, { "rx-cpha-flip", 0, 0, 'F' }, @@ -256,7 +261,7 @@ static void parse_opts(int argc, char *argv[]) }; int c; =20 - c =3D getopt_long(argc, argv, "D:s:d:w:b:i:o:lcHOLC3ZFMNR248p:vS:I:", + c =3D getopt_long(argc, argv, "D:s:d:w:b:i:o:lctrHOLC3ZFMNR248p:vS:I:", lopts, NULL); =20 if (c =3D=3D -1) @@ -291,6 +296,12 @@ static void parse_opts(int argc, char *argv[]) case 'c': compare =3D 1; break; + case 't': + do_tx =3D 0; + break; + case 'r': + do_rx =3D 0; + break; case 'H': mode |=3D SPI_CPHA; break; @@ -363,15 +374,17 @@ static void transfer_escaped_string(int fd, char *str) { size_t size =3D strlen(str); uint8_t *tx; - uint8_t *rx; + uint8_t *rx =3D NULL; =20 tx =3D malloc(size); if (!tx) pabort("can't allocate tx buffer"); =20 - rx =3D malloc(size); - if (!rx) - pabort("can't allocate rx buffer"); + if (do_rx) { + rx =3D malloc(size); + if (!rx) + pabort("can't allocate rx buffer"); + } =20 size =3D unescape((char *)tx, str, size); transfer(fd, tx, rx, size); @@ -385,7 +398,7 @@ static void transfer_file(int fd, char *filename) struct stat sb; int tx_fd; uint8_t *tx; - uint8_t *rx; + uint8_t *rx =3D NULL; =20 if (stat(filename, &sb) =3D=3D -1) pabort("can't stat input file"); @@ -398,9 +411,12 @@ static void transfer_file(int fd, char *filename) if (!tx) pabort("can't allocate tx buffer"); =20 - rx =3D malloc(sb.st_size); - if (!rx) - pabort("can't allocate rx buffer"); + + if (do_rx) { + rx =3D malloc(sb.st_size); + if (!rx) + pabort("can't allocate rx buffer"); + } =20 bytes =3D read(tx_fd, tx, sb.st_size); if (bytes !=3D sb.st_size) @@ -431,24 +447,29 @@ static void show_transfer_rate(void) =20 static void transfer_buf(int fd, int len) { - uint8_t *tx; - uint8_t *rx; + uint8_t *tx =3D NULL; + uint8_t *rx =3D NULL; int i; =20 - tx =3D malloc(len); - if (!tx) - pabort("can't allocate tx buffer"); - for (i =3D 0; i < len; i++) - tx[i] =3D random(); + if (do_tx) { + tx =3D malloc(len); + if (!tx) + pabort("can't allocate tx buffer"); + for (i =3D 0; i < len; i++) + tx[i] =3D random(); + } =20 - rx =3D malloc(len); - if (!rx) - pabort("can't allocate rx buffer"); + if (do_rx) { + rx =3D malloc(len); + if (!rx) + pabort("can't allocate rx buffer"); + } =20 transfer(fd, tx, rx, len); - - _write_count +=3D len; - _read_count +=3D len; + if (do_tx) + _write_count +=3D len; + if (do_rx) + _read_count +=3D len; =20 free(rx); free(tx); @@ -472,6 +493,15 @@ int main(int argc, char *argv[]) if (iterations && transfer_size < 0) pabort("-I (--iter) is only implemented for -S (--size)"); =20 + if (compare && (!do_tx || !do_rx)) + pabort("-c (--compare) conflicts with -t (--no-tx) or -r (--no-rx)"); + + if (!do_rx && output_file) + pabort("-r (--no-rx) conflicts with -o (--output)"); + + if (!do_tx && transfer_size < 0) + pabort("-t (--no-tx) is only implemented for -S (--size)"); + if (compare && mode & (SPI_TX_OCTAL | SPI_TX_QUAD | SPI_TX_DUAL)) pabort("-c (--compare) conflicts with -2 (--dual), -4 (--quad) or -8 (--= octal)"); =20 @@ -549,7 +579,7 @@ int main(int argc, char *argv[]) printf("total: tx %.1fKB, rx %.1fKB\n", _write_count/1024.0, _read_count/1024.0); } else - transfer(fd, default_tx, default_rx, sizeof(default_tx)); + transfer(fd, default_tx, do_rx ? default_rx : NULL, sizeof(default_tx)); =20 close(fd); =20 --=20 2.56.0.rc0.108.gf0ef1b96a0 From nobody Thu Sep 24 23:34:05 2026 Received: from mx1.white.stw.pengutronix.de (mx1.white.stw.pengutronix.de [185.203.200.13]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 13F944908CA; Thu, 24 Sep 2026 13:44:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=185.203.200.13 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790257461; cv=pass; b=mdHD7WdBPuyzQ7tUJBJb4XZE0ajwQB3mCbKetyblixwRK3INAXZ6fF8eBSSsMFPclN0dU+aN/aU3yPX5dOxi3VuHLFNHetkp9QgUIN5SG58zfOXMChZGOvE6t9PBHE3lsYtQHormMueYuBX+FTu8mqAjzonxlFifDiIsdVwZ7wA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790257461; c=relaxed/simple; bh=h/QxEQFU7oNx+a9fYXwk7xYQKYAfUUSa0P0j48QMuLo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=J3ri8w1YXXwkIrOTr3kLdnFb0uO1swH/762ads/QGz72W1ZdjX97dbWUf4w03uBjxHsHQWvdSdy1lhdoAjsEB1fgsVsSpwHt1iqF+r1rCPlooVNBN9zMWoyX2t5+4SV3U/y5C2Zq/Uvq1Pk3nxnjRbxfpsxnTFiB0fx8ABvVfJc= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; dkim=pass (2048-bit key) header.d=pengutronix.de header.i=@pengutronix.de header.b=D8tm+GKH; arc=pass smtp.client-ip=185.203.200.13 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pengutronix.de header.i=@pengutronix.de header.b="D8tm+GKH" Received: from dude04.red.stw.pengutronix.de (dude04.red.stw.4.pengutronix.de [10.17.1.12]) (Authenticated sender: relay-from-dude04.red.stw.pengutronix.de) by mx1.white.stw.pengutronix.de (Postfix) with ESMTPSA id D80032021BD; Thu, 24 Sep 2026 15:44:07 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pengutronix.de; s=20260414; t=1790257447; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=TVGfzABT/SyB7pATNgWgP8psyd4ik19RSTTi9sUTYjw=; b=D8tm+GKH57RUR2VMl6Tj10tmmJd5DgtmFc5nVj0ri+yshTEUGOdNSGEEZoWHGO4cYO3weW sMUY5laY86FpgLHEAYMFs9F+i9J+xjUDVnxY8sul0GzQ465B1gaB+RMAvm+Z9sSw10y+lU OEwEJa9NMTWzjmx0gPFRSGJT+W3TMrWoZAY4IlzhncdOB6bz0ekW1CS2NV2gHa0AbpFnHt CKjxvybo6+SWQ1rp/Zc4uJI64lYsN6Y24U8mEEd89lNMpozm/XPYRLRJkZ1VRlq4dNlHDj e/AlvT11SyWXf+qve++ZhiW7mwZhvSiMZ6r15EDNesGceDKk+2afxop57lMBmw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=pengutronix.de; s=20260414; t=1790257447; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=TVGfzABT/SyB7pATNgWgP8psyd4ik19RSTTi9sUTYjw=; b=L5iZeb1K314SejhMiAE2iW2oh73UFGU7CHhuRSxkbbuyBdP7/8M5wVhVQpExRcsiuUT1it WYup7+unfAFQ0zbB0ABqH3mueGmScvLTXOnZwpu0kZhmILLYYM8dCE0HqKIMneUQYjiWI5 xuWLRyjBuhudbyeuyWXNe42Ar5SVuQHYEtfD95WX+Y20jaL3aN68AWFCBdg80+Hy3hEGDf AzoXdphnRo5zyxsjYCa5y4jW/mi44ucBHtg/eZJrVPQiDUA2DPUgoYgT7cV8Stb9xDGuDu z6a2U4jZY2UgaAV1Q4E7TsHkgztl7qlHlNuz/x15pHhrgNQYGXa2R8VfwTspbw== ARC-Seal: i=1; s=20260414; d=pengutronix.de; t=1790257447; a=rsa-sha256; cv=none; b=KHqWHeVtS7AJfIpIwG0vEJNRD7tGLusKKOaWdC2qn0adObE762YQYkIMLsrPLJNRqihjRG MCsN0Z8Qt/db9KBy5mKNdes2tGL0eJ3iYYrH6dbEBgjNSn5HsK7d6xudLkR1iQfBTSviV7 Moiecl7SJIHAQudrXxJ0RG7i22tsxk9Ol3+mk3YzXp513OjuqSwWU4IfC9tgd5EUI6jzjn 0RBcHKJ/Hio1L71gj1ZTLmyknTzmbIWjCeP1Mh7uPZuwSIt+/ew0bpEkfrOfUCMEdpGCsG eionJPptB85+v6vpdUtrkySiwFrt3Qreb77BRuOTjATt2ZrGXVGo+tFd2ihQmg== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=relay-from-dude04.red.stw.pengutronix.de smtp.mailfrom=jre@pengutronix.de Received: from dude04.red.stw.pengutronix.de (localhost [IPv6:::1]) by dude04.red.stw.pengutronix.de (Postfix) with ESMTP id 95FDB38920B; Thu, 24 Sep 2026 15:44:07 +0200 (CEST) From: Jonas Rebmann Date: Thu, 24 Sep 2026 15:43:59 +0200 Subject: [PATCH v7 09/13] spi: spidev_test: don't send 0x0 or 0xff Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260924-spi-sun4i-spidev_test-v7-9-126e31a07fdc@pengutronix.de> References: <20260924-spi-sun4i-spidev_test-v7-0-126e31a07fdc@pengutronix.de> In-Reply-To: <20260924-spi-sun4i-spidev_test-v7-0-126e31a07fdc@pengutronix.de> To: Mark Brown Cc: linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, Marc Kleine-Budde , kernel@pengutronix.de, Jonas Rebmann X-Mailer: b4 0.16-dev X-Developer-Signature: v=1; a=openpgp-sha256; l=3462; i=jre@pengutronix.de; h=from:subject:message-id; bh=MY366KmR7OYF67j25VUTUgwc9lLxg0kfhZtgtWdWo3M=; b=owGbwMvMwCV2ZcYT3onnbjcwnlZLYsjaqqk6VU3xN/tMiQ3hBi2TrD9NCN+0dONz55zImot3p K1KbNjUO0pZGMS4GGTFFFli1eQUhIz9r5tV2sXCzGFlAhnCwMUpABMR62T4ZzZNPb3Q9Oa+/GfW H5p7jK9ECX1pFs08+67lCdOu3EWzUxgZpv78yLqq/KtRjIt/cHpiUdP9Qv3Sxs06txQYtisGXU1 iAgA= X-Developer-Key: i=jre@pengutronix.de; a=openpgp; fpr=0B7B750D5D3CD21B3B130DE8B61515E135CD49B5 From: Marc Kleine-Budde Particularly when using compare mode, if the controller fails to transfer any data, asserting on a read of 0x00 or 0xff may lead to a false negative test, indicating a byte was successfully transferred when the values simply originate from the pull-up or pull-down of RX. Signed-off-by: Marc Kleine-Budde Signed-off-by: Jonas Rebmann --- tools/spi/spidev_test.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/tools/spi/spidev_test.c b/tools/spi/spidev_test.c index b02a6384d27b..7ca427c27f07 100644 --- a/tools/spi/spidev_test.c +++ b/tools/spi/spidev_test.c @@ -45,6 +45,7 @@ static int transfer_size =3D -1; static int iterations; static int interval =3D 5; /* interval in seconds for showing transfer rat= e */ static int compare; +static int nonzero; static int do_tx =3D 1, do_rx =3D 1; static int random_input; static int input_choices; @@ -188,7 +189,7 @@ static void transfer(int fd, uint8_t const *tx, uint8_t= const *rx, size_t len) =20 static void print_usage(const char *prog) { - printf("Usage: %s [-2348CDFHILMNORSZbcdiloprstvw]\n", prog); + printf("Usage: %s [-2348CDFHILMNORSZbcdiloprstvwz]\n", prog); puts("general device settings:\n" " -D --device device to use (default /dev/spidev1.1)\n" " -s --speed max speed (Hz)\n" @@ -212,6 +213,7 @@ static void print_usage(const char *prog) " -i --input input data from a file (e.g. \"test.bin\")\n" " -o --output output data to a file (e.g. \"results.bin\")\n" " -p send data (e.g. \"1234\\xde\\xad\")\n" + " -z --nonzero don't send 0x00 or 0xff bytes\n" " -S --size transfer the given number of random bytes\n" " -I --iter iterations\n" "additional parameters:\n" @@ -249,6 +251,7 @@ static void parse_opts(int argc, char *argv[]) { "input", 1, 0, 'i' }, { "output", 1, 0, 'o' }, { "size", 1, 0, 'S' }, + { "nonzero", 0, 0, 'z' }, { "iter", 1, 0, 'I' }, { "bpw", 1, 0, 'b' }, { "lsb", 0, 0, 'L' }, @@ -261,7 +264,7 @@ static void parse_opts(int argc, char *argv[]) }; int c; =20 - c =3D getopt_long(argc, argv, "D:s:d:w:b:i:o:lctrHOLC3ZFMNR248p:vS:I:", + c =3D getopt_long(argc, argv, "D:s:d:w:b:i:o:lctrHOLC3ZFMNR248p:vS:zI:", lopts, NULL); =20 if (c =3D=3D -1) @@ -353,6 +356,9 @@ static void parse_opts(int argc, char *argv[]) random_input =3D 1; input_choices++; break; + case 'z': + nonzero =3D 1; + break; case 'I': iterations =3D atoi(optarg); break; @@ -455,8 +461,11 @@ static void transfer_buf(int fd, int len) tx =3D malloc(len); if (!tx) pabort("can't allocate tx buffer"); - for (i =3D 0; i < len; i++) - tx[i] =3D random(); + for (i =3D 0; i < len; i++) { + do + tx[i] =3D random(); + while (nonzero && (tx[i] =3D=3D 0x0 || tx[i] =3D=3D 0xff)); + } } =20 if (do_rx) { @@ -493,6 +502,9 @@ int main(int argc, char *argv[]) if (iterations && transfer_size < 0) pabort("-I (--iter) is only implemented for -S (--size)"); =20 + if (nonzero && transfer_size < 0) + pabort("-z (--nonzero) is only implemented for -S (--size)"); + if (compare && (!do_tx || !do_rx)) pabort("-c (--compare) conflicts with -t (--no-tx) or -r (--no-rx)"); =20 --=20 2.56.0.rc0.108.gf0ef1b96a0 From nobody Thu Sep 24 23:34:05 2026 Received: from mx1.white.stw.pengutronix.de (mx1.white.stw.pengutronix.de [185.203.200.13]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A5F1748F832; Thu, 24 Sep 2026 13:44:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=185.203.200.13 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790257460; cv=pass; b=ZjwrTy5QMSFMzWBa7zSUJcjtrmicJ98SCfR8+XoeVL1AspDQ/BpGtNUa5+9LjKA/UEJhsFXh8r3zO7GKEnxYdopxC1ZNbsgUbYPgfg66JNEOLH9yH24ddYoN3QlC7KxWLnKIkMLxTEDHuLX9LViOWjfokz3JeQxTXxJOYdjS1cE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790257460; c=relaxed/simple; bh=fEbdjsyxyH4HU41g60qM0jTAeNkFQMW0hNkM2uRdOZA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=QW3/1L81W8IRFGrSYVdiUCsncZ8Kf4KuIFBfX4bovyW8tk0kwcPtEbuLV5kTDSpXrv0sYg7MjE3jTYu9e2RAvdjl83at4Fw2jXifGRW7x6lTDPehLDwu0gXPN7BLAV1jIlGrEd3aWXXZ03p7jynIL2M/k6MwjONFl2Hh2324XHU= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; dkim=pass (2048-bit key) header.d=pengutronix.de header.i=@pengutronix.de header.b=VVaUNxm0; arc=pass smtp.client-ip=185.203.200.13 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pengutronix.de header.i=@pengutronix.de header.b="VVaUNxm0" Received: from dude04.red.stw.pengutronix.de (dude04.red.stw.4.pengutronix.de [10.17.1.12]) (Authenticated sender: relay-from-dude04.red.stw.pengutronix.de) by mx1.white.stw.pengutronix.de (Postfix) with ESMTPSA id D7A6E20216B; Thu, 24 Sep 2026 15:44:07 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pengutronix.de; s=20260414; t=1790257447; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Uqou9h0ayeeThfllId6Q8YVk8ffh6BKxj6G+xhZmANc=; b=VVaUNxm08vfyzBW5t5WBtsKtNEyVdawZikARvKUI05fnhMXAoG8W9u59SshrXhR67ydGB8 hNlddcPrBBYKxS0QQMqJYFiC7+ydrQO9deEs5uA2JmlEFQ/mNIwByCcdz7sDlckcvdfXVi SokXVv5GpM/sqE3dGtoRtzBAmDyvyTCwsFWiuYiOCWIhmgij1tTbB1DVur/715zzSr2Avx xHvrIODbEsfy9SC91vHHrIawIEfrptPps16iT9+OgVLNtvVtoes/rgOmVQoBfEVku4MGGj yZCXvVfJyBdHTt/WWpuBWZQnQ5fW1r0CW5o3hysRu9FNcWZhW77aZcNKh5NOxQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=pengutronix.de; s=20260414; t=1790257447; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Uqou9h0ayeeThfllId6Q8YVk8ffh6BKxj6G+xhZmANc=; b=BkZXBcD/pCiuWAVLL5FYQ1EG+A2cyGoej8+QLXdqqCK1SaNa9QHovaUbz5y54U3f3niK8b pK/1rbTxRgthGtnXoiTcB+cYZzOaqSvBK0EYVRpZqQVvjMJ+HK9GI7aIe5k8yDDMucpVO6 Xp6UkZKtHV3EdY7HGlQQOtONcngvjV6NwszmCmAbuHWW0NDd6/+qO+209GuHo7ky0OjbdY ciARijNuSNPuMGw01YZCBfxOChOiHDc/0OumP4ZAtD+SSaGie57wVETOoYeItUUH/psqnf 8fDGt7Nsz2UF0ZaF/WOCN4OZ0E38m6+rLX4vzRw0aNi8dQo7C6YcOC4qItuolw== ARC-Seal: i=1; s=20260414; d=pengutronix.de; t=1790257447; a=rsa-sha256; cv=none; b=St5ZC9jbFrArR26v9n/ABXOtgUYZZ46wDucP7lMeGeXgwWQjw3ayXhRTsVmHzUSJNO6IUK kNVO6ybZIDnypoiyGYKMsT1bgEgfE5COEjXW8yWnTAv2FtLpISfslEwu+wcqDg/RfWYsDb PQDy32jD96aD/DeGtaU1zj8imCSFgX/vgidPG2iuiMs8HuC7b/x5dL9rdKRjhCd4IyB4/M 5tIYpqTXgY3CCW4Oswbsx2lSjY6sY6aKxdAl3se5kFghRC/plSV3+81Tp+vjCFmXuzEWDz Ae3/DXv6oN6HaJ9Aru7aQrI2qm19fnerogjm96a1Y1V6bvjnfKVxrMrfWi/a8g== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=relay-from-dude04.red.stw.pengutronix.de smtp.mailfrom=jre@pengutronix.de Received: from dude04.red.stw.pengutronix.de (localhost [IPv6:::1]) by dude04.red.stw.pengutronix.de (Postfix) with ESMTP id 9659E38920F; Thu, 24 Sep 2026 15:44:07 +0200 (CEST) From: Jonas Rebmann Date: Thu, 24 Sep 2026 15:44:00 +0200 Subject: [PATCH v7 10/13] spi: spidev_test: send predictable data Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260924-spi-sun4i-spidev_test-v7-10-126e31a07fdc@pengutronix.de> References: <20260924-spi-sun4i-spidev_test-v7-0-126e31a07fdc@pengutronix.de> In-Reply-To: <20260924-spi-sun4i-spidev_test-v7-0-126e31a07fdc@pengutronix.de> To: Mark Brown Cc: linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, Marc Kleine-Budde , kernel@pengutronix.de, Jonas Rebmann X-Mailer: b4 0.16-dev X-Developer-Signature: v=1; a=openpgp-sha256; l=4587; i=jre@pengutronix.de; h=from:subject:message-id; bh=fEbdjsyxyH4HU41g60qM0jTAeNkFQMW0hNkM2uRdOZA=; b=owGbwMvMwCV2ZcYT3onnbjcwnlZLYsjaqqnKzeG23frK1hvhsx/L5LIwRD79LXm6Uks4pHS9Y 13xp+BPHaUsDGJcDLJiiiyxanIKQsb+180q7WJh5rAygQxh4OIUgIl4mjMyLPle5qEmIbxxuoT7 yu+q+zbdTz75N2nNn+1R7wwEJzl7H2Bk2PT68bm9dt3sqbe4/xaonp/w+L123YRT07NaEudN5/z iywYA X-Developer-Key: i=jre@pengutronix.de; a=openpgp; fpr=0B7B750D5D3CD21B3B130DE8B61515E135CD49B5 Introduce a flag to test on a predictable byte sequence instead of random bytes. This is useful when comparing multiple runs with the same option set e.g. with an oscilloscope. Signed-off-by: Marc Kleine-Budde Signed-off-by: Jonas Rebmann --- tools/spi/spidev_test.c | 38 +++++++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/tools/spi/spidev_test.c b/tools/spi/spidev_test.c index 7ca427c27f07..a58680b6288a 100644 --- a/tools/spi/spidev_test.c +++ b/tools/spi/spidev_test.c @@ -48,6 +48,7 @@ static int compare; static int nonzero; static int do_tx =3D 1, do_rx =3D 1; static int random_input; +static int predictable; static int input_choices; =20 static uint8_t default_tx[] =3D { @@ -189,7 +190,7 @@ static void transfer(int fd, uint8_t const *tx, uint8_t= const *rx, size_t len) =20 static void print_usage(const char *prog) { - printf("Usage: %s [-2348CDFHILMNORSZbcdiloprstvwz]\n", prog); + printf("Usage: %s [-2348CDFHILMNOPRSZbcdiloprstvwz]\n", prog); puts("general device settings:\n" " -D --device device to use (default /dev/spidev1.1)\n" " -s --speed max speed (Hz)\n" @@ -214,6 +215,7 @@ static void print_usage(const char *prog) " -o --output output data to a file (e.g. \"results.bin\")\n" " -p send data (e.g. \"1234\\xde\\xad\")\n" " -z --nonzero don't send 0x00 or 0xff bytes\n" + " -P --predictable transfer the given number of sequential bytes\n" " -S --size transfer the given number of random bytes\n" " -I --iter iterations\n" "additional parameters:\n" @@ -259,12 +261,13 @@ static void parse_opts(int argc, char *argv[]) { "no-cs", 0, 0, 'N' }, { "ready", 0, 0, 'R' }, { "mosi-idle-low", 0, 0, 'M' }, + { "predictable", 1, 0, 'P' }, { "verbose", 0, 0, 'v' }, { NULL, 0, 0, 0 }, }; int c; =20 - c =3D getopt_long(argc, argv, "D:s:d:w:b:i:o:lctrHOLC3ZFMNR248p:vS:zI:", + c =3D getopt_long(argc, argv, "D:s:d:w:b:i:o:lctrHOLC3ZFMNR248p:P:vS:zI:= ", lopts, NULL); =20 if (c =3D=3D -1) @@ -342,6 +345,11 @@ static void parse_opts(int argc, char *argv[]) input_tx =3D optarg; input_choices++; break; + case 'P': + transfer_size =3D atoi(optarg); + predictable =3D 1; + input_choices++; + break; case '2': mode |=3D SPI_TX_DUAL; break; @@ -462,9 +470,17 @@ static void transfer_buf(int fd, int len) if (!tx) pabort("can't allocate tx buffer"); for (i =3D 0; i < len; i++) { - do - tx[i] =3D random(); - while (nonzero && (tx[i] =3D=3D 0x0 || tx[i] =3D=3D 0xff)); + if (predictable) { + int v =3D i - iterations; + + if (nonzero) + v =3D ((v % 254) + 254) % 254 + 1; + tx[i] =3D (char)v; + } else { + do { + tx[i] =3D random(); + } while (nonzero && (tx[i] =3D=3D 0x0 || tx[i] =3D=3D 0xff)); + } } } =20 @@ -493,17 +509,17 @@ int main(int argc, char *argv[]) parse_opts(argc, argv); =20 if (input_choices > 1) - pabort("at most one of -S (--size), -p, -i (--input) may be selected, " + pabort("at most one of -S (--size), -p, -i (--input), -P (--predictable)= may be selected, " "and each may be specified only once"); =20 - if (random_input && transfer_size < 0) - pabort("a size argument is mandatory for -S (--size)"); + if ((random_input || predictable) && transfer_size < 0) + pabort("a size argument is mandatory for -S (--size) and -P (--predictab= le)"); =20 if (iterations && transfer_size < 0) - pabort("-I (--iter) is only implemented for -S (--size)"); + pabort("-I (--iter) is only implemented for -S (--size) and -P (--predic= table)"); =20 if (nonzero && transfer_size < 0) - pabort("-z (--nonzero) is only implemented for -S (--size)"); + pabort("-z (--nonzero) is only implemented for -S (--size) and -P (--pre= dictable)"); =20 if (compare && (!do_tx || !do_rx)) pabort("-c (--compare) conflicts with -t (--no-tx) or -r (--no-rx)"); @@ -512,7 +528,7 @@ int main(int argc, char *argv[]) pabort("-r (--no-rx) conflicts with -o (--output)"); =20 if (!do_tx && transfer_size < 0) - pabort("-t (--no-tx) is only implemented for -S (--size)"); + pabort("-t (--no-tx) is only implemented for -S (--size) and -P (--predi= ctable)"); =20 if (compare && mode & (SPI_TX_OCTAL | SPI_TX_QUAD | SPI_TX_DUAL)) pabort("-c (--compare) conflicts with -2 (--dual), -4 (--quad) or -8 (--= octal)"); --=20 2.56.0.rc0.108.gf0ef1b96a0 From nobody Thu Sep 24 23:34:05 2026 Received: from mx1.white.stw.pengutronix.de (mx1.white.stw.pengutronix.de [185.203.200.13]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5C6F2303C97; Thu, 24 Sep 2026 13:44:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=185.203.200.13 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790257461; cv=pass; b=X01hWUBVaPVajhf5x/5xKl5zbH1BETZiCdCdmsSJapwcs488YbnYiC5VvPPRfcYCZ2gWrHVzD8ICc94Ay7rawdTUUNgUgvBLi4QvX1IxgAtUMkwzYgHsiyMxo3jEHAEG/Xt6z/A8PxbI2jNIKcqKbpmK/+bB4ouJNJZ3CA+uuJA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790257461; c=relaxed/simple; bh=ZsjZJ6lMvUjOLR+nKm6DDIwihQ/uyqhR247aCy9WRoc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=a5Ub3ixgNJ6s1pC4K0h6Cw6/K7/CGgW+iZmClejEojPHMUknMB/4PSksIzh7XBciEvvQ97PJqjZHO7p1d/Ueoih4YPaidcGtjZBNmHvjhLkhskYOD44I/xmlNugcknSQVuvlnEmE9tkzZTXIgI2+l+JTREYXJgbCpwXk5Iy286k= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; dkim=pass (2048-bit key) header.d=pengutronix.de header.i=@pengutronix.de header.b=Y1UizkPA; arc=pass smtp.client-ip=185.203.200.13 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pengutronix.de header.i=@pengutronix.de header.b="Y1UizkPA" Received: from dude04.red.stw.pengutronix.de (dude04.red.stw.pengutronix.de [IPv6:2a0a:edc0:0:1101:1d::ac]) (Authenticated sender: relay-from-dude04.red.stw.pengutronix.de) by mx1.white.stw.pengutronix.de (Postfix) with ESMTPSA id E00112021EE; Thu, 24 Sep 2026 15:44:07 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pengutronix.de; s=20260414; t=1790257447; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Kat2nDtgk8dA3NEE1N7KXHvGS38MPnJF+qOPyTrWRxw=; b=Y1UizkPAvEP1QreSMD7ZIVyDtCuvgWQu5z89IY2Wx/7r+0NdmGqHfv15vPrUPL1UuduogT JLuhVGLI4uxiIgfUbhzQk1PsH6MLYYRm65eexT9jZF5UM9S4IlDWMx71gfFyHWK4OiRNYu aUld1Kqjdv6Hy+oIb3/CgxhrsjLw+hR52dyX5eK6OoFyt6SFYkiL3fIv3UxSBdYtNtLT8f T0UuySgi963wnvxvcZ+YJEESTtd5mJwqvmoD7fiCFTAsjCm4Irm/PmMCLk8GLPT1dVFCo8 IW3BWdclyFzQxJGdEKDO/6kYNbQA37u2L+HV9PNqJz2DSNqV2GmrFYX84v+32A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=pengutronix.de; s=20260414; t=1790257447; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Kat2nDtgk8dA3NEE1N7KXHvGS38MPnJF+qOPyTrWRxw=; b=IPT6u3pD/md978jefB6sdWIiZ7ui8VAQj0fMQ2oR9Ll5Zw9EUdZ+4oGRKMZjKyxi95qcGw lrI4x03sFv7b/afYfqFlZfFhGtZ6Mx2sM8IbdgZZIxv6lHOqO3Db3ZPz0OwJ1HgIpQbR5O oa7a0IkuO/UAKpHjfFA6TUI7Pj3w8zqVPzcP5QkPcLtnoqLOsDVGP9HX3Dc1RV7Y802ejA nwl20l+P7xyb+IDdetJNpV55IQIkDI2tlKL0aH1qIsWpBS2H37nS3l/5VQrmDUQPNvV7hx 2bB6MbY1mpMMNMu6YLZTgD23e0JsFt2r75z/RAQ38CmzqwN577P2N01mJYk7Cw== ARC-Seal: i=1; s=20260414; d=pengutronix.de; t=1790257447; a=rsa-sha256; cv=none; b=gyw/Xn6GeRaUPAt9qa03nkM6E2aM258zckABIBK0b4pz7mdpo5vkWuUbzPKTuN9r6LN5nb rMDTwN37YYNqT7C6VoNcRy2i8Qppd1VPd26ZMs0ESLS6cK7HLCxu1ILXZrfeIYBdzjhNKK 4XMFcmQZIHAQiu5JAv1W8MqYheSGU+S+w5AXd8bPNuvkyMmzDsJA1KUEPw4w+37lTdf3kZ A3s8ORM8rSYEnHNObeW4OvU25jBU9nGbihb0217dUlIrhSpU081/dfulOVOv9kTCKHRaN/ Ojw/n1vsfMQdPzdpbn04ZVGB19hoCT7IQwDmEPRVgRtNFY8PPmeKJJdSYPOlLA== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=relay-from-dude04.red.stw.pengutronix.de smtp.mailfrom=jre@pengutronix.de Received: from dude04.red.stw.pengutronix.de (localhost [IPv6:::1]) by dude04.red.stw.pengutronix.de (Postfix) with ESMTP id 96A88389211; Thu, 24 Sep 2026 15:44:07 +0200 (CEST) From: Jonas Rebmann Date: Thu, 24 Sep 2026 15:44:01 +0200 Subject: [PATCH v7 11/13] spi: spidev_test: add option to split message into multiple transfers Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260924-spi-sun4i-spidev_test-v7-11-126e31a07fdc@pengutronix.de> References: <20260924-spi-sun4i-spidev_test-v7-0-126e31a07fdc@pengutronix.de> In-Reply-To: <20260924-spi-sun4i-spidev_test-v7-0-126e31a07fdc@pengutronix.de> To: Mark Brown Cc: linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, Marc Kleine-Budde , kernel@pengutronix.de, Jonas Rebmann X-Mailer: b4 0.16-dev X-Developer-Signature: v=1; a=openpgp-sha256; l=5895; i=jre@pengutronix.de; h=from:subject:message-id; bh=JNonMynwZhh5t5YN+ZnGdWvqKzm2ohhNRij3+5UreZ8=; b=owGbwMvMwCV2ZcYT3onnbjcwnlZLYsjaqql2LaXkruX6aeIf6yYL7k1e+d/75ITeTdkpn1fcv 9CvLcCQ1VHKwiDGxSArpsgSqyanIGTsf92s0i4WZg4rE8gQBi5OAZiIUyAjw31D38eil9+v3Lws ffmRHzm5vcw/Pk2NiRaZdmr5lLUJZx0ZGe48e5rfkbHoq2iyvNQC177Fvpudg3/teiR2xvJz+xW DEjYA X-Developer-Key: i=jre@pengutronix.de; a=openpgp; fpr=0B7B750D5D3CD21B3B130DE8B61515E135CD49B5 From: Marc Kleine-Budde SPI_IOC_MESSAGE() submits a single SPI message containing one or more transfers. Introduce an option to allow splitting the message into multiple transfers. Signed-off-by: Marc Kleine-Budde Signed-off-by: Jonas Rebmann --- tools/spi/spidev_test.c | 113 +++++++++++++++++++++++++++++++++++---------= ---- 1 file changed, 82 insertions(+), 31 deletions(-) diff --git a/tools/spi/spidev_test.c b/tools/spi/spidev_test.c index a58680b6288a..ac24d051835f 100644 --- a/tools/spi/spidev_test.c +++ b/tools/spi/spidev_test.c @@ -42,6 +42,7 @@ static uint16_t delay; static uint16_t word_delay; static int verbose; static int transfer_size =3D -1; +static int transfers =3D 1; static int iterations; static int interval =3D 5; /* interval in seconds for showing transfer rat= e */ static int compare; @@ -123,40 +124,79 @@ static int unescape(char *_dst, char *_src, size_t le= n) return ret; } =20 -static void transfer(int fd, uint8_t const *tx, uint8_t const *rx, size_t = len) +static void transfer(int fd, uint8_t const * const tx, uint8_t const * con= st rx, size_t len) { int ret; int out_fd; - struct spi_ioc_transfer tr =3D { - .tx_buf =3D (unsigned long)tx, - .rx_buf =3D (unsigned long)rx, - .len =3D len, - .delay_usecs =3D delay, - .word_delay_usecs =3D word_delay, - .speed_hz =3D speed, - .bits_per_word =3D bits, - }; - - if (mode & SPI_TX_OCTAL) - tr.tx_nbits =3D 8; - else if (mode & SPI_TX_QUAD) - tr.tx_nbits =3D 4; - else if (mode & SPI_TX_DUAL) - tr.tx_nbits =3D 2; - if (mode & SPI_RX_OCTAL) - tr.rx_nbits =3D 8; - else if (mode & SPI_RX_QUAD) - tr.rx_nbits =3D 4; - else if (mode & SPI_RX_DUAL) - tr.rx_nbits =3D 2; - if (!(mode & SPI_LOOP)) { - if (mode & (SPI_TX_OCTAL | SPI_TX_QUAD | SPI_TX_DUAL)) - tr.rx_buf =3D 0; - else if (mode & (SPI_RX_OCTAL | SPI_RX_QUAD | SPI_RX_DUAL)) - tr.tx_buf =3D 0; + size_t bytes_per_word =3D DIV_ROUND_UP(bits, 8); + int effective_transfers; + struct spi_ioc_transfer *tr; + size_t len_per_transfer; + const uint8_t *tx_buf =3D tx; + const uint8_t *rx_buf =3D rx; + size_t rem; + + if (len) { + effective_transfers =3D min_t(size_t, transfers, DIV_ROUND_UP(len, bytes= _per_word)); + len_per_transfer =3D roundup(DIV_ROUND_UP(len, effective_transfers), byt= es_per_word); + } else { + /* zero-length transfers may be handled by the driver, deliver as ordere= d */ + effective_transfers =3D transfers; + len_per_transfer =3D 0; } =20 - ret =3D ioctl(fd, SPI_IOC_MESSAGE(1), &tr); + if (SPI_MSGSIZE(effective_transfers) =3D=3D 0) + pabort("too many transfers, SPI_IOC_MESSAGE size limit exceeded"); + + tr =3D calloc(effective_transfers, sizeof(*tr)); + if (!tr) + pabort("can't allocate transfer array"); + + rem =3D len; + + for (int i =3D 0; i < effective_transfers; i++) { + size_t n =3D min(rem, len_per_transfer); + + tr[i] =3D (struct spi_ioc_transfer) { + .tx_buf =3D (unsigned long)tx_buf, + .rx_buf =3D (unsigned long)rx_buf, + .len =3D n, + .delay_usecs =3D delay, + .word_delay_usecs =3D word_delay, + .speed_hz =3D speed, + .bits_per_word =3D bits, + }; + + if (tx_buf) + tx_buf +=3D n; + + if (rx_buf) + rx_buf +=3D n; + + rem -=3D n; + + if (mode & SPI_TX_OCTAL) + tr[i].tx_nbits =3D 8; + else if (mode & SPI_TX_QUAD) + tr[i].tx_nbits =3D 4; + else if (mode & SPI_TX_DUAL) + tr[i].tx_nbits =3D 2; + if (mode & SPI_RX_OCTAL) + tr[i].rx_nbits =3D 8; + else if (mode & SPI_RX_QUAD) + tr[i].rx_nbits =3D 4; + else if (mode & SPI_RX_DUAL) + tr[i].rx_nbits =3D 2; + if (!(mode & SPI_LOOP)) { + if (mode & (SPI_TX_OCTAL | SPI_TX_QUAD | SPI_TX_DUAL)) + tr[i].rx_buf =3D 0; + else if (mode & (SPI_RX_OCTAL | SPI_RX_QUAD | SPI_RX_DUAL)) + tr[i].tx_buf =3D 0; + } + } + + ret =3D ioctl(fd, SPI_IOC_MESSAGE(effective_transfers), tr); + free(tr); if (ret < 0) pabort("can't send spi message"); =20 @@ -190,7 +230,7 @@ static void transfer(int fd, uint8_t const *tx, uint8_t= const *rx, size_t len) =20 static void print_usage(const char *prog) { - printf("Usage: %s [-2348CDFHILMNOPRSZbcdiloprstvwz]\n", prog); + printf("Usage: %s [-2348CDFHILMNOPRSTZbcdiloprstvwz]\n", prog); puts("general device settings:\n" " -D --device device to use (default /dev/spidev1.1)\n" " -s --speed max speed (Hz)\n" @@ -225,6 +265,7 @@ static void print_usage(const char *prog) " -N --no-cs no chip select\n" " -R --ready slave pulls low to pause\n" " -M --mosi-idle-low leave mosi line low when idle\n" + " -T --transfers number of transfers\n" "misc:\n" " -v --verbose Verbose (show tx buffer)\n"); exit(1); @@ -262,12 +303,13 @@ static void parse_opts(int argc, char *argv[]) { "ready", 0, 0, 'R' }, { "mosi-idle-low", 0, 0, 'M' }, { "predictable", 1, 0, 'P' }, + { "transfers", 1, 0, 'T' }, { "verbose", 0, 0, 'v' }, { NULL, 0, 0, 0 }, }; int c; =20 - c =3D getopt_long(argc, argv, "D:s:d:w:b:i:o:lctrHOLC3ZFMNR248p:P:vS:zI:= ", + c =3D getopt_long(argc, argv, "D:s:d:w:b:i:o:lctrHOLC3ZFMNR248p:P:T:vS:z= I:", lopts, NULL); =20 if (c =3D=3D -1) @@ -332,6 +374,9 @@ static void parse_opts(int argc, char *argv[]) case 'M': mode |=3D SPI_MOSI_IDLE_LOW; break; + case 'T': + transfers =3D atoi(optarg); + break; case 'N': mode |=3D SPI_NO_CS; break; @@ -533,6 +578,12 @@ int main(int argc, char *argv[]) if (compare && mode & (SPI_TX_OCTAL | SPI_TX_QUAD | SPI_TX_DUAL)) pabort("-c (--compare) conflicts with -2 (--dual), -4 (--quad) or -8 (--= octal)"); =20 + if (transfers < 1) + pabort("-T (--transfers) must be 1 or above"); + + if (bits < 1) + pabort("-b (--bpw) must be 1 or above"); + fd =3D open(device, O_RDWR); if (fd < 0) pabort("can't open device"); --=20 2.56.0.rc0.108.gf0ef1b96a0 From nobody Thu Sep 24 23:34:05 2026 Received: from mx1.white.stw.pengutronix.de (mx1.white.stw.pengutronix.de [185.203.200.13]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EA83348F03E; Thu, 24 Sep 2026 13:44:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=185.203.200.13 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790257463; cv=pass; b=op/Xk6LqFtNp5sDIyAk4E2Sq3zR/hdJrEJ01XC0uCJ8OC0oXJ4eLw0UiZRX+yZn7Cl1gniytfbCKBHmbHzlEoCt0KWjrL+i9kSPSG6gBymasUJO06/HlKpjfvQKdmu5/dmBgY3X4igcmfnRpt2HYS6DoXswKsgisp6XHyLHQijE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790257463; c=relaxed/simple; bh=vR5sqWR/nWd+VdjrhfgG4Pruhff0XIMs5Q1R9eBOYOU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=RVHvG+dxaerBaLaxlc4tj42MMc6btZTPnDrD92OQWZSgAuFCtGcwigAgkEZcb8hpSb3Qc0eehJhxE7/9W1bM1jLfdGkQUhkH62uDmr0pd7wviMKVtr9c1J8vmOz3IBb7DsMOYTdu5qkXqBCd83iKrplwmD0z/eVo/OABRARIiO0= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; dkim=pass (2048-bit key) header.d=pengutronix.de header.i=@pengutronix.de header.b=AvvvjlP9; arc=pass smtp.client-ip=185.203.200.13 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pengutronix.de header.i=@pengutronix.de header.b="AvvvjlP9" Received: from dude04.red.stw.pengutronix.de (dude04.red.stw.pengutronix.de [IPv6:2a0a:edc0:0:1101:1d::ac]) (Authenticated sender: relay-from-dude04.red.stw.pengutronix.de) by mx1.white.stw.pengutronix.de (Postfix) with ESMTPSA id E287B2021F4; Thu, 24 Sep 2026 15:44:07 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pengutronix.de; s=20260414; t=1790257447; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=nCQgkiuymy57snvAWn8LGeNEAr79Fh5kpire67Y6iDU=; b=AvvvjlP9oouUIJvTi4wnfHm48MYRQkNU9Pi4kOwlDGiQdAPptIDLZP6N2tQDT5O5T593RH Qpr5HOnMhp2NuXSQAhE9StW0B3JJk3XY4+wJNJiBA47aMY0X/uleWwCKFCJzbWPj6Qihsz PWIEGcRdB0vrYvR9HA2ValD1Q+3aNKNTpSVelwIyEU+/xOWZ/pDpkZ0nmRXgao7Qzvg/QQ rFOzQuucpMsamoX/n6kiAqcoVBJ31UvLbFLCo8n96+Y3+xW6P45ETOrfX91jSPlZZoZeO2 2mx2QVp6qBkdPwmrmtCyiwiCN0meO0OS54LeX4k0/eK5qTxhvQaokEgbHyzA1w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=pengutronix.de; s=20260414; t=1790257447; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=nCQgkiuymy57snvAWn8LGeNEAr79Fh5kpire67Y6iDU=; b=fQ5qmZVSpHzo1qBmJyOkbUa0MC1Ogk1yGqvlhH0W32rStfpbSysqGOdf0L7zWtcBUTutX8 X3XiUWn8/tOG/DKFfYUINWn23jAQc60/dlvxYQLi8RgM9acmvFFgOENBoYfQICcBamIwYu pEkspj4BgY/3cgeXsLhWh0afhmtWPhe0SUeKuCqs9yu1bVnWtwbgopTUHrUzL24y9ziiBF 6h5O/tvjhMb3OCii/67mdvgJ1gznAMCwblngQVsROi/PzCrLMoGsxMfESJLttjAanYJLVk MmleaTkSj38lg2iBllerDBbAkVsg6xz2McqZYtxRQ0/zVxj39wcokrlrhsk3Bw== ARC-Seal: i=1; s=20260414; d=pengutronix.de; t=1790257447; a=rsa-sha256; cv=none; b=OD8xsfwVlzXfTGtVKzF2w4cDyFEi319VrmoUpFjBsGYrjjNrG6fOJSaJGSjjdnCrur4hI7 NL/zTbxxGBfPLFtVKNjQ2+V8yE6hnJCOwWGM2jjm8Dc5XPnqY6g0kUhmhO9T+lAOjWBdGE i2P1VTNld3YQOd8oBGBToW2zQQNlmwrG703BrOCrmj8tNz0jKL60i5sscu4ZtI8HfQ9BB8 LnBYONCNBJZWtr0Q6UJmhP58usOk6IY2MOnj+qdfH6B+F02KANR+1VP2/TAQU/rLa4vYoZ vtT4SQYc7YcKqRd9XUzo0YfZwANlvASNYDiVFXVwYQXCTbUgC0F/x4AwdCirEw== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=relay-from-dude04.red.stw.pengutronix.de smtp.mailfrom=jre@pengutronix.de Received: from dude04.red.stw.pengutronix.de (localhost [IPv6:::1]) by dude04.red.stw.pengutronix.de (Postfix) with ESMTP id 96F5A389213; Thu, 24 Sep 2026 15:44:07 +0200 (CEST) From: Jonas Rebmann Date: Thu, 24 Sep 2026 15:44:02 +0200 Subject: [PATCH v7 12/13] spi: spidev_test: print TX on error Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260924-spi-sun4i-spidev_test-v7-12-126e31a07fdc@pengutronix.de> References: <20260924-spi-sun4i-spidev_test-v7-0-126e31a07fdc@pengutronix.de> In-Reply-To: <20260924-spi-sun4i-spidev_test-v7-0-126e31a07fdc@pengutronix.de> To: Mark Brown Cc: linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, Marc Kleine-Budde , kernel@pengutronix.de, Jonas Rebmann X-Mailer: b4 0.16-dev X-Developer-Signature: v=1; a=openpgp-sha256; l=1059; i=jre@pengutronix.de; h=from:subject:message-id; bh=XAdyvSbHsZttpkVRgKKTfki4zPWPU0Rk3xOF0kHQYEU=; b=owGbwMvMwCV2ZcYT3onnbjcwnlZLYsjaqqn28qyWbKp/0jUhnkk9yzKPpbZMO7Y2/VxdW+CVt gORAYu1OkpZGMS4GGTFFFli1eQUhIz9r5tV2sXCzGFlAhnCwMUpABNxn8nIsH61d5b4XOMJJb42 alzrAtZ1T4s7/mHBh5KGmVV/wngbnzL8D+9ena/08WPQy2cBN/7cKJViiq3rcmLq6tD3C3bPY5/ CBwA= X-Developer-Key: i=jre@pengutronix.de; a=openpgp; fpr=0B7B750D5D3CD21B3B130DE8B61515E135CD49B5 From: Marc Kleine-Budde If sending an spi message fails, dump its first up to 256 bytes to the console. Signed-off-by: Marc Kleine-Budde Signed-off-by: Jonas Rebmann --- tools/spi/spidev_test.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/tools/spi/spidev_test.c b/tools/spi/spidev_test.c index ac24d051835f..61951ed1c908 100644 --- a/tools/spi/spidev_test.c +++ b/tools/spi/spidev_test.c @@ -197,8 +197,18 @@ static void transfer(int fd, uint8_t const * const tx,= uint8_t const * const rx, =20 ret =3D ioctl(fd, SPI_IOC_MESSAGE(effective_transfers), tr); free(tr); - if (ret < 0) + if (ret < 0) { + const size_t dump_len =3D min_t(size_t, len, 256); + int saved_errno =3D errno; + + if (tx) { + hex_dump(tx, dump_len, 32, "TX"); + if (len > dump_len) + printf("... (%zu more bytes)\n", len - dump_len); + } + errno =3D saved_errno; pabort("can't send spi message"); + } =20 if (verbose && tx) hex_dump(tx, len, 32, "TX"); --=20 2.56.0.rc0.108.gf0ef1b96a0 From nobody Thu Sep 24 23:34:05 2026 Received: from mx1.white.stw.pengutronix.de (mx1.white.stw.pengutronix.de [185.203.200.13]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 608FD48821C; Thu, 24 Sep 2026 13:44:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=185.203.200.13 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790257463; cv=pass; b=gmnu7lYXcjhAClUKu4Tg/e5lDZrPkbQw6oUCIA+MgeUFDqyMxhg10sHrLaWafMuEIo6Q1MroQIDSnlkltxH8PpcuW1B9aQK22dvu4T4p15mup+7GxT1no+G3GeMAHBE2jBSt8Z7b1vNBRlnH06TRvNDZOLIaFK/NMRMGzQ8e1nk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790257463; c=relaxed/simple; bh=0T7DcRAuELik/rSt1wTrbR4IY17VdO/v6iCTw4rwGm4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=kyN/F+oWb/oq8oXlvAsZP9aO7wL7l1XpNPf3nPOyDEeDGsyb+YHjXu7LFNGFvuO6/3Hyso4Y1czCdYLus+luKlvSngHjJIi94gzs59CyFdnqYusy7dT9Rd5WMPyA77X1BMywFHmkkBqKhvRvIOWc91DuNF51gBBHDfcyLO5DMnU= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; dkim=pass (2048-bit key) header.d=pengutronix.de header.i=@pengutronix.de header.b=PWF+SAYc; arc=pass smtp.client-ip=185.203.200.13 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pengutronix.de header.i=@pengutronix.de header.b="PWF+SAYc" Received: from dude04.red.stw.pengutronix.de (dude04.red.stw.pengutronix.de [IPv6:2a0a:edc0:0:1101:1d::ac]) (Authenticated sender: relay-from-dude04.red.stw.pengutronix.de) by mx1.white.stw.pengutronix.de (Postfix) with ESMTPSA id E4CF5202202; Thu, 24 Sep 2026 15:44:07 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pengutronix.de; s=20260414; t=1790257447; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Xwy3ZsDtoqlM9KQt08kn4Vry6A0bfmmb520mA4mnaGw=; b=PWF+SAYcOnPxfNP/4NRFK6up1eDW9HGJ9dnJLWCQ7rUXR6B2eVdhmEGju1Pm7rn7MC+pd4 qoTiiCrizWeJjF8wTqlpnwcNhgbDhJBAJrMT7IhFcXb2+j0qjm6sT7Q0zxAHMXniK5+/JZ cwT/mgFWbaEXErGzoP02fICmFlMBU++oLL/2vqTfg5anqflH3g7jd6xupZK0QGBepXi3j5 DrqdI7ncwpXKGw8zpHD0lMGIrlT+K6WA91slmxvGL6QDJtb3GGeqFnksvVpPBleZJb2zOd 62uAyQKj9GvBtVcRGE97lsfu4+/F8ZxUmjBZE1HSkot/uRzuxhH4h9UqyXFBFg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=pengutronix.de; s=20260414; t=1790257447; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Xwy3ZsDtoqlM9KQt08kn4Vry6A0bfmmb520mA4mnaGw=; b=SV/Nd1E4xGIxMtNeKxufCRcmWVN4RyBKJGFlFrqI1YQS+p5A/JnJGDCWtU+9otAqKzBbNw 1FNpRr6rpt9f0eWVlmIWqUMKXCcNUGMnP5fYTCdK1bydEdk9/7D/4zWk+MuU9MiZBhbPBg t3GkpOSL654KGYHG9qXLjx9nSKCGZulfIU/gWxBH4Zb3sgD9tG+PvFpihb+e1dsDEs/Uif DJ50z5GTMwNVwxB+/3cvdw0uZ4wSIGOY3V3z2Ih6IySYF14ln9Ugeg+iMUj7MEaqucBHAS 4vM86x5JNMfZ2jRfia3oOrnY9OCfPJre3TqCcBk924rwSelDwa0x8AcAas3NjA== ARC-Seal: i=1; s=20260414; d=pengutronix.de; t=1790257447; a=rsa-sha256; cv=none; b=FWrj48XqzLlHhWsr9pM5v8JQJ73yRnG85+xC8QZGVOO1KlQ/IyQY+ADyEVLRe664Kf7QFn I4DKSkea+pBGiUG6E3yDY9VijiUiwJq/oY3xZOHJvAcCCu3YRR2LBgP3R6AAbH/odb6l0E MyBMeUU1Hmddt0JO7Xpo0PlBrJDXdOTrKGRNpHOS7n0f7ehwCSeSJPVZ1a9xUyn3wTzHen P5OVS8GVOKYl8ctJmbsYyn6Dn1IiiDIqPXJ8bpiOr1FWMmNKXgWFUbpfCjD25bk8DrJEyY rqUcw71xq65qvUsqowRnHt/ovmFtip6jweDtT4IfrPaVNIW3AyMRElKrnLMTog== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=relay-from-dude04.red.stw.pengutronix.de smtp.mailfrom=jre@pengutronix.de Received: from dude04.red.stw.pengutronix.de (localhost [IPv6:::1]) by dude04.red.stw.pengutronix.de (Postfix) with ESMTP id 97397389215; Thu, 24 Sep 2026 15:44:07 +0200 (CEST) From: Jonas Rebmann Date: Thu, 24 Sep 2026 15:44:03 +0200 Subject: [PATCH v7 13/13] spi: spidev_test: rewrite unescape() to stay in bounds Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260924-spi-sun4i-spidev_test-v7-13-126e31a07fdc@pengutronix.de> References: <20260924-spi-sun4i-spidev_test-v7-0-126e31a07fdc@pengutronix.de> In-Reply-To: <20260924-spi-sun4i-spidev_test-v7-0-126e31a07fdc@pengutronix.de> To: Mark Brown Cc: linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, Marc Kleine-Budde , kernel@pengutronix.de, Jonas Rebmann X-Mailer: b4 0.16-dev X-Developer-Signature: v=1; a=openpgp-sha256; l=2402; i=jre@pengutronix.de; h=from:subject:message-id; bh=0T7DcRAuELik/rSt1wTrbR4IY17VdO/v6iCTw4rwGm4=; b=owGbwMvMwCV2ZcYT3onnbjcwnlZLYsjaqql+jaPX+eeEOQFGjed6GN7zR5fM5zqy1fBC6/TAx RmaZR4LOkpZGMS4GGTFFFli1eQUhIz9r5tV2sXCzGFlAhnCwMUpABNZmMLwP/BZdHNQzivHI9z5 7w1vm700Z9hgVxXuuZqTe85lk9Umbxj+O9atn+Qa73TVkWmlR8Kp7GZ2sesFr24+FpiRurJtcvR 6HgA= X-Developer-Key: i=jre@pengutronix.de; a=openpgp; fpr=0B7B750D5D3CD21B3B130DE8B61515E135CD49B5 unescape() could read the source buffer out of bounds for inputs like "\\x" and could write the destination buffer out of bounds due to lack of checking against the len parameter. For better readability and consistency, rewrite it as a simplified version of unescape_string() in string_helpers.h. This includes rearranging src and dst parameters. Signed-off-by: Jonas Rebmann --- tools/spi/spidev_test.c | 38 +++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/tools/spi/spidev_test.c b/tools/spi/spidev_test.c index 61951ed1c908..5bd3159f61a7 100644 --- a/tools/spi/spidev_test.c +++ b/tools/spi/spidev_test.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -100,28 +101,31 @@ static void hex_dump(const void *src, size_t length, = size_t line_size, * Unescape - process hexadecimal escape character * converts shell input "\x23" -> 0x23 */ -static int unescape(char *_dst, char *_src, size_t len) +static int unescape(char *src, char *dst, size_t size) { - int ret =3D 0; - int match; - char *src =3D _src; - char *dst =3D _dst; + char *out =3D dst; unsigned int ch; =20 - while (*src) { - if (*src =3D=3D '\\' && *(src+1) =3D=3D 'x') { - match =3D sscanf(src + 2, "%2x", &ch); - if (!match) - pabort("malformed input string"); + while (*src && size--) { + if (src[0] =3D=3D '\\' && src[1] !=3D '\0') { + src++; + + if (src[0] =3D=3D 'x' && + isxdigit((unsigned char)src[1]) && + isxdigit((unsigned char)src[2]) && + sscanf(&src[1], "%2x", &ch)) { + *out++ =3D (unsigned char)ch; + src +=3D 3; + continue; + } =20 - src +=3D 4; - *dst++ =3D (unsigned char)ch; - } else { - *dst++ =3D *src++; + *out++ =3D '\\'; + if (!size--) + break; } - ret++; + *out++ =3D *src++; } - return ret; + return out - dst; } =20 static void transfer(int fd, uint8_t const * const tx, uint8_t const * con= st rx, size_t len) @@ -455,7 +459,7 @@ static void transfer_escaped_string(int fd, char *str) pabort("can't allocate rx buffer"); } =20 - size =3D unescape((char *)tx, str, size); + size =3D unescape(str, (char *)tx, size); transfer(fd, tx, rx, size); free(rx); free(tx); --=20 2.56.0.rc0.108.gf0ef1b96a0