From nobody Mon Dec 1 23:03:13 2025 Received: from metis.whiteo.stw.pengutronix.de (metis.whiteo.stw.pengutronix.de [185.203.201.7]) (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 AF3FA3016F0 for ; Wed, 26 Nov 2025 10:17:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.203.201.7 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764152228; cv=none; b=e4TaSC0HtElWVBZHDuFEoNwpkuCDUGDj/7DsZOKVDtvDXFSmOGZN7w9qd43T7JB7PgBdA1GEPwej9L7CTAWxG1dkYYoH57mPwPflzqqroifrj8LnToL4cZz5IQD2q3r+KC3No+eyz/RDObARe74el9PGfWdNnSTxpzouEnBccmE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764152228; c=relaxed/simple; bh=7upFcfNtk02ZrLQVj1Y75LsfDYr/ckHj8RmqRB7L5yg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=tg4pXCLAbQY2QRrc+zkVFz2IW4fyB+LuQmVXCY3PYFKakiFYYjPmX4PID51HXB+QLooHM4MLtlOjj7P9jfMh9m8/C2IcqTxmIS93z2j+k9t/rb0a2ez15R5WUsVnzF2q2f5gWLPsn8ExbMlAzf/WlVNQ0lqNQRVL6lmf8SLm1x0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; arc=none smtp.client-ip=185.203.201.7 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 Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.whiteo.stw.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1vOCZw-0000RV-0c; Wed, 26 Nov 2025 11:16:52 +0100 Received: from moin.white.stw.pengutronix.de ([2a0a:edc0:0:b01:1d::7b] helo=bjornoya.blackshift.org) by drehscheibe.grey.stw.pengutronix.de with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vOCZv-002aSy-15; Wed, 26 Nov 2025 11:16:51 +0100 Received: from hardanger.blackshift.org (p54b152ce.dip0.t-ipconnect.de [84.177.82.206]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) (Authenticated sender: mkl-all@blackshift.org) by smtp.blackshift.org (Postfix) with ESMTPSA id 1EAAB4A88DE; Wed, 26 Nov 2025 10:16:51 +0000 (UTC) From: Marc Kleine-Budde Date: Wed, 26 Nov 2025 11:16:14 +0100 Subject: [PATCH can-next v8 13/17] can: calc_bittiming: add can_calc_sample_point_nrz() 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: <20251126-canxl-v8-13-e7e3eb74f889@pengutronix.de> References: <20251126-canxl-v8-0-e7e3eb74f889@pengutronix.de> In-Reply-To: <20251126-canxl-v8-0-e7e3eb74f889@pengutronix.de> To: Marc Kleine-Budde , Vincent Mailhol , Oliver Hartkopp Cc: kernel@pengutronix.de, linux-can@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?q?St=C3=A9phane_Grosjean?= X-Mailer: b4 0.15-dev-a6db3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2123; i=mkl@pengutronix.de; h=from:subject:message-id; bh=h8iUAW6OBOFyCa9dq/JPiYvY0k8Oxvczhn5v3kx3D/4=; b=owEBbQGS/pANAwAKAQx0Zd/5kJGcAcsmYgBpJtOJYtjRl8SeCMThJIdwh0AW+aWDgJuOvFrBE 0cAqpFUooaJATMEAAEKAB0WIQSf+wzYr2eoX/wVbPMMdGXf+ZCRnAUCaSbTiQAKCRAMdGXf+ZCR nBc6B/9ghzzQw0+RyLt9eKJ9cAzyR+jbUbNkc5lkT/ZhjA+GXHzdd4N9skB59nJCMU6UTeCJiVa IaNsQNKyO3aISxTVOQmolB/Fsjti+3Hp66uNuYQ44EgV6qKKefTDmeqtRAOFlEclnYPOmO9BVYA fWOmtINg7swiX00EFo2GaMYIqugE214CiIQ1rMEiM0w6yPKQ8an9AlVLTH6VeZ/+eM9rfl4/hX3 kndOboOlAyU9nBZW/D6OYMayxDbNr1QrQgOXHN4kryzTYZmfZYFyx25xBsdF16cNLVwFfnRNo3z oswsP/JlbpW8TocaQF9icCciBKvIinAlIYnWRdxuHUcB1te6 X-Developer-Key: i=mkl@pengutronix.de; a=openpgp; fpr=C1400BA0B3989E6FBC7D5B5C2B5EE211C58AEA54 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: mkl@pengutronix.de X-SA-Exim-Scanned: No (on metis.whiteo.stw.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org From: Vincent Mailhol CAN XL optimal sample point for PWM encoding (when TMS is on) differs from the NRZ optimal one. There is thus a need to calculate a different sample point depending whether TMS is on or off. This is a preparation change: move the sample point calculation from can_calc_bittiming() into the new can_calc_sample_point_nrz() function. In an upcoming change, a function will be added to calculate the sample point for PWM encoding. Signed-off-by: Vincent Mailhol Signed-off-by: Oliver Hartkopp Signed-off-by: Marc Kleine-Budde --- drivers/net/can/dev/calc_bittiming.c | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/drivers/net/can/dev/calc_bittiming.c b/drivers/net/can/dev/cal= c_bittiming.c index c8c166b383cd..bacdf3b218d3 100644 --- a/drivers/net/can/dev/calc_bittiming.c +++ b/drivers/net/can/dev/calc_bittiming.c @@ -10,6 +10,18 @@ =20 #define CAN_CALC_MAX_ERROR 50 /* in one-tenth of a percent */ =20 +/* CiA recommended sample points for Non Return to Zero encoding. */ +static int can_calc_sample_point_nrz(const struct can_bittiming *bt) +{ + if (bt->bitrate > 800 * KILO /* BPS */) + return 750; + + if (bt->bitrate > 500 * KILO /* BPS */) + return 800; + + return 875; +} + /* Bit-timing calculation derived from: * * Code based on LinCAN sources and H8S2638 project @@ -79,17 +91,10 @@ int can_calc_bittiming(const struct net_device *dev, st= ruct can_bittiming *bt, u64 v64; int err; =20 - /* Use CiA recommended sample points */ - if (bt->sample_point) { + if (bt->sample_point) sample_point_reference =3D bt->sample_point; - } else { - if (bt->bitrate > 800 * KILO /* BPS */) - sample_point_reference =3D 750; - else if (bt->bitrate > 500 * KILO /* BPS */) - sample_point_reference =3D 800; - else - sample_point_reference =3D 875; - } + else + sample_point_reference =3D can_calc_sample_point_nrz(bt); =20 /* tseg even =3D round down, odd =3D round up */ for (tseg =3D (btc->tseg1_max + btc->tseg2_max) * 2 + 1; --=20 2.51.0