From nobody Thu Oct 2 22:39:30 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 5DD832E0910; Wed, 10 Sep 2025 06:04:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757484289; cv=none; b=M0eGBVa/4zffvOb/+jTWHqhti9jneDChXw5adIVGOHZDW19PSM0FiTxfWmf72zqHhfhw3CUu5nYQg2LvlLDCViRJsJRMd/a6qNvkdK4TAQN5Tm0KeGc+zG8ktF4xNJQDuAYnKhJrjfHoTr0Tz2aTvDOyFM6OIYQxiYXi6P0rCm4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757484289; c=relaxed/simple; bh=T88mFb7sQ3TDbgKtkbXsmLV//5AWUv8klMda8U+nd2Q=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Jp9vdy8YHoAIVn4aUp7n79S5MIxSVw84ExsqRRReFr8fRrwwoD6nhA8aQofEUGM6Us2rk+xvL31BIax9ozaR+TQEqZulCjnWVAQf+V5nbZllL52oQeWHpR2Z1fHPTsW5+pFrtXHNkQfrZj3rcEhuzsvNpcMdFAcVaP+90uFB7MI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=DpMdv9pd; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="DpMdv9pd" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A6BF6C4CEFA; Wed, 10 Sep 2025 06:04:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1757484287; bh=T88mFb7sQ3TDbgKtkbXsmLV//5AWUv8klMda8U+nd2Q=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=DpMdv9pdJ9K0y1aYaEvb4QNA+/ApQoTeOkRdKsSTmQAtR/TswhLIbYC555Quc1MW0 wrMRq16YLZA6aED+LAnz8e3Xb1Zr5mXI/tBmJp8nRpPPoD/6XGh5XqZQcHIXaeQgCN wbFJK7FsJ83gEB6xGmaPDt8aojc6xeoASqN1a6Y8fg/5WZzGYqFUkOwvJlZqRWsDAm xmorOBflJpQPdYmJdsG7/Nnv6my3NY3CQHI8DY5795xzJvbZdt7eCGNFFw0CppLl78 k7/9H38Wmr15daKk2zOWUv4MG79jFyBO/wQioR+YYYf9+pGj/jJeoyAuNRnHuZJEAN xGtvjD5cMzPtg== From: Vincent Mailhol Date: Wed, 10 Sep 2025 15:03:26 +0900 Subject: [PATCH v2 01/20] can: dev: move struct data_bittiming_params to linux/can/bittiming.h 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: <20250910-canxl-netlink-prep-v2-1-f128d4083721@kernel.org> References: <20250910-canxl-netlink-prep-v2-0-f128d4083721@kernel.org> In-Reply-To: <20250910-canxl-netlink-prep-v2-0-f128d4083721@kernel.org> To: Marc Kleine-Budde , Oliver Hartkopp Cc: Vincent Mailhol , =?utf-8?q?St=C3=A9phane_Grosjean?= , Robert Nawrath , Minh Le , Duy Nguyen , linux-can@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2460; i=mailhol@kernel.org; h=from:subject:message-id; bh=T88mFb7sQ3TDbgKtkbXsmLV//5AWUv8klMda8U+nd2Q=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBkHRU7MV38iIPA96dSxK5o91/a3d+u3XuTUearYtKZ86 /eqc9/md5SyMIhxMciKKbIsK+fkVugo9A479NcSZg4rE8gQBi5OAZjIPzaGvyJT/b741jfeuXFG 8tDLTSIHpLdy/to1f1qR37qvN+Xe2y9iZLiwfVt99YlVk4X2SD8/ULLvrLTzYbewsxm3t29+Oe/ blcdcAA== X-Developer-Key: i=mailhol@kernel.org; a=openpgp; fpr=ED8F700574E67F20E574E8E2AB5FEB886DBB99C2 In commit b803c4a4f788 ("can: dev: add struct data_bittiming_params to group FD parameters"), struct data_bittiming_params was put into linux/can/dev.h. This structure being a collection of bittiming parameters, on second thought, bittiming.h is actually a better location. This way, users of struct data_bittiming_params will not have to forcefully include linux/can/dev.h thus removing some complexity and reducing the risk of circular dependencies in headers. Move struct data_bittiming_params from linux/can/dev.h to linux/can/bittiming.h. Signed-off-by: Vincent Mailhol --- include/linux/can/bittiming.h | 11 +++++++++++ include/linux/can/dev.h | 11 ----------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/include/linux/can/bittiming.h b/include/linux/can/bittiming.h index 5dfdbb63b1d54f3dc02170b10b73dbb9c2242851..6572ec1712ca2df8db7fe1453ae= 5a4d5699712b1 100644 --- a/include/linux/can/bittiming.h +++ b/include/linux/can/bittiming.h @@ -114,6 +114,17 @@ struct can_tdc_const { u32 tdcf_max; }; =20 +struct data_bittiming_params { + const struct can_bittiming_const *data_bittiming_const; + struct can_bittiming data_bittiming; + const struct can_tdc_const *tdc_const; + struct can_tdc tdc; + const u32 *data_bitrate_const; + unsigned int data_bitrate_const_cnt; + int (*do_set_data_bittiming)(struct net_device *dev); + int (*do_get_auto_tdcv)(const struct net_device *dev, u32 *tdcv); +}; + #ifdef CONFIG_CAN_CALC_BITTIMING int can_calc_bittiming(const struct net_device *dev, struct can_bittiming = *bt, const struct can_bittiming_const *btc, struct netlink_ext_ack *ex= tack); diff --git a/include/linux/can/dev.h b/include/linux/can/dev.h index 9a92cbe5b2cb7ccdfca3121718856d096e9ecfa6..76022f48a97673d81676c39c697= eadc6d7063ff7 100644 --- a/include/linux/can/dev.h +++ b/include/linux/can/dev.h @@ -38,17 +38,6 @@ enum can_termination_gpio { CAN_TERMINATION_GPIO_MAX, }; =20 -struct data_bittiming_params { - const struct can_bittiming_const *data_bittiming_const; - struct can_bittiming data_bittiming; - const struct can_tdc_const *tdc_const; - struct can_tdc tdc; - const u32 *data_bitrate_const; - unsigned int data_bitrate_const_cnt; - int (*do_set_data_bittiming)(struct net_device *dev); - int (*do_get_auto_tdcv)(const struct net_device *dev, u32 *tdcv); -}; - /* * CAN common private data */ --=20 2.49.1 From nobody Thu Oct 2 22:39:30 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 E150E3054F0; Wed, 10 Sep 2025 06:04:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757484290; cv=none; b=Tl+4YG+QJYk3fLAVSKpWxRQocRRUrHw2tLMUxesV+FwxCG/qDMYiLVDRxpWg98ZySqyEVggoAHaocEfwUalnymaJL/8j/wox3SDvWo+b+qunwI50H6f88FgI3QU27Hg1mJVLQCqlfbCF56BgZTJ6CowoYO0qTv7n5UXPXodE1fU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757484290; c=relaxed/simple; bh=sWHZaOqLzX2L2GpQTcYE/d6XotteDzKRJz/cgKPJ+a4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Perwc+h+hiIixJJzP8cUSsosCi6EYnVjXv32uNpwFXIcrgVR6Epooebbj2sCyb4uFJDVCRonCGFx6F3dfHXIpEXYKKythzqMfvKK3+phszn/+aaoSoj4Jig/khFbasPkU8DdKwMN6TjMhkWJ/9vWZHlBh6kfWG6pOEa8ZJN13c8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=FCzfl67x; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="FCzfl67x" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3C1A1C4CEF5; Wed, 10 Sep 2025 06:04:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1757484289; bh=sWHZaOqLzX2L2GpQTcYE/d6XotteDzKRJz/cgKPJ+a4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=FCzfl67xgJQZvPE4NSP627f89pESr70xjns0H7MFPTkHJwlJrJbAPvsCGuDVww1FP qF+EJI99tBi1HOVOtCMZjDV0fReP+jHKm0H/sLaOsEAg2x62tb+A4OcH5gGSvqoyrh 8uWo3Vw54rcWxQJyHg/PI1+MjBNylJWpEqzyKAxYyPHELidbZpQNBZfXAdMubHdAmg HZkdUJe+Yc7152AdzITLO4+CXtBM8Emepecf4vl/nbLQ//p7n+NkzLLGhwjiwtkabB fk85CZwSWClf4YZuI8VDv4aSK7/5rIqvUEjGjrS5zTlK4cgHzQl7C4dW9SydOLryKM pItvUWHZYUMYA== From: Vincent Mailhol Date: Wed, 10 Sep 2025 15:03:27 +0900 Subject: [PATCH v2 02/20] can: dev: make can_get_relative_tdco() FD agnostic and move it to bittiming.h 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: <20250910-canxl-netlink-prep-v2-2-f128d4083721@kernel.org> References: <20250910-canxl-netlink-prep-v2-0-f128d4083721@kernel.org> In-Reply-To: <20250910-canxl-netlink-prep-v2-0-f128d4083721@kernel.org> To: Marc Kleine-Budde , Oliver Hartkopp Cc: Vincent Mailhol , =?utf-8?q?St=C3=A9phane_Grosjean?= , Robert Nawrath , Minh Le , Duy Nguyen , linux-can@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4153; i=mailhol@kernel.org; h=from:subject:message-id; bh=sWHZaOqLzX2L2GpQTcYE/d6XotteDzKRJz/cgKPJ+a4=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBkHRU4XzZ0w/fN1jgNnP3nJ7d2nJfVE2ZRfiV/j6ebpS 0sbNmVrdZSyMIhxMciKKbIsK+fkVugo9A479NcSZg4rE8gQBi5OAZjIgnmMDG9KN83YLXtPxjAx zCx+JyMfx6t95yJlDaVmKnIGnHhwYj3DX/nGir83Zf4HSti9eP31zmL+xaq7m/L26yQ237rx49a uUn4A X-Developer-Key: i=mailhol@kernel.org; a=openpgp; fpr=ED8F700574E67F20E574E8E2AB5FEB886DBB99C2 can_get_relative_tdco() needs to access can_priv->fd making it specific to CAN FD. Change the function parameter from struct can_priv to struct data_bittiming_params. This way, the function becomes CAN FD agnostic and can be reused later on for the CAN XL TDC. Now that we dropped the dependency on struct can_priv, also move can_get_relative_tdco() back to bittiming.h where it was meant to belong to. Signed-off-by: Vincent Mailhol --- Changelog: RFC -> v1: - Just pass the IFLA index instead of passing each argument individually. Instead, derive these as local variables depending on whethe the IFLA index is IFLA_CAN_TDC or IFLA_CAN_XL_TDC. --- include/linux/can/bittiming.h | 29 +++++++++++++++++++++++++++++ include/linux/can/dev.h | 29 ----------------------------- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/include/linux/can/bittiming.h b/include/linux/can/bittiming.h index 6572ec1712ca2df8db7fe1453ae5a4d5699712b1..4d5f7794194ab13641c7854c2d6= 6625c4e942f6c 100644 --- a/include/linux/can/bittiming.h +++ b/include/linux/can/bittiming.h @@ -160,6 +160,35 @@ int can_get_bittiming(const struct net_device *dev, st= ruct can_bittiming *bt, const unsigned int bitrate_const_cnt, struct netlink_ext_ack *extack); =20 +/* + * can_get_relative_tdco() - TDCO relative to the sample point + * + * struct can_tdc::tdco represents the absolute offset from TDCV. Some + * controllers use instead an offset relative to the Sample Point (SP) + * such that: + * + * SSP =3D TDCV + absolute TDCO + * =3D TDCV + SP + relative TDCO + * + * -+----------- one bit ----------+-- TX pin + * |<--- Sample Point --->| + * + * --+----------- one bit ----------+-- RX pin + * |<-------- TDCV -------->| + * |<------------------------>| absolute TDCO + * |<--- Sample Point --->| + * | |<->| relative TDCO + * |<------------- Secondary Sample Point ------------>| + */ +static inline s32 can_get_relative_tdco(const struct data_bittiming_params= *dbt_params) +{ + const struct can_bittiming *dbt =3D &dbt_params->data_bittiming; + s32 sample_point_in_tc =3D (CAN_SYNC_SEG + dbt->prop_seg + + dbt->phase_seg1) * dbt->brp; + + return (s32)dbt_params->tdc.tdco - sample_point_in_tc; +} + /* * can_bit_time() - Duration of one bit * diff --git a/include/linux/can/dev.h b/include/linux/can/dev.h index 76022f48a97673d81676c39c697eadc6d7063ff7..55aaadaacf68f940fa1b71f7c43= 8e68b84080292 100644 --- a/include/linux/can/dev.h +++ b/include/linux/can/dev.h @@ -85,35 +85,6 @@ static inline bool can_fd_tdc_is_enabled(const struct ca= n_priv *priv) return !!(priv->ctrlmode & CAN_CTRLMODE_FD_TDC_MASK); } =20 -/* - * can_get_relative_tdco() - TDCO relative to the sample point - * - * struct can_tdc::tdco represents the absolute offset from TDCV. Some - * controllers use instead an offset relative to the Sample Point (SP) - * such that: - * - * SSP =3D TDCV + absolute TDCO - * =3D TDCV + SP + relative TDCO - * - * -+----------- one bit ----------+-- TX pin - * |<--- Sample Point --->| - * - * --+----------- one bit ----------+-- RX pin - * |<-------- TDCV -------->| - * |<------------------------>| absolute TDCO - * |<--- Sample Point --->| - * | |<->| relative TDCO - * |<------------- Secondary Sample Point ------------>| - */ -static inline s32 can_get_relative_tdco(const struct can_priv *priv) -{ - const struct can_bittiming *dbt =3D &priv->fd.data_bittiming; - s32 sample_point_in_tc =3D (CAN_SYNC_SEG + dbt->prop_seg + - dbt->phase_seg1) * dbt->brp; - - return (s32)priv->fd.tdc.tdco - sample_point_in_tc; -} - /* helper to define static CAN controller features at device creation time= */ static inline int __must_check can_set_static_ctrlmode(struct net_device *= dev, u32 static_mode) --=20 2.49.1 From nobody Thu Oct 2 22:39:30 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 696FF3043DD; Wed, 10 Sep 2025 06:04:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757484291; cv=none; b=sQ1ICq6cRb4j/vaBYCT+69qzfZl9KF1zLa9aAx2Aoy7jsnbG2+ogxOdOvdzUYEEnJ+SGbQozpg0V80fPFsmk6ezvTbnZ6YZFqlUqg8SPNHNnFA8QAJCg9MO+hsIoFCXvFGG3EsJlw6va5w/vZw8udiwsTgqcWw7MlLWYOoN9mq8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757484291; c=relaxed/simple; bh=7GXiF2puI9MV0ynLrL3LnDqqLVjv4d6zMPfx4ftHtlY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=EeYEmZ7bMC/sNucV3lypoq4LSq1TBygxnu1W3N5QQjZug6CGB/4e1bjp/Oj8gw9c6XzUAyoVt73+uDNoOCqLHuCd1p+TVY4Iibwq7kDX4c4nTsbeRSKB9CdHmUXza+H6mAEYgTklpU+ZmQXdzwa+M4uGszVI2hKW6Pl6YUQgmYw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=gkTPQIDh; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="gkTPQIDh" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C510FC4CEF0; Wed, 10 Sep 2025 06:04:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1757484291; bh=7GXiF2puI9MV0ynLrL3LnDqqLVjv4d6zMPfx4ftHtlY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=gkTPQIDh1QYX1IPJoBmisdwaDn3U+FtfwJrFeI0Ww/nVrkFJZdObH155gXHG9hb7f MtqjsOd2z1Heo+b89Wl+DD5S+6s3XNPNPfbz51FHd5PF9XmYT2to+dbSPjwSswtR45 iwIwBbGv64VajOWc5AVwn6LSTkN4Gf+/4Lz+jSFtW0KQ/MjQjP8jVQhUNmwZbW3TqV 0gvVBfGBK/wxnbCVsPv/5d/dgBX+RwKyg8p5ldlTJewZgTMzJ9ySA+FBiNWM6lQ2pu XmKO0kPnpimMUcRq6z3jkqNCfYIbDalndBflaq7Pq9j/rW8U7EgS3x6YdzdYCtmS1h a0AsDiUa8cLxw== From: Vincent Mailhol Date: Wed, 10 Sep 2025 15:03:28 +0900 Subject: [PATCH v2 03/20] can: netlink: document which symbols are FD specific 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: <20250910-canxl-netlink-prep-v2-3-f128d4083721@kernel.org> References: <20250910-canxl-netlink-prep-v2-0-f128d4083721@kernel.org> In-Reply-To: <20250910-canxl-netlink-prep-v2-0-f128d4083721@kernel.org> To: Marc Kleine-Budde , Oliver Hartkopp Cc: Vincent Mailhol , =?utf-8?q?St=C3=A9phane_Grosjean?= , Robert Nawrath , Minh Le , Duy Nguyen , linux-can@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2346; i=mailhol@kernel.org; h=from:subject:message-id; bh=7GXiF2puI9MV0ynLrL3LnDqqLVjv4d6zMPfx4ftHtlY=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBkHRc4JxbioT3Y+ZFBfkGg5/Y8GX2pA3kJn9ebfnF93V 5nLrr3aUcrCIMbFICumyLKsnJNboaPQO+zQX0uYOaxMIEMYuDgFYCK5+owMH63XbVzI41Fili/f c0fzeaJlHXNX8kSDnYd1V9YtyHZ4z8jwZvLtzF9H1q25kr9l2rrCwIW3fsUKe77htbz88Lb3lem 7eAE= X-Developer-Key: i=mailhol@kernel.org; a=openpgp; fpr=ED8F700574E67F20E574E8E2AB5FEB886DBB99C2 The CAN XL netlink interface will also have data bitrate and TDC parameters. The current FD parameters do not have a prefix in their names to differentiate them. Because the netlink interface is part of the UAPI, it is unfortunately not feasible to rename the existing symbols to add an FD_ prefix. The best alternative is to add a comment for each of the symbols to notify the reader of which parts are CAN FD specific. While at it, fix a typo: transiver -> transceiver. Signed-off-by: Vincent Mailhol --- include/uapi/linux/can/netlink.h | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/include/uapi/linux/can/netlink.h b/include/uapi/linux/can/netl= ink.h index 02ec32d694742a32b3a51ff8c33616e109cef9f4..ef62f56eaaefda9f2fb39345776= a483734682cd0 100644 --- a/include/uapi/linux/can/netlink.h +++ b/include/uapi/linux/can/netlink.h @@ -101,8 +101,8 @@ struct can_ctrlmode { #define CAN_CTRLMODE_PRESUME_ACK 0x40 /* Ignore missing CAN ACKs */ #define CAN_CTRLMODE_FD_NON_ISO 0x80 /* CAN FD in non-ISO mode */ #define CAN_CTRLMODE_CC_LEN8_DLC 0x100 /* Classic CAN DLC option */ -#define CAN_CTRLMODE_TDC_AUTO 0x200 /* CAN transiver automatically calcul= ates TDCV */ -#define CAN_CTRLMODE_TDC_MANUAL 0x400 /* TDCV is manually set up by user = */ +#define CAN_CTRLMODE_TDC_AUTO 0x200 /* FD transceiver automatically calcu= lates TDCV */ +#define CAN_CTRLMODE_TDC_MANUAL 0x400 /* FD TDCV is manually set up by us= er */ =20 /* * CAN device statistics @@ -129,14 +129,14 @@ enum { IFLA_CAN_RESTART_MS, IFLA_CAN_RESTART, IFLA_CAN_BERR_COUNTER, - IFLA_CAN_DATA_BITTIMING, - IFLA_CAN_DATA_BITTIMING_CONST, + IFLA_CAN_DATA_BITTIMING, /* FD */ + IFLA_CAN_DATA_BITTIMING_CONST, /* FD */ IFLA_CAN_TERMINATION, IFLA_CAN_TERMINATION_CONST, IFLA_CAN_BITRATE_CONST, - IFLA_CAN_DATA_BITRATE_CONST, + IFLA_CAN_DATA_BITRATE_CONST, /* FD */ IFLA_CAN_BITRATE_MAX, - IFLA_CAN_TDC, + IFLA_CAN_TDC, /* FD */ IFLA_CAN_CTRLMODE_EXT, =20 /* add new constants above here */ @@ -145,7 +145,7 @@ enum { }; =20 /* - * CAN FD Transmitter Delay Compensation (TDC) + * CAN FD/XL Transmitter Delay Compensation (TDC) * * Please refer to struct can_tdc_const and can_tdc in * include/linux/can/bittiming.h for further details. --=20 2.49.1 From nobody Thu Oct 2 22:39:30 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 F3D2D3064AA; Wed, 10 Sep 2025 06:04:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757484293; cv=none; b=a425D6wCFBboUL+oqJj0iyEtsH+Hd/znxpyN672bGUkrGC1+bUlH+QyDtoUejTV4s7A8P+3dgfJmD0kj6XUNapxLtzr283ft5i/svRVyIMz4ouzVFO+Y5AxqT1egfMq0ni8GiNujtIQeU3pl1yD1PSbvzg5taILAMQ89nxFSkU0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757484293; c=relaxed/simple; bh=tdXomOJI//XghU69xAqi9CGEG7kEl4VTCc4F7HwUNcY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=keZM5VGo78drJzoQ+TMqmW1dWINwsgSfsoDO3X3MsJkLGCd0LpxXiYonc4Dkr60yezYBss8opjGL7QooRpJkEigYe1YyvTOjeZ82CUUnCqaJGAGPmhAcR0J+Fn0NlJz+uUAX1NsNtIBZVcvc5mkgeFK0loUQVnuMmUXlYmeAJ6w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=nPPWq8jC; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="nPPWq8jC" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 581AFC4CEF5; Wed, 10 Sep 2025 06:04:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1757484292; bh=tdXomOJI//XghU69xAqi9CGEG7kEl4VTCc4F7HwUNcY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=nPPWq8jCLwJX8c1U2FdxzYjwbnYkRHWYZH6pcnDNwqF1YXKHSPcMi+SWzdL6arxPd A79/LW11IwYJ3qb4QLfJyY3lH7nV4eB32HY3a6SVqKG7WIEv7xYZS1X9l8yqT8dRzj VV3o5zFV6WIDiacDyhveqv7T1GR9hdMBx1gXNGdTfzPcwjHcnqdEJzkOr3NTpldomY 8Ht/JONPK9aVdmFWHfj2+3wdWWz2jxuW+Y+R1v8kvgWid/G5XS0/RfcuVoxy+cIA/4 otmBbm4ygCBf1Z8e5BWp7F97R0J+464NqPV8Tun3+iECkgWtrTtqHfILqLmBWGbWzM uYw0ND//GzUHQ== From: Vincent Mailhol Date: Wed, 10 Sep 2025 15:03:29 +0900 Subject: [PATCH v2 04/20] can: netlink: refactor can_validate_bittiming() 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: <20250910-canxl-netlink-prep-v2-4-f128d4083721@kernel.org> References: <20250910-canxl-netlink-prep-v2-0-f128d4083721@kernel.org> In-Reply-To: <20250910-canxl-netlink-prep-v2-0-f128d4083721@kernel.org> To: Marc Kleine-Budde , Oliver Hartkopp Cc: Vincent Mailhol , =?utf-8?q?St=C3=A9phane_Grosjean?= , Robert Nawrath , Minh Le , Duy Nguyen , linux-can@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2424; i=mailhol@kernel.org; h=from:subject:message-id; bh=tdXomOJI//XghU69xAqi9CGEG7kEl4VTCc4F7HwUNcY=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBkHRS5suhJ3SOXBsrebLDSfmYrrvi/9sTXPviFXMJZ9c d9zvzXvO0pZGMS4GGTFFFmWlXNyK3QUeocd+msJM4eVCWQIAxenAExELJjhr2iW+wp1kzLfvndp db0H9zao1k2pKQmOn3K/N7Ckx6hJgJHhp9RBt+Npqa+7Lsh2T2PS8zmY2+6zNneRvsSSyVVBcY3 8AA== X-Developer-Key: i=mailhol@kernel.org; a=openpgp; fpr=ED8F700574E67F20E574E8E2AB5FEB886DBB99C2 Whenever can_validate_bittiming() is called, it is always preceded by some boilerplate code which was copy pasted all over the place. Move that repeated code directly inside can_validate_bittiming(). Finally, the mempcy() is not needed. Just use the pointer returned by nla_data() as-is. Signed-off-by: Vincent Mailhol --- drivers/net/can/dev/netlink.c | 35 ++++++++++++++++------------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/drivers/net/can/dev/netlink.c b/drivers/net/can/dev/netlink.c index d9f6ab3efb9767409c318b714f19df8a30e51137..bc91df8d75ac41381fefea895d7= e490a965d3f7b 100644 --- a/drivers/net/can/dev/netlink.c +++ b/drivers/net/can/dev/netlink.c @@ -36,13 +36,20 @@ static const struct nla_policy can_tdc_policy[IFLA_CAN_= TDC_MAX + 1] =3D { [IFLA_CAN_TDC_TDCF] =3D { .type =3D NLA_U32 }, }; =20 -static int can_validate_bittiming(const struct can_bittiming *bt, - struct netlink_ext_ack *extack) +static int can_validate_bittiming(struct nlattr *data[], + struct netlink_ext_ack *extack, + int ifla_can_bittiming) { + struct can_bittiming *bt; + + if (!data[ifla_can_bittiming]) + return 0; + + bt =3D nla_data(data[ifla_can_bittiming]); + /* sample point is in one-tenth of a percent */ if (bt->sample_point >=3D 1000) { NL_SET_ERR_MSG(extack, "sample point must be between 0 and 100%"); - return -EINVAL; } =20 @@ -105,14 +112,9 @@ static int can_validate(struct nlattr *tb[], struct nl= attr *data[], } } =20 - if (data[IFLA_CAN_BITTIMING]) { - struct can_bittiming bt; - - memcpy(&bt, nla_data(data[IFLA_CAN_BITTIMING]), sizeof(bt)); - err =3D can_validate_bittiming(&bt, extack); - if (err) - return err; - } + err =3D can_validate_bittiming(data, extack, IFLA_CAN_BITTIMING); + if (err) + return err; =20 if (is_can_fd) { if (!data[IFLA_CAN_BITTIMING] || !data[IFLA_CAN_DATA_BITTIMING]) @@ -124,14 +126,9 @@ static int can_validate(struct nlattr *tb[], struct nl= attr *data[], return -EOPNOTSUPP; } =20 - if (data[IFLA_CAN_DATA_BITTIMING]) { - struct can_bittiming bt; - - memcpy(&bt, nla_data(data[IFLA_CAN_DATA_BITTIMING]), sizeof(bt)); - err =3D can_validate_bittiming(&bt, extack); - if (err) - return err; - } + err =3D can_validate_bittiming(data, extack, IFLA_CAN_DATA_BITTIMING); + if (err) + return err; =20 return 0; } --=20 2.49.1 From nobody Thu Oct 2 22:39:30 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 8CBFF3043DD; Wed, 10 Sep 2025 06:04:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757484294; cv=none; b=fQrOCWN6OHE2WMf8GNkO7h//PnZUg9T6YdTdfq0XTsxPTa81azfESTmmETP2y78M4r092Z/4ftdq8WvpLgwwL0L/xwTLlHmUH3UWs56GoJyjjCCHdWu7Qt2uZDlLMktAGNDuSgyCvVS3cnMEdoTttrKUJ/xM/pJj32/ZqCKPDMs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757484294; c=relaxed/simple; bh=IucMtAsp191cVbemQachgp1r++hfkZZJA/oHBo4slr8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=k2VtDD3hnv7VurJJ3FD6LgUuzDUex55N33ce4SRekxF0sP8NV7eVbFS4Ks2i46CuYxRiPMZlFDssxXTlVlr7j5Z6XihhXtYIujSt7cRE/CdYmDbCoY73Q0dTA1v9eYP16v4TBfsPpvUDIr37/JBwezK0Js1RFVwzI5Rh0BfMoDQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Wv/T0o5B; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Wv/T0o5B" Received: by smtp.kernel.org (Postfix) with ESMTPSA id DFA44C4CEF0; Wed, 10 Sep 2025 06:04:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1757484294; bh=IucMtAsp191cVbemQachgp1r++hfkZZJA/oHBo4slr8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Wv/T0o5B0mnbbKNI9ebms5bPAXFwo+xtud0KLijQrHzSFcTav3/RFT4VOv0sqf+Ut ywu7KbqjdV9t00M5GF9mgQBeQxClqxn4H7esLGvykHkDzzS6HaXoqz61UONZo6rIna 6U6tMG6pqLhj48vBetWUuVDznQHYTtcYVuIU+bLIMdgteWMR+MMYAktIqrwJBqHQeJ AR2Jx6p4tqlNikRUWYkt2aLNEBGq7WjF7aJAdwtA1lv8gXb+F3PsV1KUlaSGZqvSAc Iar5uy+Gi8XnO6BKlifzj7hk8ibDTt8XOQWEcZJGzr5UJyHKiNzbtMxK4XBfGngXLG 02Yon40noT20A== From: Vincent Mailhol Date: Wed, 10 Sep 2025 15:03:30 +0900 Subject: [PATCH v2 05/20] can: netlink: add can_validate_tdc() 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: <20250910-canxl-netlink-prep-v2-5-f128d4083721@kernel.org> References: <20250910-canxl-netlink-prep-v2-0-f128d4083721@kernel.org> In-Reply-To: <20250910-canxl-netlink-prep-v2-0-f128d4083721@kernel.org> To: Marc Kleine-Budde , Oliver Hartkopp Cc: Vincent Mailhol , =?utf-8?q?St=C3=A9phane_Grosjean?= , Robert Nawrath , Minh Le , Duy Nguyen , linux-can@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4629; i=mailhol@kernel.org; h=from:subject:message-id; bh=IucMtAsp191cVbemQachgp1r++hfkZZJA/oHBo4slr8=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBkHRS4b3Vmr8inw2aelduK+xy7cnq9rrn/7z42rU7aGb vm9iteWsaOUhUGMi0FWTJFlWTknt0JHoXfYob+WMHNYmUCGMHBxCsBELrIwMqycKj+zjOOZ39Yq zqjq+HP7bBZf3HaGWaf+VWRl7223WTqMDA27tCy++m+WcAlneMXU8T/5xCnrNzfXllhLrrZr/Pv wIDcA X-Developer-Key: i=mailhol@kernel.org; a=openpgp; fpr=ED8F700574E67F20E574E8E2AB5FEB886DBB99C2 Factorise the TDC validation out of can_validate() and move it in the new can_validate_tdc() function. This is a preparation patch for the introduction of CAN XL because this TDC validation will be reused later on. Signed-off-by: Vincent Mailhol --- Changelog: RFC 1 -> RFC 2: - fix bug on tdc flags mutual exclusivity: 'if (tdc_auto =3D=3D tdc_manual)' -> 'if (tdc_auto && tdc_manual)' --- drivers/net/can/dev/netlink.c | 82 +++++++++++++++++++++++++--------------= ---- include/linux/can/bittiming.h | 4 +++ 2 files changed, 52 insertions(+), 34 deletions(-) diff --git a/drivers/net/can/dev/netlink.c b/drivers/net/can/dev/netlink.c index bc91df8d75ac41381fefea895d7e490a965d3f7b..24ad34ad7cc9ae75b6f28d53fb4= d8030710d2507 100644 --- a/drivers/net/can/dev/netlink.c +++ b/drivers/net/can/dev/netlink.c @@ -56,6 +56,49 @@ static int can_validate_bittiming(struct nlattr *data[], return 0; } =20 +static int can_validate_tdc(struct nlattr *data_tdc, + struct netlink_ext_ack *extack, u32 tdc_flags) +{ + bool tdc_manual =3D tdc_flags & CAN_CTRLMODE_TDC_MANUAL_MASK; + bool tdc_auto =3D tdc_flags & CAN_CTRLMODE_TDC_AUTO_MASK; + int err; + + /* CAN_CTRLMODE_TDC_{AUTO,MANUAL} are mutually exclusive */ + if (tdc_auto && tdc_manual) + return -EOPNOTSUPP; + + /* If one of the CAN_CTRLMODE_TDC_* flag is set then TDC + * must be set and vice-versa + */ + if ((tdc_auto || tdc_manual) !=3D !!data_tdc) + return -EOPNOTSUPP; + + /* If providing TDC parameters, at least TDCO is needed. TDCV + * is needed if and only if CAN_CTRLMODE_TDC_MANUAL is set + */ + if (data_tdc) { + struct nlattr *tb_tdc[IFLA_CAN_TDC_MAX + 1]; + + err =3D nla_parse_nested(tb_tdc, IFLA_CAN_TDC_MAX, + data_tdc, can_tdc_policy, extack); + if (err) + return err; + + if (tb_tdc[IFLA_CAN_TDC_TDCV]) { + if (tdc_auto) + return -EOPNOTSUPP; + } else { + if (tdc_manual) + return -EOPNOTSUPP; + } + + if (!tb_tdc[IFLA_CAN_TDC_TDCO]) + return -EOPNOTSUPP; + } + + return 0; +} + static int can_validate(struct nlattr *tb[], struct nlattr *data[], struct netlink_ext_ack *extack) { @@ -66,7 +109,7 @@ static int can_validate(struct nlattr *tb[], struct nlat= tr *data[], * - nominal/arbitration bittiming * - data bittiming * - control mode with CAN_CTRLMODE_FD set - * - TDC parameters are coherent (details below) + * - TDC parameters are coherent (details in can_validate_tdc()) */ =20 if (!data) @@ -74,42 +117,13 @@ static int can_validate(struct nlattr *tb[], struct nl= attr *data[], =20 if (data[IFLA_CAN_CTRLMODE]) { struct can_ctrlmode *cm =3D nla_data(data[IFLA_CAN_CTRLMODE]); - u32 tdc_flags =3D cm->flags & CAN_CTRLMODE_FD_TDC_MASK; =20 is_can_fd =3D cm->flags & cm->mask & CAN_CTRLMODE_FD; =20 - /* CAN_CTRLMODE_TDC_{AUTO,MANUAL} are mutually exclusive */ - if (tdc_flags =3D=3D CAN_CTRLMODE_FD_TDC_MASK) - return -EOPNOTSUPP; - /* If one of the CAN_CTRLMODE_TDC_* flag is set then - * TDC must be set and vice-versa - */ - if (!!tdc_flags !=3D !!data[IFLA_CAN_TDC]) - return -EOPNOTSUPP; - /* If providing TDC parameters, at least TDCO is - * needed. TDCV is needed if and only if - * CAN_CTRLMODE_TDC_MANUAL is set - */ - if (data[IFLA_CAN_TDC]) { - struct nlattr *tb_tdc[IFLA_CAN_TDC_MAX + 1]; - - err =3D nla_parse_nested(tb_tdc, IFLA_CAN_TDC_MAX, - data[IFLA_CAN_TDC], - can_tdc_policy, extack); - if (err) - return err; - - if (tb_tdc[IFLA_CAN_TDC_TDCV]) { - if (tdc_flags & CAN_CTRLMODE_TDC_AUTO) - return -EOPNOTSUPP; - } else { - if (tdc_flags & CAN_CTRLMODE_TDC_MANUAL) - return -EOPNOTSUPP; - } - - if (!tb_tdc[IFLA_CAN_TDC_TDCO]) - return -EOPNOTSUPP; - } + err =3D can_validate_tdc(data[IFLA_CAN_TDC], extack, + cm->flags & CAN_CTRLMODE_FD_TDC_MASK); + if (err) + return err; } =20 err =3D can_validate_bittiming(data, extack, IFLA_CAN_BITTIMING); diff --git a/include/linux/can/bittiming.h b/include/linux/can/bittiming.h index 4d5f7794194ab13641c7854c2d66625c4e942f6c..71f839c3f0325b2a496a4bc4470= 44a4853541338 100644 --- a/include/linux/can/bittiming.h +++ b/include/linux/can/bittiming.h @@ -16,6 +16,10 @@ =20 #define CAN_CTRLMODE_FD_TDC_MASK \ (CAN_CTRLMODE_TDC_AUTO | CAN_CTRLMODE_TDC_MANUAL) +#define CAN_CTRLMODE_TDC_AUTO_MASK \ + (CAN_CTRLMODE_TDC_AUTO) +#define CAN_CTRLMODE_TDC_MANUAL_MASK \ + (CAN_CTRLMODE_TDC_MANUAL) =20 /* * struct can_tdc - CAN FD Transmission Delay Compensation parameters --=20 2.49.1 From nobody Thu Oct 2 22:39:30 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 BC170307ADE; Wed, 10 Sep 2025 06:04:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757484296; cv=none; b=HzOaJFdbPQIDURMWNbURj+CRHg8KAuklGU19M54mm100VJqZ2Uol1dEKRoDJp9OPsXirGcNPQNUJKTHzFE6G8zAFKK+ClUbWVC9u+0e5WzHMXcEGzZ644Brt55jEy6/nneXolk+FU5bg9Q2yeqzNK0E2/OJiri3WgJGOJn1ldzs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757484296; c=relaxed/simple; bh=tDjzbxh+AWGwXpeAyyMu0TEaae8leCI3cry2J8B33fI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=X7hbP0MGKUiFI5gyKLbM3ZzXBQKUCa81i3zfFDI5h9RT2CAH5yx5cAPXgP1mUwOPtvLOPwmQSwLlWjnplWBqxd7NPPZtKDSQTFwQdpsXNwm+hg0ZARz4fQ/lH2pvcA2uMbPk+ekk0LaXAx+TVXZ2tAlTzWPb2+1WZMLXmZTu0oU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=luqcw3Ht; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="luqcw3Ht" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 72E42C4CEF9; Wed, 10 Sep 2025 06:04:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1757484295; bh=tDjzbxh+AWGwXpeAyyMu0TEaae8leCI3cry2J8B33fI=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=luqcw3HtcUafoxvdyX79Gk9WxcXsd/eBosUSro3xJ7tCfGw938rww4Vapvbyr+VvQ UHIet7jLWrZ7KIBACYlexFmRxNI+fTxLkWco3y1fqCOsgit0wOtom0/Y02kPR6NOOr 4UeqnpUpEgpJBnXgJHsfY023IasNJunZoNmMJLyoOBwi4C2sDTS/rnXMktfe54GVfV Ces88x+IMIO22wanW/vfz0WJoZh3tOMoy5m+EyfbBk0NPHnByIy29s76JyffZeCiqS xj7uQ0p7tahBVxoBORnh12emiLg1ehEVCfWPy2yAcPsC1RHuEPSX5I7Ta3k4nclcaG nZPzLazGeLggQ== From: Vincent Mailhol Date: Wed, 10 Sep 2025 15:03:31 +0900 Subject: [PATCH v2 06/20] can: netlink: add can_validate_databittiming() 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: <20250910-canxl-netlink-prep-v2-6-f128d4083721@kernel.org> References: <20250910-canxl-netlink-prep-v2-0-f128d4083721@kernel.org> In-Reply-To: <20250910-canxl-netlink-prep-v2-0-f128d4083721@kernel.org> To: Marc Kleine-Budde , Oliver Hartkopp Cc: Vincent Mailhol , =?utf-8?q?St=C3=A9phane_Grosjean?= , Robert Nawrath , Minh Le , Duy Nguyen , linux-can@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3586; i=mailhol@kernel.org; h=from:subject:message-id; bh=tDjzbxh+AWGwXpeAyyMu0TEaae8leCI3cry2J8B33fI=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBkHRa7VVB2LMTWNMeLhVLOcpWpgpH914frSLUdXH1p90 L0nartaRykLgxgXg6yYIsuyck5uhY5C77BDfy1h5rAygQxh4OIUgIlcPMnwP31+07MnXaebtn1d 3m91MjOEt5Gx9+An5o6iJl4RfzPGjQz/lCIZa9gaH1UmnI40ndT6RzsoRYPr/K0230ZxvY6MBh0 2AA== X-Developer-Key: i=mailhol@kernel.org; a=openpgp; fpr=ED8F700574E67F20E574E8E2AB5FEB886DBB99C2 Factorise the databittiming validation out of can_validate() and move it in the new add can_validate_databittiming() function. Also move can_validate()'s comment because it is specific to CAN FD. This is a preparation patch for the introduction of CAN XL as this databittiming validation will be reused later on. Signed-off-by: Vincent Mailhol --- Changelog: v1 -> v2: - Move can_validate()'s comment block to can_validate_databittiming(). Consequently, the next patch can: netlink: remove comment in can_validate() is removed. - Change WARN_ON(1) into return -EOPNOTSUPP to suppress a gcc warning. Link: https://lore.kernel.org/linux-can/202509050259.NjPdQyAD-lkp@intel= .com/ --- drivers/net/can/dev/netlink.c | 64 +++++++++++++++++++++++++++++----------= ---- 1 file changed, 44 insertions(+), 20 deletions(-) diff --git a/drivers/net/can/dev/netlink.c b/drivers/net/can/dev/netlink.c index 24ad34ad7cc9ae75b6f28d53fb4d8030710d2507..274eaab10796b601d565c32f631= 5727a578970bb 100644 --- a/drivers/net/can/dev/netlink.c +++ b/drivers/net/can/dev/netlink.c @@ -99,10 +99,13 @@ static int can_validate_tdc(struct nlattr *data_tdc, return 0; } =20 -static int can_validate(struct nlattr *tb[], struct nlattr *data[], - struct netlink_ext_ack *extack) +static int can_validate_databittiming(struct nlattr *data[], + struct netlink_ext_ack *extack, + int ifla_can_data_bittiming, u32 flags) { - bool is_can_fd =3D false; + struct nlattr *data_tdc; + u32 tdc_flags; + bool is_on; int err; =20 /* Make sure that valid CAN FD configurations always consist of @@ -112,35 +115,56 @@ static int can_validate(struct nlattr *tb[], struct n= lattr *data[], * - TDC parameters are coherent (details in can_validate_tdc()) */ =20 + if (ifla_can_data_bittiming =3D=3D IFLA_CAN_DATA_BITTIMING) { + data_tdc =3D data[IFLA_CAN_TDC]; + tdc_flags =3D flags & CAN_CTRLMODE_FD_TDC_MASK; + is_on =3D flags & CAN_CTRLMODE_FD; + } else { + return -EOPNOTSUPP; /* Place holder for CAN XL */ + } + + if (is_on) { + if (!data[IFLA_CAN_BITTIMING] || !data[ifla_can_data_bittiming]) + return -EOPNOTSUPP; + } + + if (data[ifla_can_data_bittiming] || data_tdc) { + if (!is_on) + return -EOPNOTSUPP; + } + + err =3D can_validate_bittiming(data, extack, ifla_can_data_bittiming); + if (err) + return err; + + err =3D can_validate_tdc(data_tdc, extack, tdc_flags); + if (err) + return err; + + return 0; +} + +static int can_validate(struct nlattr *tb[], struct nlattr *data[], + struct netlink_ext_ack *extack) +{ + u32 flags =3D 0; + int err; + if (!data) return 0; =20 if (data[IFLA_CAN_CTRLMODE]) { struct can_ctrlmode *cm =3D nla_data(data[IFLA_CAN_CTRLMODE]); =20 - is_can_fd =3D cm->flags & cm->mask & CAN_CTRLMODE_FD; - - err =3D can_validate_tdc(data[IFLA_CAN_TDC], extack, - cm->flags & CAN_CTRLMODE_FD_TDC_MASK); - if (err) - return err; + flags =3D cm->flags & cm->mask; } =20 err =3D can_validate_bittiming(data, extack, IFLA_CAN_BITTIMING); if (err) return err; =20 - if (is_can_fd) { - if (!data[IFLA_CAN_BITTIMING] || !data[IFLA_CAN_DATA_BITTIMING]) - return -EOPNOTSUPP; - } - - if (data[IFLA_CAN_DATA_BITTIMING] || data[IFLA_CAN_TDC]) { - if (!is_can_fd) - return -EOPNOTSUPP; - } - - err =3D can_validate_bittiming(data, extack, IFLA_CAN_DATA_BITTIMING); + err =3D can_validate_databittiming(data, extack, + IFLA_CAN_DATA_BITTIMING, flags); if (err) return err; =20 --=20 2.49.1 From nobody Thu Oct 2 22:39:30 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 C1A28308F17; Wed, 10 Sep 2025 06:04:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757484297; cv=none; b=WB/k/veJT+/BnklCpriOEHGsH+Xai6bItj57+A9B2xhoiTJv0/AIJrTxRydFypZTd1+JA+rfruIPPnDfi7ZdjuDIh0LlPYWLNxAnY0Yq3/0qXku5mUBdB6S/kt/4vVhNEUS5lIIoBHpRHM2iTw2AERNpjIlQgxexZiL0P+nNGaU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757484297; c=relaxed/simple; bh=z4QfhxHdqa5NwYcif6XX3H+zIEilRUp8AiYG14f4sJo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=FXSjRiXW5G7Yp9faUBUO8V6rsCPxRrMeEIulu7eRW8cjVq7kcvBR6/k5tEwYtExU/q8CL9N2qoQ82G1k10LuNM9ImdeZhvWeZmtmt0oRNquRWHMMDIWrTgArGQk46AprUuXiVTLKvf2mXqggOsD8yPQxMDnaldjd6OLIAxKUI/c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=YQG3FkIo; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="YQG3FkIo" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0624EC4CEF5; Wed, 10 Sep 2025 06:04:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1757484297; bh=z4QfhxHdqa5NwYcif6XX3H+zIEilRUp8AiYG14f4sJo=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=YQG3FkIoTI8BfxGW/lNrLcAQw0Kbo3Vr2QLOz1vp3+qjVkeHTD+6gk0sjO6FiXKhK vCoZe3qlVS7iKD0WADvkmznsZeV9Z0hcfmqaumc0G5qie4H+Q5XMAVVE/lJ8FBeSI5 10Dwx6zvQ59kOJ2g2290cgLXO25yNnUigO/ZD+l+zZGsUZhtcvXEHGPHht88eGB9uR yENiLI9QSvIHyTkkSsUT7nDdheeyU596xuaqm0rVE/zczmdlaUYoIZ9DPCe6rfkDAK 5F16OOfXc1T6t4vNXXdQTsTreLQJMcLWs09KeobDpk3OKu9haNHyMZOswpEK2BQgWm RqrfaWkvVX68A== From: Vincent Mailhol Date: Wed, 10 Sep 2025 15:03:32 +0900 Subject: [PATCH v2 07/20] can: netlink: refactor CAN_CTRLMODE_TDC_{AUTO,MANUAL} flag reset logic 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: <20250910-canxl-netlink-prep-v2-7-f128d4083721@kernel.org> References: <20250910-canxl-netlink-prep-v2-0-f128d4083721@kernel.org> In-Reply-To: <20250910-canxl-netlink-prep-v2-0-f128d4083721@kernel.org> To: Marc Kleine-Budde , Oliver Hartkopp Cc: Vincent Mailhol , =?utf-8?q?St=C3=A9phane_Grosjean?= , Robert Nawrath , Minh Le , Duy Nguyen , linux-can@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1857; i=mailhol@kernel.org; h=from:subject:message-id; bh=z4QfhxHdqa5NwYcif6XX3H+zIEilRUp8AiYG14f4sJo=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBkHRW5GeCkU7nB97l4jYc36/0pwbFKdw7Y4772f5ipYp mySeP+go5SFQYyLQVZMkWVZOSe3Qkehd9ihv5Ywc1iZQIYwcHEKwES+/WJkOJi2836Qvajb5QTD aa4bZ7ldmK8149edEIvMN/7Xt9140MnIcFuca+KfrBrThst7Ds512fSUd0f+QYGFSmKcmz7tfXV BixEA X-Developer-Key: i=mailhol@kernel.org; a=openpgp; fpr=ED8F700574E67F20E574E8E2AB5FEB886DBB99C2 CAN_CTRLMODE_TDC_AUTO and CAN_CTRLMODE_TDC_MANUAL are mutually exclusive. This means that whenever the user switches from auto to manual mode (or vice versa), the other flag which was set previously needs to be cleared. Currently, this is handled with a masking operation. It can be done in a simpler manner by clearing any of the previous TDC flags before copying netlink attributes. The code becomes easier to understand and will make it easier to add the new upcoming CAN XL flags which will have a similar reset logic as the current TDC flags. Signed-off-by: Vincent Mailhol --- drivers/net/can/dev/netlink.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/drivers/net/can/dev/netlink.c b/drivers/net/can/dev/netlink.c index 274eaab10796b601d565c32f6315727a578970bb..72a82d4e9d6494771320ea035ed= 6f6098c0e8ce6 100644 --- a/drivers/net/can/dev/netlink.c +++ b/drivers/net/can/dev/netlink.c @@ -254,6 +254,10 @@ static int can_changelink(struct net_device *dev, stru= ct nlattr *tb[], if ((maskedflags & ctrlstatic) !=3D ctrlstatic) return -EOPNOTSUPP; =20 + /* If a top dependency flag is provided, reset all its dependencies */ + if (cm->mask & CAN_CTRLMODE_FD) + priv->ctrlmode &=3D !CAN_CTRLMODE_FD_TDC_MASK; + /* clear bits to be modified and copy the flag values */ priv->ctrlmode &=3D ~cm->mask; priv->ctrlmode |=3D maskedflags; @@ -270,11 +274,6 @@ static int can_changelink(struct net_device *dev, stru= ct nlattr *tb[], } =20 fd_tdc_flag_provided =3D cm->mask & CAN_CTRLMODE_FD_TDC_MASK; - /* CAN_CTRLMODE_TDC_{AUTO,MANUAL} are mutually - * exclusive: make sure to turn the other one off - */ - if (fd_tdc_flag_provided) - priv->ctrlmode &=3D cm->flags | ~CAN_CTRLMODE_FD_TDC_MASK; } =20 if (data[IFLA_CAN_BITTIMING]) { --=20 2.49.1 From nobody Thu Oct 2 22:39:30 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 589AF3090F7; Wed, 10 Sep 2025 06:04:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757484299; cv=none; b=Wz71qpyu4atd68mXDldE32Atm46xYwBahC0+lv4k94Pg/0021aHhAZOOf2kPAOPeDTFAIj69/KPNJ205ffDxZeNSWnsbHd6R1U3PZP1guXcyDJTSIuXSWCFOGyCGuu7IP9mCsoVRrCcGnoV7EqSsSwD2gHvj+MRA4DvvPD8jFJ8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757484299; c=relaxed/simple; bh=MKkviT77erw3U8yGa3mJeotKQaYV/lNzirqrwQvIByY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=S4nUyzUCRfCkmxBkus0qxUdQbkMDjTkRXRyKlWnTXHGO8PhbJYOAVsUbWVR6F0yjFEmY2Z6zlcSVnmyLCG1xo2ebSCmPLi4FpRM0HCaD7xpB0A2WTA9W0f+2tb36S6E3+QByfdiLUwzXRFyv3I18IuhmibMeu3Xr35922CGkn9A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=rmOVOjNt; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="rmOVOjNt" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8D39CC4CEF0; Wed, 10 Sep 2025 06:04:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1757484298; bh=MKkviT77erw3U8yGa3mJeotKQaYV/lNzirqrwQvIByY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=rmOVOjNtR2axcsTOxJRxaIWVOFHivDrxWX47QDboYRHyFnilXIVKxo5K0+V94Sest +7Z4vb7vnuWwQzWyZlHpDJvbBdlmRnJXiEBa7FwBJuuB65zr9Crkg17SwWOuOv2zll 9sPs4RGMvk1l+ho8PaE2GrtoW4g4nBfT2xVItB1rBxXCM0fiKHiNxGPmrx06rImRFX 1zAbFXu4nZnSXWDZgR1gLDcxYrA/9aTkYGK4okq1AsedQq+8bbAs5gYxWKP2IYUKTj gQQmIiMUc/Ek4aZb+PJy7H1coCUWI9wfWQRmc2H/RW5zjITmnkRlcqaKmjjVQZGbUy NcV7NY/mmxIvA== From: Vincent Mailhol Date: Wed, 10 Sep 2025 15:03:33 +0900 Subject: [PATCH v2 08/20] can: netlink: remove useless check in can_tdc_changelink() 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: <20250910-canxl-netlink-prep-v2-8-f128d4083721@kernel.org> References: <20250910-canxl-netlink-prep-v2-0-f128d4083721@kernel.org> In-Reply-To: <20250910-canxl-netlink-prep-v2-0-f128d4083721@kernel.org> To: Marc Kleine-Budde , Oliver Hartkopp Cc: Vincent Mailhol , =?utf-8?q?St=C3=A9phane_Grosjean?= , Robert Nawrath , Minh Le , Duy Nguyen , linux-can@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1203; i=mailhol@kernel.org; h=from:subject:message-id; bh=MKkviT77erw3U8yGa3mJeotKQaYV/lNzirqrwQvIByY=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBkHRW4/5jyZcOrBvOtRXNIOycfUXANP3v01Y59a+PbFB SbP9qRmdpSyMIhxMciKKbIsK+fkVugo9A479NcSZg4rE8gQBi5OAZhIcjbDL+bI/BfuD8wW/7D+ qavcLmvKnrhM/cLlR1ZOwpWb9Gf66DD8L68TYLvc4HKk9MH+i6a7Nxe/v3ulVcZU7eIFzhcHFH8 a8AAA X-Developer-Key: i=mailhol@kernel.org; a=openpgp; fpr=ED8F700574E67F20E574E8E2AB5FEB886DBB99C2 can_tdc_changelink() return -EOPNOTSUPP under this condition: !tdc_const || !can_fd_tdc_is_enabled(priv) But this function is only called if the data[IFLA_CAN_TDC] parameters are provided. At this point, can_validate_tdc() already checked that either of the tdc auto or tdc manual control modes were provided, that is to say, can_fd_tdc_is_enabled(priv) must be true. Because the right hand operand of this condition is always true, remove it. Signed-off-by: Vincent Mailhol --- drivers/net/can/dev/netlink.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/can/dev/netlink.c b/drivers/net/can/dev/netlink.c index 72a82d4e9d6494771320ea035ed6f6098c0e8ce6..33a6621bd7a916583802fa12e0b= d971c89560924 100644 --- a/drivers/net/can/dev/netlink.c +++ b/drivers/net/can/dev/netlink.c @@ -179,7 +179,7 @@ static int can_tdc_changelink(struct can_priv *priv, co= nst struct nlattr *nla, const struct can_tdc_const *tdc_const =3D priv->fd.tdc_const; int err; =20 - if (!tdc_const || !can_fd_tdc_is_enabled(priv)) + if (!tdc_const) return -EOPNOTSUPP; =20 err =3D nla_parse_nested(tb_tdc, IFLA_CAN_TDC_MAX, nla, --=20 2.49.1 From nobody Thu Oct 2 22:39:30 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 B8F74309EEB; Wed, 10 Sep 2025 06:05:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757484301; cv=none; b=aqbNFCIs40BKULkyVxqu2hQZZeaJBrXDCcmrBjlAMUUTtGt+zliHLlrYg84KrPQVKA+UFmzxPlqrzkxNL83alamBl2eojOtRo3SCoBt+JW3PREV2rNEKNJvR+yVb/HIodq4o3LXlErnTH9K4CNkY/qlkeqq934zVoBpLfIpSIiE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757484301; c=relaxed/simple; bh=ZPwaMXLQpELfhY6LNtDeM9ItGR8zdqayo+s0dJRI6ng=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=TYp2TfgS4pf4a+9KVNhBzTPkeMCG4uQpWZ3BvBvmL8E3GVQq5bNxNeGU5j51fBEYr01bsStlOKX6ZdrGLdjvgYQmO1YKkYa7gq4MA2zLcR8lPzzdTKqUxDGSK56zcvc7p4tgXN1h5R1+9kh8WavyBqc+tnAPl8e6AjBlwBIFXm4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=VneqGBpN; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="VneqGBpN" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 20411C4CEF9; Wed, 10 Sep 2025 06:04:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1757484300; bh=ZPwaMXLQpELfhY6LNtDeM9ItGR8zdqayo+s0dJRI6ng=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=VneqGBpN7FlBWpEhvUd5AbpBtrTcYJalnYmULrq4aXsQTmBsvJ0sYspSrkp6Qi1OZ /sljBx849RMarQ121+L7Y6oXMY0pMujVM6CpSEA0GdV9HxuGuIKfS29/1USgona3Fd /hzD8PjFCZZ1nNjg2IMPjRhw9yduQN2f20Chp+yZwtq2XZNbhNum8zKY54dUfKIz8L 1DesJkjiH2QySc7jPpO2e5doBio6vitY/e5gIoQ1JgGemGAEfDwl/GI3k23sksh6NA ViTtP+uXcSX23VQhNp8ThB3KhizU7bA5XLUKcDf7Se4eS8Pxr2+EBKJurjGpz11h6y +MbqaiIyAhrWw== From: Vincent Mailhol Date: Wed, 10 Sep 2025 15:03:34 +0900 Subject: [PATCH v2 09/20] can: netlink: make can_tdc_changelink() FD agnostic 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: <20250910-canxl-netlink-prep-v2-9-f128d4083721@kernel.org> References: <20250910-canxl-netlink-prep-v2-0-f128d4083721@kernel.org> In-Reply-To: <20250910-canxl-netlink-prep-v2-0-f128d4083721@kernel.org> To: Marc Kleine-Budde , Oliver Hartkopp Cc: Vincent Mailhol , =?utf-8?q?St=C3=A9phane_Grosjean?= , Robert Nawrath , Minh Le , Duy Nguyen , linux-can@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1936; i=mailhol@kernel.org; h=from:subject:message-id; bh=ZPwaMXLQpELfhY6LNtDeM9ItGR8zdqayo+s0dJRI6ng=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBkHRe79Ek2fN1dBcDaPk+NRyWdTXLLUpx3jNMpiSfy0y qf8/ZrGjlIWBjEuBlkxRZZl5ZzcCh2F3mGH/lrCzGFlAhnCwMUpABMx+s3IcGRizaPbk76wVTM/ 5WvNU/BZedx/0VvJrF1G7AGhh6W4XRn+l9+c4XfmTE0Gw8dd6/1m3j30/c73x//+Vk1uX53oLrd zDTcA X-Developer-Key: i=mailhol@kernel.org; a=openpgp; fpr=ED8F700574E67F20E574E8E2AB5FEB886DBB99C2 can_tdc_changelink() needs to access can_priv->fd making it specific to CAN FD. Change the function parameter from struct can_priv to struct data_bittiming_params. This way, the function becomes CAN FD agnostic and can be reused later on for the CAN XL TDC. Signed-off-by: Vincent Mailhol --- drivers/net/can/dev/netlink.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/drivers/net/can/dev/netlink.c b/drivers/net/can/dev/netlink.c index 33a6621bd7a916583802fa12e0bd971c89560924..fde6565fa04af0c5615c09ebb09= 4cbf8bcef3172 100644 --- a/drivers/net/can/dev/netlink.c +++ b/drivers/net/can/dev/netlink.c @@ -171,12 +171,13 @@ static int can_validate(struct nlattr *tb[], struct n= lattr *data[], return 0; } =20 -static int can_tdc_changelink(struct can_priv *priv, const struct nlattr *= nla, +static int can_tdc_changelink(struct data_bittiming_params *dbt_params, + const struct nlattr *nla, struct netlink_ext_ack *extack) { struct nlattr *tb_tdc[IFLA_CAN_TDC_MAX + 1]; struct can_tdc tdc =3D { 0 }; - const struct can_tdc_const *tdc_const =3D priv->fd.tdc_const; + const struct can_tdc_const *tdc_const =3D dbt_params->tdc_const; int err; =20 if (!tdc_const) @@ -214,7 +215,7 @@ static int can_tdc_changelink(struct can_priv *priv, co= nst struct nlattr *nla, tdc.tdcf =3D tdcf; } =20 - priv->fd.tdc =3D tdc; + dbt_params->tdc =3D tdc; =20 return 0; } @@ -382,8 +383,8 @@ static int can_changelink(struct net_device *dev, struc= t nlattr *tb[], memset(&priv->fd.tdc, 0, sizeof(priv->fd.tdc)); if (data[IFLA_CAN_TDC]) { /* TDC parameters are provided: use them */ - err =3D can_tdc_changelink(priv, data[IFLA_CAN_TDC], - extack); + err =3D can_tdc_changelink(&priv->fd, + data[IFLA_CAN_TDC], extack); if (err) { priv->ctrlmode &=3D ~CAN_CTRLMODE_FD_TDC_MASK; return err; --=20 2.49.1 From nobody Thu Oct 2 22:39:30 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 5259C30506A; Wed, 10 Sep 2025 06:05:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757484303; cv=none; b=V0NmlMEtEgby+RCfFsuQdeloFJleeWCFBY+L3lm9fJHufMfoPuACIrr/T3czjn455GktuLd3xShd+Josp32n0j3CXqHvNfGOxNTmLPiHiRF/bFONy5UaaENmk4KS1vdpc+G5A12KRUKTCFifUpDGh6E1jtBpOLdyP1rzXYyKlA4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757484303; c=relaxed/simple; bh=IaGBWyv3VU9qDVrXpXbSoIszYgCwXnChH62JTw6usnc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=qYQiGao3qUjTbq3fPHyeX0ExgJ9GoGhm0sfb4WHfD1ePAUsM6MeAA9UDricBNVSUeG25cbC11ogDbKABoJPn1yeaRNNVaEMANNXqcFZWX2lV0/rZvcdxquSlrXsBsmRMUEFnkq9Z1JHy4KXudjp2bz+JYhOQ0EoXcOk6gaqf9t0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=eXxs4eCe; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="eXxs4eCe" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A7AD2C4CEFE; Wed, 10 Sep 2025 06:05:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1757484301; bh=IaGBWyv3VU9qDVrXpXbSoIszYgCwXnChH62JTw6usnc=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=eXxs4eCeaBHezJMiWz1YCs7ekiTL90zHgX87aNHXvmTz29ldBGNhAiwEImJDghOJ1 Rnn6TBlDhOkzls2eIwkVRfVbkui9s4l+8dL+EvrsYY6Knmrb+3NGn5bjqcle7eDA8s CBZtvFfFL9HALF74AMf3+aY3YYi81z1nYY2JA9EM9KPP3tKolJSBbwzSuCIgsfuZl3 t8oe5KxxLuotZSew1pe6CvH+ufjkmuuLr3x0xM2Y4/CJzIfsloajOVVJc5C0Zu53/I rMOxdwBPzmHrul3JA4A/9MoI0aR6afyw6/Kc2veo0lpt/mtfWEEGuRVRD/hcSpTsYu vEVyPZuPEP55g== From: Vincent Mailhol Date: Wed, 10 Sep 2025 15:03:35 +0900 Subject: [PATCH v2 10/20] can: netlink: add can_dtb_changelink() 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: <20250910-canxl-netlink-prep-v2-10-f128d4083721@kernel.org> References: <20250910-canxl-netlink-prep-v2-0-f128d4083721@kernel.org> In-Reply-To: <20250910-canxl-netlink-prep-v2-0-f128d4083721@kernel.org> To: Marc Kleine-Budde , Oliver Hartkopp Cc: Vincent Mailhol , =?utf-8?q?St=C3=A9phane_Grosjean?= , Robert Nawrath , Minh Le , Duy Nguyen , linux-can@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=6716; i=mailhol@kernel.org; h=from:subject:message-id; bh=IaGBWyv3VU9qDVrXpXbSoIszYgCwXnChH62JTw6usnc=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBkHRR7uPqVbeE74wcy5rAK/rNj2tsurVNw8KTf73OS1l 2fymUX/6ChlYRDjYpAVU2RZVs7JrdBR6B126K8lzBxWJpAhDFycAjCR7UcYGVZoyv60UTB7LNOd l1rAu7tYT5xrS0Bp2ZENKt5rDtmr/WZk2KySulTN99KlqCcRei+Xs+62VAub/VDjqWrWimW3Kv7 kcAMA X-Developer-Key: i=mailhol@kernel.org; a=openpgp; fpr=ED8F700574E67F20E574E8E2AB5FEB886DBB99C2 Factorise the databittiming parsing out of can_changelink() and move it in the new can_dtb_changelink() function. This is a preparation patch for the introduction of CAN XL because the databittiming changelink logic will be reused later on. Signed-off-by: Vincent Mailhol --- Changelog: v1 -> v2: - Change WARN_ON(1) into return -EOPNOTSUPP to suppress a gcc warning. Link: https://lore.kernel.org/linux-can/202509050404.ZLQknagH-lkp@intel= .com/ RFC -> v1: - In the RFC, can_dbt_changelink() required 8 parameters. Instead, just pass a boolean and then get the FD/XL specific parameters in an "if (fd) {} else {}" conditional. --- drivers/net/can/dev/netlink.c | 152 ++++++++++++++++++++++++--------------= ---- 1 file changed, 88 insertions(+), 64 deletions(-) diff --git a/drivers/net/can/dev/netlink.c b/drivers/net/can/dev/netlink.c index fde6565fa04af0c5615c09ebb094cbf8bcef3172..5812114ca8842baedebd698d300= 0843dbce3ec7d 100644 --- a/drivers/net/can/dev/netlink.c +++ b/drivers/net/can/dev/netlink.c @@ -220,12 +220,95 @@ static int can_tdc_changelink(struct data_bittiming_p= arams *dbt_params, return 0; } =20 +static int can_dbt_changelink(struct net_device *dev, struct nlattr *data[= ], + bool fd, struct netlink_ext_ack *extack) +{ + struct nlattr *data_bittiming, *data_tdc; + struct can_priv *priv =3D netdev_priv(dev); + struct data_bittiming_params *dbt_params; + struct can_bittiming dbt; + bool need_tdc_calc =3D false; + u32 tdc_mask; + int err; + + if (fd) { + data_bittiming =3D data[IFLA_CAN_DATA_BITTIMING]; + data_tdc =3D data[IFLA_CAN_TDC]; + dbt_params =3D &priv->fd; + tdc_mask =3D CAN_CTRLMODE_FD_TDC_MASK; + } else { + return -EOPNOTSUPP; /* Place holder for CAN XL */ + } + + if (!data_bittiming) + return 0; + + /* Do not allow changing bittiming while running */ + if (dev->flags & IFF_UP) + return -EBUSY; + + /* Calculate bittiming parameters based on data_bittiming_const + * if set, otherwise pass bitrate directly via do_set_bitrate(). + * Bail out if neither is given. + */ + if (!dbt_params->data_bittiming_const && !dbt_params->do_set_data_bittimi= ng && + !dbt_params->data_bitrate_const) + return -EOPNOTSUPP; + + memcpy(&dbt, nla_data(data_bittiming), sizeof(dbt)); + err =3D can_get_bittiming(dev, &dbt, dbt_params->data_bittiming_const, + dbt_params->data_bitrate_const, + dbt_params->data_bitrate_const_cnt, extack); + if (err) + return err; + + if (priv->bitrate_max && dbt.bitrate > priv->bitrate_max) { + NL_SET_ERR_MSG_FMT(extack, + "CAN data bitrate %u bps surpasses transceiver capabilities of %u b= ps", + dbt.bitrate, priv->bitrate_max); + return -EINVAL; + } + + memset(&dbt_params->tdc, 0, sizeof(dbt_params->tdc)); + if (data[IFLA_CAN_CTRLMODE]) { + struct can_ctrlmode *cm =3D nla_data(data[IFLA_CAN_CTRLMODE]); + + need_tdc_calc =3D !(cm->mask & tdc_mask); + } + if (data_tdc) { + /* TDC parameters are provided: use them */ + err =3D can_tdc_changelink(dbt_params, data_tdc, extack); + if (err) { + priv->ctrlmode &=3D ~tdc_mask; + return err; + } + } else if (need_tdc_calc) { + /* Neither of TDC parameters nor TDC flags are provided: + * do calculation + */ + can_calc_tdco(&dbt_params->tdc, dbt_params->tdc_const, &dbt, + &priv->ctrlmode, priv->ctrlmode_supported); + } /* else: both CAN_CTRLMODE_TDC_{AUTO,MANUAL} are explicitly + * turned off. TDC is disabled: do nothing + */ + + memcpy(&dbt_params->data_bittiming, &dbt, sizeof(dbt)); + + if (dbt_params->do_set_data_bittiming) { + /* Finally, set the bit-timing registers */ + err =3D dbt_params->do_set_data_bittiming(dev); + if (err) + return err; + } + + return 0; +} + static int can_changelink(struct net_device *dev, struct nlattr *tb[], struct nlattr *data[], struct netlink_ext_ack *extack) { struct can_priv *priv =3D netdev_priv(dev); - bool fd_tdc_flag_provided =3D false; int err; =20 /* We need synchronization with dev->stop() */ @@ -273,8 +356,6 @@ static int can_changelink(struct net_device *dev, struc= t nlattr *tb[], priv->ctrlmode &=3D ~CAN_CTRLMODE_FD_TDC_MASK; memset(&priv->fd.tdc, 0, sizeof(priv->fd.tdc)); } - - fd_tdc_flag_provided =3D cm->mask & CAN_CTRLMODE_FD_TDC_MASK; } =20 if (data[IFLA_CAN_BITTIMING]) { @@ -347,67 +428,10 @@ static int can_changelink(struct net_device *dev, str= uct nlattr *tb[], return err; } =20 - if (data[IFLA_CAN_DATA_BITTIMING]) { - struct can_bittiming dbt; - - /* Do not allow changing bittiming while running */ - if (dev->flags & IFF_UP) - return -EBUSY; - - /* Calculate bittiming parameters based on - * data_bittiming_const if set, otherwise pass bitrate - * directly via do_set_bitrate(). Bail out if neither - * is given. - */ - if (!priv->fd.data_bittiming_const && !priv->fd.do_set_data_bittiming && - !priv->fd.data_bitrate_const) - return -EOPNOTSUPP; - - memcpy(&dbt, nla_data(data[IFLA_CAN_DATA_BITTIMING]), - sizeof(dbt)); - err =3D can_get_bittiming(dev, &dbt, - priv->fd.data_bittiming_const, - priv->fd.data_bitrate_const, - priv->fd.data_bitrate_const_cnt, - extack); - if (err) - return err; - - if (priv->bitrate_max && dbt.bitrate > priv->bitrate_max) { - NL_SET_ERR_MSG_FMT(extack, - "CANFD data bitrate %u bps surpasses transceiver capabilities of %= u bps", - dbt.bitrate, priv->bitrate_max); - return -EINVAL; - } - - memset(&priv->fd.tdc, 0, sizeof(priv->fd.tdc)); - if (data[IFLA_CAN_TDC]) { - /* TDC parameters are provided: use them */ - err =3D can_tdc_changelink(&priv->fd, - data[IFLA_CAN_TDC], extack); - if (err) { - priv->ctrlmode &=3D ~CAN_CTRLMODE_FD_TDC_MASK; - return err; - } - } else if (!fd_tdc_flag_provided) { - /* Neither of TDC parameters nor TDC flags are - * provided: do calculation - */ - can_calc_tdco(&priv->fd.tdc, priv->fd.tdc_const, &dbt, - &priv->ctrlmode, priv->ctrlmode_supported); - } /* else: both CAN_CTRLMODE_TDC_{AUTO,MANUAL} are explicitly - * turned off. TDC is disabled: do nothing - */ - - memcpy(&priv->fd.data_bittiming, &dbt, sizeof(dbt)); - - if (priv->fd.do_set_data_bittiming) { - /* Finally, set the bit-timing registers */ - err =3D priv->fd.do_set_data_bittiming(dev); - if (err) - return err; - } - } + /* CAN FD */ + err =3D can_dbt_changelink(dev, data, true, extack); + if (err) + return err; =20 if (data[IFLA_CAN_TERMINATION]) { const u16 termval =3D nla_get_u16(data[IFLA_CAN_TERMINATION]); --=20 2.49.1 From nobody Thu Oct 2 22:39:30 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 D4C5730ACEA; Wed, 10 Sep 2025 06:05:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757484303; cv=none; b=g+6maDSXrePXGR9k8xIOj+FSKHfrZkpvC1JQGO4qFPLnp6ZJxu39D1USFUr7LZT1Q+Mc1dwJb9Ma0xYZue2F8kVamqsTuapPNnMPIOjpB/WXTnAxZ2Odf05tsteLrkVFs8NQWeVSB3S/4IAC/NTKBbg1ymoIDwKWmpbk+lbs2Pw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757484303; c=relaxed/simple; bh=Ogh7Ss/aTKbsx92iG49zUPC2IyGgZeHE21Avay2ymEg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=CMuRoE/g4f2a7XxvMNUZCUTgwLe2vPiG5SAVVaa9YOZQzW/X2Zs6jvy2ojb5yaAXF/xz7DkslrLSpgUZWYJFy46l4JpuwbBcJ50PfJ/sFgEHdh9pXkcDbrYRy+eRlc7oQZ2r82sapMg+OjkFfSLFzYbiAbpbWdhSJEN8p8YSzKA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=XLY/SlU1; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="XLY/SlU1" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3ACE1C4CEF5; Wed, 10 Sep 2025 06:05:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1757484303; bh=Ogh7Ss/aTKbsx92iG49zUPC2IyGgZeHE21Avay2ymEg=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=XLY/SlU10UwAV495myOqyBDGrHybhc3HPRUlpgD/yW44Jg+aGswl1OyCTiScIXoPm UJOV6ZGW9sEVi/HWF80pDcM2TGEmejYFW62cRnlrH4i0MJShRSQ7CjESMgXhwj1Bm2 Qbve+TjZyanlgE9mZ4TfWm9HiTxU96mOY6skw2KIoZ17T6cRQcI45jPRkamWXw696o 6Edadj5zW78nuRg09vWIybn7skkD42ST3T7fcGlOLbR4xrZVBASQkdQKTvj6HR+3tS /qOk862b1frkHeeH1+l1iAS8QxxbROONiHXFLhnKNyeF6bq8xpPR3yCcohSZMJdj4U WBzTE+YbcSfeQ== From: Vincent Mailhol Date: Wed, 10 Sep 2025 15:03:36 +0900 Subject: [PATCH v2 11/20] can: netlink: add can_ctrlmode_changelink() 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: <20250910-canxl-netlink-prep-v2-11-f128d4083721@kernel.org> References: <20250910-canxl-netlink-prep-v2-0-f128d4083721@kernel.org> In-Reply-To: <20250910-canxl-netlink-prep-v2-0-f128d4083721@kernel.org> To: Marc Kleine-Budde , Oliver Hartkopp Cc: Vincent Mailhol , =?utf-8?q?St=C3=A9phane_Grosjean?= , Robert Nawrath , Minh Le , Duy Nguyen , linux-can@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4331; i=mailhol@kernel.org; h=from:subject:message-id; bh=Ogh7Ss/aTKbsx92iG49zUPC2IyGgZeHE21Avay2ymEg=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBkHRR4zuye9l14iteLblORdn1gOfdQSSV8lx6Q5WX315 lXCtWr9HaUsDGJcDLJiiizLyjm5FToKvcMO/bWEmcPKBDKEgYtTACaSYMDwh1c5/mqb7PTnM4/7 xaVFlRk3G2odWnVrCdPl7Mil7SZ53Qz/bFuFFyqenvkpOEY/YF3As5Z9qjEGVt0/I+/333DSd+x nBQA= X-Developer-Key: i=mailhol@kernel.org; a=openpgp; fpr=ED8F700574E67F20E574E8E2AB5FEB886DBB99C2 Split the control mode change link logic into a new function: can_ctrlmode_changelink(). The purpose is to increase code readability by preventing can_changelink() from becoming too big. Signed-off-by: Vincent Mailhol --- drivers/net/can/dev/netlink.c | 98 ++++++++++++++++++++++++---------------= ---- 1 file changed, 55 insertions(+), 43 deletions(-) diff --git a/drivers/net/can/dev/netlink.c b/drivers/net/can/dev/netlink.c index 5812114ca8842baedebd698d3000843dbce3ec7d..ab2c9e75347704132b4dfe3b3d2= 9b2c3f1c98908 100644 --- a/drivers/net/can/dev/netlink.c +++ b/drivers/net/can/dev/netlink.c @@ -171,6 +171,60 @@ static int can_validate(struct nlattr *tb[], struct nl= attr *data[], return 0; } =20 +static int can_ctrlmode_changelink(struct net_device *dev, + struct nlattr *data[], + struct netlink_ext_ack *extack) +{ + struct can_priv *priv =3D netdev_priv(dev); + struct can_ctrlmode *cm; + u32 maskedflags; + u32 ctrlstatic; + + if (!data[IFLA_CAN_CTRLMODE]) + return 0; + + /* Do not allow changing controller mode while running */ + if (dev->flags & IFF_UP) + return -EBUSY; + + cm =3D nla_data(data[IFLA_CAN_CTRLMODE]); + maskedflags =3D cm->flags & cm->mask; + ctrlstatic =3D can_get_static_ctrlmode(priv); + + /* check whether provided bits are allowed to be passed */ + if (maskedflags & ~(priv->ctrlmode_supported | ctrlstatic)) + return -EOPNOTSUPP; + + /* do not check for static fd-non-iso if 'fd' is disabled */ + if (!(maskedflags & CAN_CTRLMODE_FD)) + ctrlstatic &=3D ~CAN_CTRLMODE_FD_NON_ISO; + + /* make sure static options are provided by configuration */ + if ((maskedflags & ctrlstatic) !=3D ctrlstatic) + return -EOPNOTSUPP; + + /* If a top dependency flag is provided, reset all its dependencies */ + if (cm->mask & CAN_CTRLMODE_FD) + priv->ctrlmode &=3D !CAN_CTRLMODE_FD_TDC_MASK; + + /* clear bits to be modified and copy the flag values */ + priv->ctrlmode &=3D ~cm->mask; + priv->ctrlmode |=3D maskedflags; + + /* CAN_CTRLMODE_FD can only be set when driver supports FD */ + if (priv->ctrlmode & CAN_CTRLMODE_FD) { + dev->mtu =3D CANFD_MTU; + } else { + dev->mtu =3D CAN_MTU; + memset(&priv->fd.data_bittiming, 0, + sizeof(priv->fd.data_bittiming)); + priv->ctrlmode &=3D ~CAN_CTRLMODE_FD_TDC_MASK; + memset(&priv->fd.tdc, 0, sizeof(priv->fd.tdc)); + } + + return 0; +} + static int can_tdc_changelink(struct data_bittiming_params *dbt_params, const struct nlattr *nla, struct netlink_ext_ack *extack) @@ -314,49 +368,7 @@ static int can_changelink(struct net_device *dev, stru= ct nlattr *tb[], /* We need synchronization with dev->stop() */ ASSERT_RTNL(); =20 - if (data[IFLA_CAN_CTRLMODE]) { - struct can_ctrlmode *cm; - u32 ctrlstatic; - u32 maskedflags; - - /* Do not allow changing controller mode while running */ - if (dev->flags & IFF_UP) - return -EBUSY; - cm =3D nla_data(data[IFLA_CAN_CTRLMODE]); - ctrlstatic =3D can_get_static_ctrlmode(priv); - maskedflags =3D cm->flags & cm->mask; - - /* check whether provided bits are allowed to be passed */ - if (maskedflags & ~(priv->ctrlmode_supported | ctrlstatic)) - return -EOPNOTSUPP; - - /* do not check for static fd-non-iso if 'fd' is disabled */ - if (!(maskedflags & CAN_CTRLMODE_FD)) - ctrlstatic &=3D ~CAN_CTRLMODE_FD_NON_ISO; - - /* make sure static options are provided by configuration */ - if ((maskedflags & ctrlstatic) !=3D ctrlstatic) - return -EOPNOTSUPP; - - /* If a top dependency flag is provided, reset all its dependencies */ - if (cm->mask & CAN_CTRLMODE_FD) - priv->ctrlmode &=3D !CAN_CTRLMODE_FD_TDC_MASK; - - /* clear bits to be modified and copy the flag values */ - priv->ctrlmode &=3D ~cm->mask; - priv->ctrlmode |=3D maskedflags; - - /* CAN_CTRLMODE_FD can only be set when driver supports FD */ - if (priv->ctrlmode & CAN_CTRLMODE_FD) { - dev->mtu =3D CANFD_MTU; - } else { - dev->mtu =3D CAN_MTU; - memset(&priv->fd.data_bittiming, 0, - sizeof(priv->fd.data_bittiming)); - priv->ctrlmode &=3D ~CAN_CTRLMODE_FD_TDC_MASK; - memset(&priv->fd.tdc, 0, sizeof(priv->fd.tdc)); - } - } + can_ctrlmode_changelink(dev, data, extack); =20 if (data[IFLA_CAN_BITTIMING]) { struct can_bittiming bt; --=20 2.49.1 From nobody Thu Oct 2 22:39:30 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 2D50530AD0F; Wed, 10 Sep 2025 06:05:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757484305; cv=none; b=qFzJgWpqD0WDnJQUTHVEbWYWYH6fZNosEY7X/PMmX966lk+GetL1gBt/EWjxrpy7dmQWAxjgUtOY51zpEc03wVYfnTsjrf7nvxEZSL9zkL7oWGlf8PEhUGnNk6lGF9lTt/1X6jYUlTBHdoJQUPkHU3IE2CnQxXH4AqWO4zaUE5U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757484305; c=relaxed/simple; bh=faDZlEWoYKdD4YhjAFOCXbGZcfZShi5Iz2aATXdGBQo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=mQews+J99brOxHKXf+w1G6Fkrw16KnBwfPl+NTtu4oEnr+zF8tL0+H2OfE0LmvoQvBr8klQciYa6nXlT07s332obmlCY8559R8AGlkWinIVUx11lqs8Q510SvJSHDSdR0g/QbCRmy2MuFxCYq4WwQv9Xxc1ED3jLO+kqXURKscs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=CFI+b9Z6; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="CFI+b9Z6" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C2A26C4CEF0; Wed, 10 Sep 2025 06:05:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1757484305; bh=faDZlEWoYKdD4YhjAFOCXbGZcfZShi5Iz2aATXdGBQo=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=CFI+b9Z6xaBesNyOe/K6o52jDj4B22A7f8WsMrcBygPqi/DZI7Hh2UHxTAK5IQqYE JonpDnkti4jR3X/C6RDtKv7tYIRegJPLr7lJoq7HnzIla0kk2o1mWWhnxdCJmidwkS qWO24UFIVwRvf5N1u/bBP9dMZWmiDr6y30Bo7woBHXrhvRZ5hAnMJC+ti1iwAVR5R2 0E/LdSiIQEzyI3JWB32vViw7pEFtd7ip8kevQOm/JOGC89ufzK8MELM2ANCktFKMv+ QOvJJzZh69UDAl82UlppDkOpp40Ysnl1YS8KZxnwWN5AB+nbqbh9sQVNtSXHTZOf0L lC+1wBRzO0WCQ== From: Vincent Mailhol Date: Wed, 10 Sep 2025 15:03:37 +0900 Subject: [PATCH v2 12/20] can: netlink: make can_tdc_get_size() FD agnostic 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: <20250910-canxl-netlink-prep-v2-12-f128d4083721@kernel.org> References: <20250910-canxl-netlink-prep-v2-0-f128d4083721@kernel.org> In-Reply-To: <20250910-canxl-netlink-prep-v2-0-f128d4083721@kernel.org> To: Marc Kleine-Budde , Oliver Hartkopp Cc: Vincent Mailhol , =?utf-8?q?St=C3=A9phane_Grosjean?= , Robert Nawrath , Minh Le , Duy Nguyen , linux-can@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3166; i=mailhol@kernel.org; h=from:subject:message-id; bh=faDZlEWoYKdD4YhjAFOCXbGZcfZShi5Iz2aATXdGBQo=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBkHRZ5VK2k+KGqWfrD7/h6P9/M/2KzjtJxlW9PGuaUiq dZF6NXHjlIWBjEuBlkxRZZl5ZzcCh2F3mGH/lrCzGFlAhnCwMUpABO5E8nI8KiQvc27VslnzY4L CsdVOr1/PdNaqWSi5CIR1d/pfF7QlJGhyVXv75SsMMHqyzoNP7ILl5ifeHPr366C7iNMzkVs85e yAgA= X-Developer-Key: i=mailhol@kernel.org; a=openpgp; fpr=ED8F700574E67F20E574E8E2AB5FEB886DBB99C2 can_tdc_get_size() needs to access can_priv->fd making it specific to CAN FD. Change the function parameter from struct can_priv to struct data_bittiming_params. can_tdc_get_size() also uses the CAN_CTRLMODE_TDC_MANUAL macro making it specific to CAN FD. Add the tdc mask to the function parameter list. The value of the tdc manual flag can then be derived from that mask and stored in a local variable. This way, the function becomes CAN FD agnostic and can be reused later on for the CAN XL TDC. Signed-off-by: Vincent Mailhol --- Changelog: v1 -> v2: - Small rewrite of the patch description adding one more paragraph with further details. --- drivers/net/can/dev/netlink.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/drivers/net/can/dev/netlink.c b/drivers/net/can/dev/netlink.c index ab2c9e75347704132b4dfe3b3d29b2c3f1c98908..a49131f227d60e136ea31792a6e= 8c0157f3a8275 100644 --- a/drivers/net/can/dev/netlink.c +++ b/drivers/net/can/dev/netlink.c @@ -472,32 +472,32 @@ static int can_changelink(struct net_device *dev, str= uct nlattr *tb[], return 0; } =20 -static size_t can_tdc_get_size(const struct net_device *dev) +static size_t can_tdc_get_size(struct data_bittiming_params *dbt_params, + u32 tdc_flags) { - struct can_priv *priv =3D netdev_priv(dev); + bool tdc_manual =3D tdc_flags & CAN_CTRLMODE_TDC_MANUAL_MASK; size_t size; =20 - if (!priv->fd.tdc_const) + if (!dbt_params->tdc_const) return 0; =20 size =3D nla_total_size(0); /* nest IFLA_CAN_TDC */ - if (priv->ctrlmode_supported & CAN_CTRLMODE_TDC_MANUAL) { + if (tdc_manual) { size +=3D nla_total_size(sizeof(u32)); /* IFLA_CAN_TDCV_MIN */ size +=3D nla_total_size(sizeof(u32)); /* IFLA_CAN_TDCV_MAX */ } size +=3D nla_total_size(sizeof(u32)); /* IFLA_CAN_TDCO_MIN */ size +=3D nla_total_size(sizeof(u32)); /* IFLA_CAN_TDCO_MAX */ - if (priv->fd.tdc_const->tdcf_max) { + if (dbt_params->tdc_const->tdcf_max) { size +=3D nla_total_size(sizeof(u32)); /* IFLA_CAN_TDCF_MIN */ size +=3D nla_total_size(sizeof(u32)); /* IFLA_CAN_TDCF_MAX */ } =20 - if (can_fd_tdc_is_enabled(priv)) { - if (priv->ctrlmode & CAN_CTRLMODE_TDC_MANUAL || - priv->fd.do_get_auto_tdcv) + if (tdc_flags) { + if (tdc_manual || dbt_params->do_get_auto_tdcv) size +=3D nla_total_size(sizeof(u32)); /* IFLA_CAN_TDCV */ size +=3D nla_total_size(sizeof(u32)); /* IFLA_CAN_TDCO */ - if (priv->fd.tdc_const->tdcf_max) + if (dbt_params->tdc_const->tdcf_max) size +=3D nla_total_size(sizeof(u32)); /* IFLA_CAN_TDCF */ } =20 @@ -541,7 +541,8 @@ static size_t can_get_size(const struct net_device *dev) size +=3D nla_total_size(sizeof(*priv->fd.data_bitrate_const) * priv->fd.data_bitrate_const_cnt); size +=3D sizeof(priv->bitrate_max); /* IFLA_CAN_BITRATE_MAX */ - size +=3D can_tdc_get_size(dev); /* IFLA_CAN_TDC */ + size +=3D can_tdc_get_size(&priv->fd, /* IFLA_CAN_TDC */ + priv->ctrlmode & CAN_CTRLMODE_FD_TDC_MASK); size +=3D can_ctrlmode_ext_get_size(); /* IFLA_CAN_CTRLMODE_EXT */ =20 return size; --=20 2.49.1 From nobody Thu Oct 2 22:39:30 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 E95B630BBA4; Wed, 10 Sep 2025 06:05:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757484307; cv=none; b=LCm5YXs1o/jkozS7mtNVZXkvO7hRT2by+8EzqYHT7DL0IVAxHpicE1cga05Q3DnIWIaCItw8xB6VECz+B7jAGmTw0udy3nP6BWdsIsRBIGQRB/u9w670FjFUcUHEGo+eI7WYzUM+4Oqq/8ZVPG7aLlG5vWys+hGKrjwrJBxHjTs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757484307; c=relaxed/simple; bh=6zg+qPvfilA0yhLj5lrUlqzYlcQX6SDNB9BNFfpT4YU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=YzXuzG9y3ZlhJpJ6OQW2HTnjPsTu0tz3O2TLXr78FMb4dSJKL6iLRMo0KyoCbGKxiwy4jkX25ATlen7WPBrzDrvBQO0brEXLHz9cII+lxLMOKvTFKPjQ/RfYsegGlMlm6mPSkXwS4dw0xqz/qyoZyS0/ldjEuEYgt4t0CJ7d198= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=TT7hafGp; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="TT7hafGp" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 573ADC4CEF0; Wed, 10 Sep 2025 06:05:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1757484306; bh=6zg+qPvfilA0yhLj5lrUlqzYlcQX6SDNB9BNFfpT4YU=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=TT7hafGp4YOFuh7dwY1BZTzEUeaYDjWj17Ggl3m2krKMDpwrCyKgWaK6neSmmAQJJ F6wkl46Na77hxS1jUqvRraYtSDNdlf7ATUr/EWjGslH3T6nIZhBN4q9S4oZqeHyYlw HX+SUQ8tol813HsbtaXsmQOHIAIRBl5EnLoDq65jlYL1AF/zZymQsMYtIFRk+nZSQl BVxzdaIwClYS+NKW4Qo/h54KPBtjqhM2/UC1VamK1yjiW1CW4VGR+kMAcWh1cxq4qg BJDk4w7Y45eUmmm8O8T9H5W238o6PBW9IMpe1xwtBC7nN0G8OMBVa+Zg0o5rAsJdSn n1ytmw6EllaYg== From: Vincent Mailhol Date: Wed, 10 Sep 2025 15:03:38 +0900 Subject: [PATCH v2 13/20] can: netlink: add can_data_bittiming_get_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: <20250910-canxl-netlink-prep-v2-13-f128d4083721@kernel.org> References: <20250910-canxl-netlink-prep-v2-0-f128d4083721@kernel.org> In-Reply-To: <20250910-canxl-netlink-prep-v2-0-f128d4083721@kernel.org> To: Marc Kleine-Budde , Oliver Hartkopp Cc: Vincent Mailhol , =?utf-8?q?St=C3=A9phane_Grosjean?= , Robert Nawrath , Minh Le , Duy Nguyen , linux-can@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3222; i=mailhol@kernel.org; h=from:subject:message-id; bh=6zg+qPvfilA0yhLj5lrUlqzYlcQX6SDNB9BNFfpT4YU=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBkHRV602Lfe8It7w/n/tm1x1q/WaXMF5ApWtGu0zqudN uGvnLZJRykLgxgXg6yYIsuyck5uhY5C77BDfy1h5rAygQxh4OIUgImIf2L4HyQhKTNPeU7C/Rkb mXyaQ7Z9CcvSe8e8I3CP1KmTjr6Fdxn+l3512ZzMZiC9rsk1N/hX5MuXVuv+yubOPm2i7coZM82 GAwA= X-Developer-Key: i=mailhol@kernel.org; a=openpgp; fpr=ED8F700574E67F20E574E8E2AB5FEB886DBB99C2 Add the can_data_bittiming_get_size() function to factorise the logic to retrieve the size of below data bittiming parameters: - data_bittiming - data_bittiming_const - data_bitrate_const - tdc parameters This function will be reused later on for CAN XL. Signed-off-by: Vincent Mailhol --- drivers/net/can/dev/netlink.c | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/drivers/net/can/dev/netlink.c b/drivers/net/can/dev/netlink.c index a49131f227d60e136ea31792a6e8c0157f3a8275..c30920761d25871ac2e73a56a54= 333c521b4f9d8 100644 --- a/drivers/net/can/dev/netlink.c +++ b/drivers/net/can/dev/netlink.c @@ -504,6 +504,23 @@ static size_t can_tdc_get_size(struct data_bittiming_p= arams *dbt_params, return size; } =20 +static size_t can_data_bittiming_get_size(struct data_bittiming_params *db= t_params, + u32 tdc_flags) +{ + size_t size =3D 0; + + if (dbt_params->data_bittiming.bitrate) /* IFLA_CAN_DATA_BITTIMING */ + size +=3D nla_total_size(sizeof(dbt_params->data_bittiming)); + if (dbt_params->data_bittiming_const) /* IFLA_CAN_DATA_BITTIMING_CONST */ + size +=3D nla_total_size(sizeof(*dbt_params->data_bittiming_const)); + if (dbt_params->data_bitrate_const) /* IFLA_CAN_DATA_BITRATE_CONST */ + size +=3D nla_total_size(sizeof(*dbt_params->data_bitrate_const) * + dbt_params->data_bitrate_const_cnt); + size +=3D can_tdc_get_size(dbt_params, tdc_flags);/* IFLA_CAN_TDC */ + + return size; +} + static size_t can_ctrlmode_ext_get_size(void) { return nla_total_size(0) + /* nest IFLA_CAN_CTRLMODE_EXT */ @@ -525,10 +542,6 @@ static size_t can_get_size(const struct net_device *de= v) size +=3D nla_total_size(sizeof(u32)); /* IFLA_CAN_RESTART_MS */ if (priv->do_get_berr_counter) /* IFLA_CAN_BERR_COUNTER */ size +=3D nla_total_size(sizeof(struct can_berr_counter)); - if (priv->fd.data_bittiming.bitrate) /* IFLA_CAN_DATA_BITTIMING */ - size +=3D nla_total_size(sizeof(struct can_bittiming)); - if (priv->fd.data_bittiming_const) /* IFLA_CAN_DATA_BITTIMING_CONST */ - size +=3D nla_total_size(sizeof(struct can_bittiming_const)); if (priv->termination_const) { size +=3D nla_total_size(sizeof(priv->termination)); /* IFLA_CAN_TERMIN= ATION */ size +=3D nla_total_size(sizeof(*priv->termination_const) * /* IFLA_CAN_= TERMINATION_CONST */ @@ -537,14 +550,12 @@ static size_t can_get_size(const struct net_device *d= ev) if (priv->bitrate_const) /* IFLA_CAN_BITRATE_CONST */ size +=3D nla_total_size(sizeof(*priv->bitrate_const) * priv->bitrate_const_cnt); - if (priv->fd.data_bitrate_const) /* IFLA_CAN_DATA_BITRATE_CONST */ - size +=3D nla_total_size(sizeof(*priv->fd.data_bitrate_const) * - priv->fd.data_bitrate_const_cnt); size +=3D sizeof(priv->bitrate_max); /* IFLA_CAN_BITRATE_MAX */ - size +=3D can_tdc_get_size(&priv->fd, /* IFLA_CAN_TDC */ - priv->ctrlmode & CAN_CTRLMODE_FD_TDC_MASK); size +=3D can_ctrlmode_ext_get_size(); /* IFLA_CAN_CTRLMODE_EXT */ =20 + size +=3D can_data_bittiming_get_size(&priv->fd, + priv->ctrlmode & CAN_CTRLMODE_FD_TDC_MASK); + return size; } =20 --=20 2.49.1 From nobody Thu Oct 2 22:39:30 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 9E07B30AD0F; Wed, 10 Sep 2025 06:05:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757484308; cv=none; b=GGROYQwgHexWbJZ6N2YaOALEnZ1uxNXD7Ijz0SzK5gfnEkcEGryYUZglxAevAVBm6shpjjZtevQoS9v8pyDiQ5dcAFzeaRlMkDClRRpsfayv6Ioc7FslymmAvSe0sDFS1yi2dsizEYaqDLKWfqac+y9/hORVmd+WiybpYfw7s1Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757484308; c=relaxed/simple; bh=70CWolPIlOgPwhAb0qjq4AkLhlgahxoMh2KXdI+DFHM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=EiYDzU013Oz9/tXaCcHMA8m2EtRNP2nAlZDkvncg8AduGbxRhWELZZX+0OyGbT/jZdA/Oiq3jrzXlOD6kfBzrJQJMOOnE82lNAPT3avNoPlOtxsXCO5/cYUjbeJPjutwlot5gd7+RS7tpPm1HQZ1Y2BbieDxq+9d6NOTwGXU9Gk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=THdbLEwU; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="THdbLEwU" Received: by smtp.kernel.org (Postfix) with ESMTPSA id DEA27C4CEF9; Wed, 10 Sep 2025 06:05:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1757484308; bh=70CWolPIlOgPwhAb0qjq4AkLhlgahxoMh2KXdI+DFHM=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=THdbLEwUJ/8fUO30vzEifpRmmZLPQhdDM57sl927F1B0/U983rQTWgerpaC8fTS2t tEXmZ4Hze6opDsBVTzayvlS0nGP0zDIEYIaH5339AaFEUIO0gmjzxUOZpxChR2h2n9 31IdHc4Sy0MVJ5mMVoJUboEytGuygayK8kQgQq2FIHeXvRqUxjOzQvoogfE6F+e1yh 5w3VD0Nt7YBukN+XcY0b4C4munXt9J9UJIb8662BAYtzIitkBABtpG+lQs9XtC2qJj 2I1UlNJa4FvSz83syPRx3+MNOnABz2sZASzkaJJuB/wsqYrOHetljcuuD2W27xbdVH YbOm+XNyQvrBg== From: Vincent Mailhol Date: Wed, 10 Sep 2025 15:03:39 +0900 Subject: [PATCH v2 14/20] can: netlink: add can_bittiming_fill_info() 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: <20250910-canxl-netlink-prep-v2-14-f128d4083721@kernel.org> References: <20250910-canxl-netlink-prep-v2-0-f128d4083721@kernel.org> In-Reply-To: <20250910-canxl-netlink-prep-v2-0-f128d4083721@kernel.org> To: Marc Kleine-Budde , Oliver Hartkopp Cc: Vincent Mailhol , =?utf-8?q?St=C3=A9phane_Grosjean?= , Robert Nawrath , Minh Le , Duy Nguyen , linux-can@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2244; i=mailhol@kernel.org; h=from:subject:message-id; bh=70CWolPIlOgPwhAb0qjq4AkLhlgahxoMh2KXdI+DFHM=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBkHRV5NzttnIXh4W3bzMqH9EyKM/vXZ9zUcXee4ji8l9 yBb0NWFHaUsDGJcDLJiiizLyjm5FToKvcMO/bWEmcPKBDKEgYtTACYSPJOR4ffrnrb9q0ryju76 +k+9I3flXBn5kN5043z9etNJfbxnLBkZ7ho5p/mwPP/pH3Nzqsr00/cZ0oPeuj7bOuHy9V++956 6swMA X-Developer-Key: i=mailhol@kernel.org; a=openpgp; fpr=ED8F700574E67F20E574E8E2AB5FEB886DBB99C2 Add can_bittiming_fill_info() to factorise the logic when filling the bittiming information for Classical CAN and CAN FD. This function will be reused later on for CAN XL. Signed-off-by: Vincent Mailhol --- drivers/net/can/dev/netlink.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/drivers/net/can/dev/netlink.c b/drivers/net/can/dev/netlink.c index c30920761d25871ac2e73a56a54333c521b4f9d8..e2f26898b83be8df8d2c4d0cd64= b505f3c4a9b7d 100644 --- a/drivers/net/can/dev/netlink.c +++ b/drivers/net/can/dev/netlink.c @@ -559,6 +559,14 @@ static size_t can_get_size(const struct net_device *de= v) return size; } =20 +static int can_bittiming_fill_info(struct sk_buff *skb, int ifla_can_bitti= ming, + struct can_bittiming *bittiming) +{ + return bittiming->bitrate !=3D CAN_BITRATE_UNSET && + bittiming->bitrate !=3D CAN_BITRATE_UNKNOWN && + nla_put(skb, ifla_can_bittiming, sizeof(*bittiming), bittiming); +} + static int can_tdc_fill_info(struct sk_buff *skb, const struct net_device = *dev) { struct nlattr *nest; @@ -641,10 +649,8 @@ static int can_fill_info(struct sk_buff *skb, const st= ruct net_device *dev) if (priv->do_get_state) priv->do_get_state(dev, &state); =20 - if ((priv->bittiming.bitrate !=3D CAN_BITRATE_UNSET && - priv->bittiming.bitrate !=3D CAN_BITRATE_UNKNOWN && - nla_put(skb, IFLA_CAN_BITTIMING, - sizeof(priv->bittiming), &priv->bittiming)) || + if (can_bittiming_fill_info(skb, IFLA_CAN_BITTIMING, + &priv->bittiming) || =20 (priv->bittiming_const && nla_put(skb, IFLA_CAN_BITTIMING_CONST, @@ -659,9 +665,8 @@ static int can_fill_info(struct sk_buff *skb, const str= uct net_device *dev) !priv->do_get_berr_counter(dev, &bec) && nla_put(skb, IFLA_CAN_BERR_COUNTER, sizeof(bec), &bec)) || =20 - (priv->fd.data_bittiming.bitrate && - nla_put(skb, IFLA_CAN_DATA_BITTIMING, - sizeof(priv->fd.data_bittiming), &priv->fd.data_bittiming)) || + can_bittiming_fill_info(skb, IFLA_CAN_DATA_BITTIMING, + &priv->fd.data_bittiming) || =20 (priv->fd.data_bittiming_const && nla_put(skb, IFLA_CAN_DATA_BITTIMING_CONST, --=20 2.49.1 From nobody Thu Oct 2 22:39:30 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 2532630C378; Wed, 10 Sep 2025 06:05:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757484310; cv=none; b=otBUVvp4KUH6RYYlnFsfE1wSR0WbxfxoFZL6RPQde5XXU6i1yp88cKEkfciWTTLgd7ohYPR5SIqXLSC4lW0TLOjGArlaWeYJmLuan1Z/hcqst6a/+X2yfBUv+LULUXzEZxQFQ7UxjL4lGMcc4SLXhRI+Otfm0mMzV6IIfgMcsT4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757484310; c=relaxed/simple; bh=929EtOm6sQD4/p82XQBc5sAI4DNI3zMGcd+VcIf3Fp4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=FHnsdR0Tpz8uRMZP9pn+rMcPj7IfvcEiflaLKR+/E8hYk8BTmOUpQgsuvOZAU/PxSL7bnt/cxRVb2Dz8OF3JC0w3PIlTcxTTlwWaVph/vqRuMvzFU6m92AnGJ6lMEk61xaS47PPWKtnEAdvBl4FqefReBuHLR+UsMyX516m5LkU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=QWXnwgdM; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="QWXnwgdM" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 719F8C4CEFA; Wed, 10 Sep 2025 06:05:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1757484309; bh=929EtOm6sQD4/p82XQBc5sAI4DNI3zMGcd+VcIf3Fp4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=QWXnwgdMyeFG9HT9PoBcDVzfR+rP6ISiu0CM9E5cY5bCK/fTZ1mGDXpZDBXKYK0e2 sapzHcgscSTlLi8cAOzlrksM/6GniM9HP5LIiImeY/s3EGG/83MOau6TqDGuyO9bbR yQ3lnDd8pA6i3PdoGu9SDKNjfH/FfukcZtr09a0gzkJBUWyewTuYa5Egg1otZcFlcn bWIJnV8D36+L8/jw0a6k91IolcnaemKtyoiG86y+Hz3Dtt6iKkc+fxiEwvqUU/Vm1q HBU1U6i0ICX1neX2zvNjXZDVPna4NPAuDlx2zxR0F3Du2iRn2duHEbm/Zd7wkDdqWU m7DQ0rrxzejSA== From: Vincent Mailhol Date: Wed, 10 Sep 2025 15:03:40 +0900 Subject: [PATCH v2 15/20] can: netlink: add can_bittiming_const_fill_info() 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: <20250910-canxl-netlink-prep-v2-15-f128d4083721@kernel.org> References: <20250910-canxl-netlink-prep-v2-0-f128d4083721@kernel.org> In-Reply-To: <20250910-canxl-netlink-prep-v2-0-f128d4083721@kernel.org> To: Marc Kleine-Budde , Oliver Hartkopp Cc: Vincent Mailhol , =?utf-8?q?St=C3=A9phane_Grosjean?= , Robert Nawrath , Minh Le , Duy Nguyen , linux-can@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2383; i=mailhol@kernel.org; h=from:subject:message-id; bh=929EtOm6sQD4/p82XQBc5sAI4DNI3zMGcd+VcIf3Fp4=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBkHRd52qGdf9xc26mUP/9K4Uu3Yx64iSen2L7WbqjSqd zlp2+zvKGVhEONikBVTZFlWzsmt0FHoHXboryXMHFYmkCEMXJwCMBGRPkaGv/0+R7xmX/Vi2V2x g2Gtu+Fj3UaW7NDb5zrm+32bLOd/iZFhtuR3pgge127VskOnl6dLll8riWGP2FK67wwjx1KzvdL sAA== X-Developer-Key: i=mailhol@kernel.org; a=openpgp; fpr=ED8F700574E67F20E574E8E2AB5FEB886DBB99C2 Add function can_bittiming_fill_info() to factorise the logic when filling the bittiming constant information for Classical CAN and CAN FD. This function will be reused later on for CAN XL. Signed-off-by: Vincent Mailhol --- drivers/net/can/dev/netlink.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/drivers/net/can/dev/netlink.c b/drivers/net/can/dev/netlink.c index e2f26898b83be8df8d2c4d0cd64b505f3c4a9b7d..39b7b0a0f5f48ce1765c201e7c3= e56a85fd58740 100644 --- a/drivers/net/can/dev/netlink.c +++ b/drivers/net/can/dev/netlink.c @@ -567,6 +567,15 @@ static int can_bittiming_fill_info(struct sk_buff *skb= , int ifla_can_bittiming, nla_put(skb, ifla_can_bittiming, sizeof(*bittiming), bittiming); } =20 +static int can_bittiming_const_fill_info(struct sk_buff *skb, + int ifla_can_bittiming_const, + const struct can_bittiming_const *bittiming_const) +{ + return bittiming_const && + nla_put(skb, ifla_can_bittiming_const, + sizeof(*bittiming_const), bittiming_const); +} + static int can_tdc_fill_info(struct sk_buff *skb, const struct net_device = *dev) { struct nlattr *nest; @@ -652,9 +661,8 @@ static int can_fill_info(struct sk_buff *skb, const str= uct net_device *dev) if (can_bittiming_fill_info(skb, IFLA_CAN_BITTIMING, &priv->bittiming) || =20 - (priv->bittiming_const && - nla_put(skb, IFLA_CAN_BITTIMING_CONST, - sizeof(*priv->bittiming_const), priv->bittiming_const)) || + can_bittiming_const_fill_info(skb, IFLA_CAN_BITTIMING_CONST, + priv->bittiming_const) || =20 nla_put(skb, IFLA_CAN_CLOCK, sizeof(priv->clock), &priv->clock) || nla_put_u32(skb, IFLA_CAN_STATE, state) || @@ -668,10 +676,8 @@ static int can_fill_info(struct sk_buff *skb, const st= ruct net_device *dev) can_bittiming_fill_info(skb, IFLA_CAN_DATA_BITTIMING, &priv->fd.data_bittiming) || =20 - (priv->fd.data_bittiming_const && - nla_put(skb, IFLA_CAN_DATA_BITTIMING_CONST, - sizeof(*priv->fd.data_bittiming_const), - priv->fd.data_bittiming_const)) || + can_bittiming_const_fill_info(skb, IFLA_CAN_DATA_BITTIMING_CONST, + priv->fd.data_bittiming_const) || =20 (priv->termination_const && (nla_put_u16(skb, IFLA_CAN_TERMINATION, priv->termination) || --=20 2.49.1 From nobody Thu Oct 2 22:39:30 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 B3D2730C62E; Wed, 10 Sep 2025 06:05:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757484311; cv=none; b=EjhOzA86myAuNI7PbWQ3EGXxUyGn1v7JbRM5fj47yp+7Itoe3H8I+2whP8FTq6X7m40yxUGJbivnQNHcFM5SRQ4cckLL9+qVevyCRM04Q4G47BfiWiC3Xu2pHMRu/Z+1kHXGU6kxZf2S5kHdFfRzZQ5bZw//uO09ybksZpT9lPs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757484311; c=relaxed/simple; bh=TwzsJia/6Wex+hAdgCL3nGxx7qXiznIvPUUS1MM0RVM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ty0J38i2UdVmBVcq2XZpuyyVBfjCCthtkPZ77oadQDw+y++KFocn1e8xfLlVATuvOSgBVdCjtQk5Z3iPBkILijS8e5K9oqnBsTrO//DdL8DczppAA2/vq8AGmlHLl3/P4QQrQesWTJjN1lgiRydNtS00aQqadwJvk6A+qKZVaoM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=DdlfD03h; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="DdlfD03h" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 046BFC4CEF0; Wed, 10 Sep 2025 06:05:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1757484311; bh=TwzsJia/6Wex+hAdgCL3nGxx7qXiznIvPUUS1MM0RVM=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=DdlfD03hEupONDiJMXVXoUI+XltpS0LUedR2TFkW4DkdcYYDlucBBGSQPY/IRAanu oR6Elcuv9McCBj61BexcUmhCrLsP2WLAR4ociLO0JT7evPBmwa6JBLQKQm3MU9mJjY 3rKjLJs+B66Lpg00NqzFaFtu9tGz678tcvDYLmJ0sPdo2re36cUR3KgUNfCB3Eu4+I GG8eJoSrGDHmm+4pEyTSgbIA1i25g4V3WHzgkLbkJECC1AhUspf1SxuCV0StY6bfRD BKxz5QyOXPPeyUDfS/hcZcXfJxqMN1l+OmaRwifQmN9MdfuzX5HQG5pGoqT3f3Q/JI MUamijbL2gdwQ== From: Vincent Mailhol Date: Wed, 10 Sep 2025 15:03:41 +0900 Subject: [PATCH v2 16/20] can: netlink: add can_bitrate_const_fill_info() 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: <20250910-canxl-netlink-prep-v2-16-f128d4083721@kernel.org> References: <20250910-canxl-netlink-prep-v2-0-f128d4083721@kernel.org> In-Reply-To: <20250910-canxl-netlink-prep-v2-0-f128d4083721@kernel.org> To: Marc Kleine-Budde , Oliver Hartkopp Cc: Vincent Mailhol , =?utf-8?q?St=C3=A9phane_Grosjean?= , Robert Nawrath , Minh Le , Duy Nguyen , linux-can@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2111; i=mailhol@kernel.org; h=from:subject:message-id; bh=TwzsJia/6Wex+hAdgCL3nGxx7qXiznIvPUUS1MM0RVM=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBkHRd4ffJd+9oxZ8IrI5+I/1vEkMbWs6ixtyytqN/kRF CHi8PhERykLgxgXg6yYIsuyck5uhY5C77BDfy1h5rAygQxh4OIUgInI/GL4X/x3u/cdtRaHPVwn fj04VrOa3/h2vKDtt8953asZmqZ7zGRkmLasdkPGRu7Epyclduy6/WLr//yvF6S2BkWt/73kuun nlewA X-Developer-Key: i=mailhol@kernel.org; a=openpgp; fpr=ED8F700574E67F20E574E8E2AB5FEB886DBB99C2 Add can_bitrate_const_fill_info() to factorise the logic when filling the bitrate constant information for Classical CAN and CAN FD. This function will be reused later on for CAN XL. Signed-off-by: Vincent Mailhol --- drivers/net/can/dev/netlink.c | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/drivers/net/can/dev/netlink.c b/drivers/net/can/dev/netlink.c index 39b7b0a0f5f48ce1765c201e7c3e56a85fd58740..d79a1559ca76dbff8dd1043bfd9= 64fbbe82b1b9c 100644 --- a/drivers/net/can/dev/netlink.c +++ b/drivers/net/can/dev/netlink.c @@ -576,6 +576,15 @@ static int can_bittiming_const_fill_info(struct sk_buf= f *skb, sizeof(*bittiming_const), bittiming_const); } =20 +static int can_bitrate_const_fill_info(struct sk_buff *skb, + int ifla_can_bitrate_const, + const u32 *bitrate_const, unsigned int cnt) +{ + return bitrate_const && + nla_put(skb, ifla_can_bitrate_const, + sizeof(*bitrate_const) * cnt, bitrate_const); +} + static int can_tdc_fill_info(struct sk_buff *skb, const struct net_device = *dev) { struct nlattr *nest; @@ -686,17 +695,13 @@ static int can_fill_info(struct sk_buff *skb, const s= truct net_device *dev) priv->termination_const_cnt, priv->termination_const))) || =20 - (priv->bitrate_const && - nla_put(skb, IFLA_CAN_BITRATE_CONST, - sizeof(*priv->bitrate_const) * - priv->bitrate_const_cnt, - priv->bitrate_const)) || + can_bitrate_const_fill_info(skb, IFLA_CAN_BITRATE_CONST, + priv->bitrate_const, + priv->bitrate_const_cnt) || =20 - (priv->fd.data_bitrate_const && - nla_put(skb, IFLA_CAN_DATA_BITRATE_CONST, - sizeof(*priv->fd.data_bitrate_const) * - priv->fd.data_bitrate_const_cnt, - priv->fd.data_bitrate_const)) || + can_bitrate_const_fill_info(skb, IFLA_CAN_DATA_BITRATE_CONST, + priv->fd.data_bitrate_const, + priv->fd.data_bitrate_const_cnt) || =20 (nla_put(skb, IFLA_CAN_BITRATE_MAX, sizeof(priv->bitrate_max), --=20 2.49.1 From nobody Thu Oct 2 22:39:30 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 4104E30597C; Wed, 10 Sep 2025 06:05:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757484314; cv=none; b=OcwMb3zTq7SBo0HlJaRvE5OIh61W7jpJaDZuPKvkmLtz4Gl5wv4yN/n/zMmXJl/4IBTxtY3BnAsGg9GIaZG/PJzEGfSx8yF9UszbdovoeYZrc7d8+1GSCFbV9wJf887WXRr2DK9wsHgMkICfmOdljbBfOA+pkIKT+T5UUsB1NFo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757484314; c=relaxed/simple; bh=juwFCjhZpA2PEpp2usDTBZQoUm5o6gL48EyfCnh03/o=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=G81K82b/fYYzzbodAMjMMr9aY/oBBRWmrhWU/XgxRvGfSzs0cSTrRYHVy9ximGaQl1UICNZY/cyYnLfoACugBhTn3QSPwJo2U/bl89HBI7YYZ+znJOUodiLjLbFJy/9DyjBE3nT/jIyFKzX9SB8GFpj3t9/PCxVfeApYFnXGZ1w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=To6jQbc2; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="To6jQbc2" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8B49CC4CEF5; Wed, 10 Sep 2025 06:05:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1757484312; bh=juwFCjhZpA2PEpp2usDTBZQoUm5o6gL48EyfCnh03/o=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=To6jQbc2uZy+v9DF5w1G48ogq3RhhQ0Gm3W3KNGfVw58+EDqPFAplHeb7QbcgkjBT WpkXHVGKQzo4ZcLy33jXvoIhlSpaw7HDTd4O1YLPvVivekAdaMG3xpxO/mWJ1swwXT bm4B3BsFPeMJettoeNEBMe90uZg9ft31A09gpWk67nk7KJbPz7aSwhtrp/SDG5uPcY WC10pw5H3sHMeu03uMkCoRPke5UOG5xNr9RQwRCEFGCJYbaaGLa1SkhXYJZbc81Cv1 TPNSoLn8l5OECAqCb7oxjedv/WnIFrpR8wjnyW1MgxcpchJlRwdyglnMMQ0D+Wy4XK Vvra2aUley+dQ== From: Vincent Mailhol Date: Wed, 10 Sep 2025 15:03:42 +0900 Subject: [PATCH v2 17/20] can: netlink: make can_tdc_fill_info() FD agnostic 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: <20250910-canxl-netlink-prep-v2-17-f128d4083721@kernel.org> References: <20250910-canxl-netlink-prep-v2-0-f128d4083721@kernel.org> In-Reply-To: <20250910-canxl-netlink-prep-v2-0-f128d4083721@kernel.org> To: Marc Kleine-Budde , Oliver Hartkopp Cc: Vincent Mailhol , =?utf-8?q?St=C3=A9phane_Grosjean?= , Robert Nawrath , Minh Le , Duy Nguyen , linux-can@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3461; i=mailhol@kernel.org; h=from:subject:message-id; bh=juwFCjhZpA2PEpp2usDTBZQoUm5o6gL48EyfCnh03/o=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBkHRT59tt+yJ6e5d8mDs8UhsRt8Hr7WL3Jem358r7jk9 5vNHoKTO0pZGMS4GGTFFFmWlXNyK3QUeocd+msJM4eVCWQIAxenAEykS4rhn9KiEhH15d0KN48t enJPaNk9zkM5Hi3OnLXN10/smatT/IiRoWF+TouBtpCmypUjZqWlL9X2Kec0vPO7eP6r/iXWLPc 2PgA= X-Developer-Key: i=mailhol@kernel.org; a=openpgp; fpr=ED8F700574E67F20E574E8E2AB5FEB886DBB99C2 can_tdc_fill_info() depends on some variables which are specific to CAN FD. Move these to the function parameters list so that, later on, this function can be reused for the CAN XL TDC. Signed-off-by: Vincent Mailhol --- Changelog: v1 -> v2: - Change WARN_ON(1) into return -EOPNOTSUPP to suppress a gcc warning. Link: https://lore.kernel.org/linux-can/202509050541.1FKRbqOi-lkp@intel= .com/ RFC -> v1: - Just pass the IFLA index instead of passing each argument individually. Instead, derive these as local variables depending on whethe the IFLA index is IFLA_CAN_TDC or IFLA_CAN_XL_TDC. --- drivers/net/can/dev/netlink.c | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/drivers/net/can/dev/netlink.c b/drivers/net/can/dev/netlink.c index d79a1559ca76dbff8dd1043bfd964fbbe82b1b9c..8c0830fb2d1e729a65aeb8a2eaa= 0db83959a71a1 100644 --- a/drivers/net/can/dev/netlink.c +++ b/drivers/net/can/dev/netlink.c @@ -585,21 +585,34 @@ static int can_bitrate_const_fill_info(struct sk_buff= *skb, sizeof(*bitrate_const) * cnt, bitrate_const); } =20 -static int can_tdc_fill_info(struct sk_buff *skb, const struct net_device = *dev) +static int can_tdc_fill_info(struct sk_buff *skb, const struct net_device = *dev, + int ifla_can_tdc) { - struct nlattr *nest; struct can_priv *priv =3D netdev_priv(dev); - struct can_tdc *tdc =3D &priv->fd.tdc; - const struct can_tdc_const *tdc_const =3D priv->fd.tdc_const; + struct data_bittiming_params *dbt_params; + const struct can_tdc_const *tdc_const; + struct can_tdc *tdc; + struct nlattr *nest; + bool tdc_is_enabled, tdc_manual; + + if (ifla_can_tdc =3D=3D IFLA_CAN_TDC) { + dbt_params =3D &priv->fd; + tdc_is_enabled =3D can_fd_tdc_is_enabled(priv); + tdc_manual =3D priv->ctrlmode & CAN_CTRLMODE_TDC_MANUAL; + } else { + return -EOPNOTSUPP; /* Place holder for CAN XL */ + } + tdc_const =3D dbt_params->tdc_const; + tdc =3D &dbt_params->tdc; =20 if (!tdc_const) return 0; =20 - nest =3D nla_nest_start(skb, IFLA_CAN_TDC); + nest =3D nla_nest_start(skb, ifla_can_tdc); if (!nest) return -EMSGSIZE; =20 - if (priv->ctrlmode_supported & CAN_CTRLMODE_TDC_MANUAL && + if (tdc_manual && (nla_put_u32(skb, IFLA_CAN_TDC_TDCV_MIN, tdc_const->tdcv_min) || nla_put_u32(skb, IFLA_CAN_TDC_TDCV_MAX, tdc_const->tdcv_max))) goto err_cancel; @@ -611,15 +624,15 @@ static int can_tdc_fill_info(struct sk_buff *skb, con= st struct net_device *dev) nla_put_u32(skb, IFLA_CAN_TDC_TDCF_MAX, tdc_const->tdcf_max))) goto err_cancel; =20 - if (can_fd_tdc_is_enabled(priv)) { + if (tdc_is_enabled) { u32 tdcv; int err =3D -EINVAL; =20 - if (priv->ctrlmode & CAN_CTRLMODE_TDC_MANUAL) { + if (tdc_manual) { tdcv =3D tdc->tdcv; err =3D 0; - } else if (priv->fd.do_get_auto_tdcv) { - err =3D priv->fd.do_get_auto_tdcv(dev, &tdcv); + } else if (dbt_params->do_get_auto_tdcv) { + err =3D dbt_params->do_get_auto_tdcv(dev, &tdcv); } if (!err && nla_put_u32(skb, IFLA_CAN_TDC_TDCV, tdcv)) goto err_cancel; @@ -707,7 +720,7 @@ static int can_fill_info(struct sk_buff *skb, const str= uct net_device *dev) sizeof(priv->bitrate_max), &priv->bitrate_max)) || =20 - can_tdc_fill_info(skb, dev) || + can_tdc_fill_info(skb, dev, IFLA_CAN_TDC) || =20 can_ctrlmode_ext_fill_info(skb, priv) ) --=20 2.49.1 From nobody Thu Oct 2 22:39:30 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 D18A230DD30; Wed, 10 Sep 2025 06:05:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757484315; cv=none; b=Zxe0R+1uZX+WBkYlGBUFQr+3KK3RBE+EwEY43uZKJjokM0dCNqEgGUhFpYsDIuvjp1bQC6Ju6yu3ZzpR1+VOG5ZcSEwkhqlRdZBY+Nhvq5G/YnRswhqr2Zoo+34cCq7gHHsZI15Y/0O1iVCe7CyfAuHDf6OUNZVEIP7te4FVxLk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757484315; c=relaxed/simple; bh=gNhjrSZLMYXMYOaNsgMgxJ/NxYyO1ZyY1MCboW6u/EQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=POPthnfLRswIEDxsnRlGp/wTpmeNIzLBZcvpBh1Q1lLvZhAfcdKG+3AJERCSbzAEyjIX9KeaFZ7UfTV4l63DfVK1Q7X5zNLGFVu/L5laG92e1bqBVqstOKNUY1L0C29SWAhs1tcdtrEQOp1S/sDcH4Ptw9Jv3ppitHpsYacyfUo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=CdhYQNbi; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="CdhYQNbi" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1E27CC4CEF0; Wed, 10 Sep 2025 06:05:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1757484314; bh=gNhjrSZLMYXMYOaNsgMgxJ/NxYyO1ZyY1MCboW6u/EQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=CdhYQNbit0lp56vsDzdNRcqp0sjKsLui/24GC/doGn9cCyE6a0A45fZcdeGefDwVS xjZE3wMDgLwNAQOMvURXGw0WO63o0tt5g+lhGyxsbjvt1tRdgU2XyKnsDYifLAQyDK sUV3ARGeYl5q5RBPdZyg7h0IOLR3UgUl554iIx2ZdlgBm2C06C4u/LO20C7lV+vHn7 BBDpuWe4M90ffUWbPa/NxVl027WnsbYzOrWnBvY7Xwv0U8oF6bhm4tNMvpl7Dty5tv C0bMhJ+kMAo+A4munQYSTBcqw1YLve0v57xDCLRxi+priDFrnCHFqaWs5Edgh76OLo 6DHqLUGYog9JA== From: Vincent Mailhol Date: Wed, 10 Sep 2025 15:03:43 +0900 Subject: [PATCH v2 18/20] can: calc_bittiming: make can_calc_tdco() FD agnostic 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: <20250910-canxl-netlink-prep-v2-18-f128d4083721@kernel.org> References: <20250910-canxl-netlink-prep-v2-0-f128d4083721@kernel.org> In-Reply-To: <20250910-canxl-netlink-prep-v2-0-f128d4083721@kernel.org> To: Marc Kleine-Budde , Oliver Hartkopp Cc: Vincent Mailhol , =?utf-8?q?St=C3=A9phane_Grosjean?= , Robert Nawrath , Minh Le , Duy Nguyen , linux-can@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3882; i=mailhol@kernel.org; h=from:subject:message-id; bh=gNhjrSZLMYXMYOaNsgMgxJ/NxYyO1ZyY1MCboW6u/EQ=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBkHRb5sd1uoYzGn7TgTt0X2h5293Mdqfnv+31UmpVH8V Syg+E5JRykLgxgXg6yYIsuyck5uhY5C77BDfy1h5rAygQxh4OIUgIkknmJkWN37WPyHgJNy7847 uj/mPP3cmXB17afTbCl1J18/5ih9YMDI0PfKe+Gnpfb6+pNOLD/Yl7vSbNHRhQc+zHHOeXvr4GO dC/wA X-Developer-Key: i=mailhol@kernel.org; a=openpgp; fpr=ED8F700574E67F20E574E8E2AB5FEB886DBB99C2 can_calc_tdco() uses the CAN_CTRLMODE_FD_TDC_MASK and CAN_CTRLMODE_TDC_AUTO macros making it specific to CAN FD. Add the tdc mask to the function parameter list. The value of the tdc auto flag can then be derived from that mask and stored in a local variable. This way, the function becomes CAN FD agnostic and can be reused later on for the CAN XL TDC. Signed-off-by: Vincent Mailhol --- Changelog: RFC -> v1: - new patch. I overlooked this in the RFC and the CAN XL's TDC was broken because of that. --- drivers/net/can/dev/calc_bittiming.c | 10 ++++++---- drivers/net/can/dev/netlink.c | 2 +- include/linux/can/bittiming.h | 4 ++-- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/drivers/net/can/dev/calc_bittiming.c b/drivers/net/can/dev/cal= c_bittiming.c index a94bd67c670c4801344e1fed6372d0182c46271f..394d6974f48151230510d7f43c8= 0d75e1429dd37 100644 --- a/drivers/net/can/dev/calc_bittiming.c +++ b/drivers/net/can/dev/calc_bittiming.c @@ -173,13 +173,15 @@ int can_calc_bittiming(const struct net_device *dev, = struct can_bittiming *bt, =20 void can_calc_tdco(struct can_tdc *tdc, const struct can_tdc_const *tdc_co= nst, const struct can_bittiming *dbt, - u32 *ctrlmode, u32 ctrlmode_supported) + u32 tdc_mask, u32 *ctrlmode, u32 ctrlmode_supported) =20 { - if (!tdc_const || !(ctrlmode_supported & CAN_CTRLMODE_TDC_AUTO)) + u32 tdc_auto =3D tdc_mask & CAN_CTRLMODE_TDC_AUTO_MASK; + + if (!tdc_const || !(ctrlmode_supported & tdc_auto)) return; =20 - *ctrlmode &=3D ~CAN_CTRLMODE_FD_TDC_MASK; + *ctrlmode &=3D ~tdc_mask; =20 /* As specified in ISO 11898-1 section 11.3.3 "Transmitter * delay compensation" (TDC) is only applicable if data BRP is @@ -193,6 +195,6 @@ void can_calc_tdco(struct can_tdc *tdc, const struct ca= n_tdc_const *tdc_const, if (sample_point_in_tc < tdc_const->tdco_min) return; tdc->tdco =3D min(sample_point_in_tc, tdc_const->tdco_max); - *ctrlmode |=3D CAN_CTRLMODE_TDC_AUTO; + *ctrlmode |=3D tdc_auto; } } diff --git a/drivers/net/can/dev/netlink.c b/drivers/net/can/dev/netlink.c index 8c0830fb2d1e729a65aeb8a2eaa0db83959a71a1..48a74808dbc881d1d46ff7d03d3= 47ddb8af3d16c 100644 --- a/drivers/net/can/dev/netlink.c +++ b/drivers/net/can/dev/netlink.c @@ -341,7 +341,7 @@ static int can_dbt_changelink(struct net_device *dev, s= truct nlattr *data[], * do calculation */ can_calc_tdco(&dbt_params->tdc, dbt_params->tdc_const, &dbt, - &priv->ctrlmode, priv->ctrlmode_supported); + tdc_mask, &priv->ctrlmode, priv->ctrlmode_supported); } /* else: both CAN_CTRLMODE_TDC_{AUTO,MANUAL} are explicitly * turned off. TDC is disabled: do nothing */ diff --git a/include/linux/can/bittiming.h b/include/linux/can/bittiming.h index 71f839c3f0325b2a496a4bc447044a4853541338..d30816dd93c7082c774ca4c01ee= 42465cd042ca0 100644 --- a/include/linux/can/bittiming.h +++ b/include/linux/can/bittiming.h @@ -135,7 +135,7 @@ int can_calc_bittiming(const struct net_device *dev, st= ruct can_bittiming *bt, =20 void can_calc_tdco(struct can_tdc *tdc, const struct can_tdc_const *tdc_co= nst, const struct can_bittiming *dbt, - u32 *ctrlmode, u32 ctrlmode_supported); + u32 tdc_mask, u32 *ctrlmode, u32 ctrlmode_supported); #else /* !CONFIG_CAN_CALC_BITTIMING */ static inline int can_calc_bittiming(const struct net_device *dev, struct can_bittiming *bt, @@ -148,7 +148,7 @@ can_calc_bittiming(const struct net_device *dev, struct= can_bittiming *bt, static inline void can_calc_tdco(struct can_tdc *tdc, const struct can_tdc_const *tdc_const, const struct can_bittiming *dbt, - u32 *ctrlmode, u32 ctrlmode_supported) + u32 tdc_mask, u32 *ctrlmode, u32 ctrlmode_supported) { } #endif /* CONFIG_CAN_CALC_BITTIMING */ --=20 2.49.1 From nobody Thu Oct 2 22:39:30 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 03B7D30DD38; Wed, 10 Sep 2025 06:05:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757484316; cv=none; b=KbwxCzZaCGA9MQR5hNEq0p5pqZZIwXNmJo1LiIZHoMosSHOzOLRoUREYhSKdm6WjRRZ3On1KR5RnL960F1Y9wWVW2oykoU+D+uAWGN+69TdaOF1dGKAW2ijCt2razZTbe0CwqNz0XZNnOuWnFLeGC4DnHs4OcFbQForSBUBVcg0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757484316; c=relaxed/simple; bh=6hC3+gNUpUdXFVXOXPAVa6F6CDMtqk3DayLs5ctqINQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=WQkg263DJa4PKdlPIp50wLVX833osuW6pd5asYzdUHJ+bEA+pCALLs7pyWfnIq7ITsSFpwjLQ3FWX/tZytASOBDGYHJKCiz/XhbaAympwIlPqH/KAbDuTBAU3f5F/2uSlV61rdeMx+MneLWH4DoBvOaHdBoMHN2DKrPxmgACzR0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=W5fejeCG; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="W5fejeCG" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A58C4C4AF0B; Wed, 10 Sep 2025 06:05:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1757484315; bh=6hC3+gNUpUdXFVXOXPAVa6F6CDMtqk3DayLs5ctqINQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=W5fejeCG+SBgkv7ZbxtfMYPrSx1boxzV9efguhTW8EOkJICYOAoiTB/lk+t8XemLp 1B0xbMvzzHvhmWG9wH7tFf/ZqVRqRxAhwDREMfa+gkeoiovDWZiygl1uuZHxza40p5 fehLWc+TRP0Wil5cLbA5CsoF24GULRbyKMoEXagbZHE8WtTmNOj1WtNifqGT655cwK ji8JJuXAl0HnMYlrT4C01afCLyCOmmXVrhZdcSdnsDCUzP+xYffHow/eONZox2wiBK QVkXa5CKZWE0K6VssVvX4VX7wTL0ZeBbx3Rx7jUs1OJZ8f8RNPHHhPjKZKmE8AmBrf ZbYVPD0fRCEZg== From: Vincent Mailhol Date: Wed, 10 Sep 2025 15:03:44 +0900 Subject: [PATCH v2 19/20] can: dev: add can_get_ctrlmode_str() 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: <20250910-canxl-netlink-prep-v2-19-f128d4083721@kernel.org> References: <20250910-canxl-netlink-prep-v2-0-f128d4083721@kernel.org> In-Reply-To: <20250910-canxl-netlink-prep-v2-0-f128d4083721@kernel.org> To: Marc Kleine-Budde , Oliver Hartkopp Cc: Vincent Mailhol , =?utf-8?q?St=C3=A9phane_Grosjean?= , Robert Nawrath , Minh Le , Duy Nguyen , linux-can@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2864; i=mailhol@kernel.org; h=from:subject:message-id; bh=6hC3+gNUpUdXFVXOXPAVa6F6CDMtqk3DayLs5ctqINQ=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBkHRb6nTNPReWry5d+h28yeB9993fjKJHNl+16d4H/N6 7gmrxI721HKwiDGxSArpsiyrJyTW6Gj0Dvs0F9LmDmsTCBDGLg4BWAiZicYGc5a+5wxczr3xPuK mMi5NuYdBy588LA3sl+bPENRoaVMVZ3hD8f5xw7OQVtrXxg/eb2to0OWZfqqH9VrtPn1l+2o6V2 9jAkA X-Developer-Key: i=mailhol@kernel.org; a=openpgp; fpr=ED8F700574E67F20E574E8E2AB5FEB886DBB99C2 In an effort to give more human readable messages when errors occur because of conflicting options, it can be useful to convert the CAN control mode flags into text. Add a function which converts the first set CAN control mode into a human readable string. The reason to only convert the first one is to simplify edge cases: imagine that there are several invalid control modes, we would just return the first invalid one to the user, thus not having to handle complex string concatenation. The user can then solve the first problem, call the netlink interface again and see the next issue. People who wish to enumerate all the control modes can still do so by, for example, using this new function in a for_each_set_bit() loop. Signed-off-by: Vincent Mailhol --- drivers/net/can/dev/dev.c | 33 +++++++++++++++++++++++++++++++++ include/linux/can/dev.h | 2 ++ 2 files changed, 35 insertions(+) diff --git a/drivers/net/can/dev/dev.c b/drivers/net/can/dev/dev.c index 3913971125de0ab16b4ad9f36712954141014ddf..d9368ca828fffbda45a19af78e4= f8271acfba6c4 100644 --- a/drivers/net/can/dev/dev.c +++ b/drivers/net/can/dev/dev.c @@ -88,6 +88,39 @@ const char *can_get_state_str(const enum can_state state) } EXPORT_SYMBOL_GPL(can_get_state_str); =20 +const char *can_get_ctrlmode_str(u32 ctrlmode) +{ + switch (ctrlmode & ~(ctrlmode - 1)) { + case 0: + return "none"; + case CAN_CTRLMODE_LOOPBACK: + return "loopback"; + case CAN_CTRLMODE_LISTENONLY: + return "listen-only"; + case CAN_CTRLMODE_3_SAMPLES: + return "triple-sampling"; + case CAN_CTRLMODE_ONE_SHOT: + return "one-shot"; + case CAN_CTRLMODE_BERR_REPORTING: + return "berr-reporting"; + case CAN_CTRLMODE_FD: + return "fd"; + case CAN_CTRLMODE_PRESUME_ACK: + return "presume-ack"; + case CAN_CTRLMODE_FD_NON_ISO: + return "fd-non-iso"; + case CAN_CTRLMODE_CC_LEN8_DLC: + return "cc-len8-dlc"; + case CAN_CTRLMODE_TDC_AUTO: + return "fd-tdc-auto"; + case CAN_CTRLMODE_TDC_MANUAL: + return "fd-tdc-manual"; + default: + return ""; + } +} +EXPORT_SYMBOL_GPL(can_get_ctrlmode_str); + static enum can_state can_state_err_to_state(u16 err) { if (err < CAN_ERROR_WARNING_THRESHOLD) diff --git a/include/linux/can/dev.h b/include/linux/can/dev.h index 55aaadaacf68f940fa1b71f7c438e68b84080292..27690a8bea44d334bf1ac8f779a= e36189e0e1493 100644 --- a/include/linux/can/dev.h +++ b/include/linux/can/dev.h @@ -159,6 +159,8 @@ int can_restart_now(struct net_device *dev); void can_bus_off(struct net_device *dev); =20 const char *can_get_state_str(const enum can_state state); +const char *can_get_ctrlmode_str(u32 ctrlmode); + void can_state_get_by_berr_counter(const struct net_device *dev, const struct can_berr_counter *bec, enum can_state *tx_state, --=20 2.49.1 From nobody Thu Oct 2 22:39:30 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 D69F630E0ED; Wed, 10 Sep 2025 06:05:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757484317; cv=none; b=Qzl1fn77vvH/FnJH1dRvfuxDxFgGaXepj6bghd58xcuDJhGxF0z/lZzTzagNOjuA5uh+zQPRjt0CVjON2EJUjZwL8LeEOCHrqSgejkffInH4f0x1OTISgmch1euR0xzsbJVWz0FXh3qIWq7PcJN2GL73u5pd1b4dk65Q40F3LtE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757484317; c=relaxed/simple; bh=7jkGwc8sJb5bE4Z0FuNn78xdbtlCemUTIWLBt8xL5Ps=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pl/NciGXP0vuCmHgMfkRfeV7gDS24nmvcrun3pphbgdlinBqVA9Hm5mZ1ag1X7oem4uJhAP2sUYtAsxN1cBfF2IU7o6yHnupQQi5iypiB8aVpO67Pp5FqtOHFRKzmcPLrITkZiDQtJwX+FXfzS+2PswE8Lwpk0szMSR+HFEMLrg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=fPd7Q+5s; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="fPd7Q+5s" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 38ADFC4CEFA; Wed, 10 Sep 2025 06:05:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1757484317; bh=7jkGwc8sJb5bE4Z0FuNn78xdbtlCemUTIWLBt8xL5Ps=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=fPd7Q+5sguJgA6pWJDPefhJ173WiMI3vpAEGMaCwsn3hYsjkt8hh+mmruxtgAJD6Q +e37IbDxB6Rj6YhAqKqc66ldOVSPbw+ww+k2g1wemvCygR3UXcCAZ5E2OHHJDvVO89 eJfCa7MFBFO2vrizaxJmj2JxGOTA75txbga4WYELDlqCkVEXVC6+e/+d4iuJ/rmA4Q 3hjf8WcO+6zS3c+0r4y01lN4qnwKSbb9H1vWN299Mo75qYMULUc9ATqUAWOustxoZD SdrhhErC237jwLbiC3DOwcLjrzW3JZqNHo68MFHWw8Q1kZctg7IMiMlaiEhOh3J+WO w0xHtAOX0ihpw== From: Vincent Mailhol Date: Wed, 10 Sep 2025 15:03:45 +0900 Subject: [PATCH v2 20/20] can: netlink: add userland error messages 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: <20250910-canxl-netlink-prep-v2-20-f128d4083721@kernel.org> References: <20250910-canxl-netlink-prep-v2-0-f128d4083721@kernel.org> In-Reply-To: <20250910-canxl-netlink-prep-v2-0-f128d4083721@kernel.org> To: Marc Kleine-Budde , Oliver Hartkopp Cc: Vincent Mailhol , =?utf-8?q?St=C3=A9phane_Grosjean?= , Robert Nawrath , Minh Le , Duy Nguyen , linux-can@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=6027; i=mailhol@kernel.org; h=from:subject:message-id; bh=7jkGwc8sJb5bE4Z0FuNn78xdbtlCemUTIWLBt8xL5Ps=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBkHRX49EJB6vOvW676kA7u/yjW/sK1uUF9cEvT5ouJH1 W1HHfg/dJSyMIhxMciKKbIsK+fkVugo9A479NcSZg4rE8gQBi5OAZhIxjtGht2yfGfsIxxj3k6Q dnaKmplcHvv30onEo5YzZqizaZlPW8nwP29WnfJ9PYkoodMTVnCX/frrpuOv6lHNFbfgaJzCdQd 7fgA= X-Developer-Key: i=mailhol@kernel.org; a=openpgp; fpr=ED8F700574E67F20E574E8E2AB5FEB886DBB99C2 Use NL_SET_ERR_MSG() and NL_SET_ERR_MSG_FMT() to return meaningful error messages to the userland whenever a -EOPNOTSUPP error is returned due to a failed validation of the CAN netlink arguments. Signed-off-by: Vincent Mailhol --- drivers/net/can/dev/netlink.c | 82 ++++++++++++++++++++++++++++++++-------= ---- 1 file changed, 62 insertions(+), 20 deletions(-) diff --git a/drivers/net/can/dev/netlink.c b/drivers/net/can/dev/netlink.c index 48a74808dbc881d1d46ff7d03d347ddb8af3d16c..d4f13701e719ca52e41188c7e6d= 989d00bc70073 100644 --- a/drivers/net/can/dev/netlink.c +++ b/drivers/net/can/dev/netlink.c @@ -63,15 +63,23 @@ static int can_validate_tdc(struct nlattr *data_tdc, bool tdc_auto =3D tdc_flags & CAN_CTRLMODE_TDC_AUTO_MASK; int err; =20 - /* CAN_CTRLMODE_TDC_{AUTO,MANUAL} are mutually exclusive */ - if (tdc_auto && tdc_manual) + if (tdc_auto && tdc_manual) { + NL_SET_ERR_MSG(extack, + "TDC manual and auto modes are mutually exclusive"); return -EOPNOTSUPP; + } =20 /* If one of the CAN_CTRLMODE_TDC_* flag is set then TDC * must be set and vice-versa */ - if ((tdc_auto || tdc_manual) !=3D !!data_tdc) + if ((tdc_auto || tdc_manual) && !data_tdc) { + NL_SET_ERR_MSG(extack, "TDC parameters are missing"); return -EOPNOTSUPP; + } + if (!(tdc_auto || tdc_manual) && data_tdc) { + NL_SET_ERR_MSG(extack, "TDC mode (auto or manual) is missing"); + return -EOPNOTSUPP; + } =20 /* If providing TDC parameters, at least TDCO is needed. TDCV * is needed if and only if CAN_CTRLMODE_TDC_MANUAL is set @@ -85,15 +93,23 @@ static int can_validate_tdc(struct nlattr *data_tdc, return err; =20 if (tb_tdc[IFLA_CAN_TDC_TDCV]) { - if (tdc_auto) + if (tdc_auto) { + NL_SET_ERR_MSG(extack, + "TDCV is incompatible with TDC auto mode"); return -EOPNOTSUPP; + } } else { - if (tdc_manual) + if (tdc_manual) { + NL_SET_ERR_MSG(extack, + "TDC manual mode requires TDCV"); return -EOPNOTSUPP; + } } =20 - if (!tb_tdc[IFLA_CAN_TDC_TDCO]) + if (!tb_tdc[IFLA_CAN_TDC_TDCO]) { + NL_SET_ERR_MSG(extack, "TDCO is missing"); return -EOPNOTSUPP; + } } =20 return 0; @@ -104,6 +120,7 @@ static int can_validate_databittiming(struct nlattr *da= ta[], int ifla_can_data_bittiming, u32 flags) { struct nlattr *data_tdc; + const char *type; u32 tdc_flags; bool is_on; int err; @@ -119,18 +136,31 @@ static int can_validate_databittiming(struct nlattr *= data[], data_tdc =3D data[IFLA_CAN_TDC]; tdc_flags =3D flags & CAN_CTRLMODE_FD_TDC_MASK; is_on =3D flags & CAN_CTRLMODE_FD; + type =3D "FD"; } else { return -EOPNOTSUPP; /* Place holder for CAN XL */ } =20 if (is_on) { - if (!data[IFLA_CAN_BITTIMING] || !data[ifla_can_data_bittiming]) + if (!data[IFLA_CAN_BITTIMING] || !data[ifla_can_data_bittiming]) { + NL_SET_ERR_MSG_FMT(extack, + "Provide both nominal and %s data bittiming", + type); return -EOPNOTSUPP; - } - - if (data[ifla_can_data_bittiming] || data_tdc) { - if (!is_on) + } + } else { + if (data[ifla_can_data_bittiming]) { + NL_SET_ERR_MSG_FMT(extack, + "%s data bittiming requires CAN %s", + type, type); return -EOPNOTSUPP; + } + if (data_tdc) { + NL_SET_ERR_MSG_FMT(extack, + "%s TDC requires CAN %s", + type, type); + return -EOPNOTSUPP; + } } =20 err =3D can_validate_bittiming(data, extack, ifla_can_data_bittiming); @@ -177,8 +207,7 @@ static int can_ctrlmode_changelink(struct net_device *d= ev, { struct can_priv *priv =3D netdev_priv(dev); struct can_ctrlmode *cm; - u32 maskedflags; - u32 ctrlstatic; + u32 ctrlstatic, maskedflags, notsupp, ctrlstatic_missing; =20 if (!data[IFLA_CAN_CTRLMODE]) return 0; @@ -188,20 +217,28 @@ static int can_ctrlmode_changelink(struct net_device = *dev, return -EBUSY; =20 cm =3D nla_data(data[IFLA_CAN_CTRLMODE]); - maskedflags =3D cm->flags & cm->mask; ctrlstatic =3D can_get_static_ctrlmode(priv); + maskedflags =3D cm->flags & cm->mask; + notsupp =3D maskedflags & ~(priv->ctrlmode_supported | ctrlstatic); + ctrlstatic_missing =3D (maskedflags & ctrlstatic) ^ ctrlstatic; =20 - /* check whether provided bits are allowed to be passed */ - if (maskedflags & ~(priv->ctrlmode_supported | ctrlstatic)) + if (notsupp) { + NL_SET_ERR_MSG_FMT(extack, + "requested control mode %s not supported", + can_get_ctrlmode_str(notsupp)); return -EOPNOTSUPP; + } =20 /* do not check for static fd-non-iso if 'fd' is disabled */ if (!(maskedflags & CAN_CTRLMODE_FD)) ctrlstatic &=3D ~CAN_CTRLMODE_FD_NON_ISO; =20 - /* make sure static options are provided by configuration */ - if ((maskedflags & ctrlstatic) !=3D ctrlstatic) + if (ctrlstatic_missing) { + NL_SET_ERR_MSG_FMT(extack, + "missing required %s static control mode", + can_get_ctrlmode_str(ctrlstatic_missing)); return -EOPNOTSUPP; + } =20 /* If a top dependency flag is provided, reset all its dependencies */ if (cm->mask & CAN_CTRLMODE_FD) @@ -234,8 +271,10 @@ static int can_tdc_changelink(struct data_bittiming_pa= rams *dbt_params, const struct can_tdc_const *tdc_const =3D dbt_params->tdc_const; int err; =20 - if (!tdc_const) + if (!tdc_const) { + NL_SET_ERR_MSG(extack, "The device does not support TDC"); return -EOPNOTSUPP; + } =20 err =3D nla_parse_nested(tb_tdc, IFLA_CAN_TDC_MAX, nla, can_tdc_policy, extack); @@ -450,8 +489,11 @@ static int can_changelink(struct net_device *dev, stru= ct nlattr *tb[], const unsigned int num_term =3D priv->termination_const_cnt; unsigned int i; =20 - if (!priv->do_set_termination) + if (!priv->do_set_termination) { + NL_SET_ERR_MSG(extack, + "Termination is not configurable on this device"); return -EOPNOTSUPP; + } =20 /* check whether given value is supported by the interface */ for (i =3D 0; i < num_term; i++) { --=20 2.49.1