From nobody Thu Oct 2 03:28:39 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 198DF30DEAC; Tue, 23 Sep 2025 05:40: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=1758606049; cv=none; b=HfQBdLeGllJTebUn62YPgJJMaXcOSrixwxuCF/zM4JbYbY8nCpLC22c2TR+jVH8OKh78Wv9MsTiJPVgdIHQg7/pyxWSRmEj58A71CFtRwQG8Lo1fLdHTbDNwM6/rniZCNhxPrvrg+zBI0zJ0NryoWDRaipGAM6z7O5fkl+heIos= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758606049; c=relaxed/simple; bh=Ou2rl0hYpUZ4J+DceB3A9S+4eN1YIUuXOKAXbdhHuLg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=izV8hOmFOI05QssNvBq21V9XFOj/7VBzJf+y0xiMFRek9SrMOwwcQDTwib5ZlPz/8k6s8Aw42/WO2JKVdy34OlWHef1pnwZCQPYHmnOQKdbacPJ4twMXZbL2icYk5onNxcLZdo8uysFhR6E7D30g7C3SwK4sJaDg/8Kg0Ub9wYY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=MWL+wKg9; 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="MWL+wKg9" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8126BC116B1; Tue, 23 Sep 2025 05:40:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758606048; bh=Ou2rl0hYpUZ4J+DceB3A9S+4eN1YIUuXOKAXbdhHuLg=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=MWL+wKg9BGSQUDkab0yhmQqfNKGgni4/vfUZF2E40NKbMWjcHOPslZ38vSmGo0uH9 gPUYFrgh1NRnHD+OHoKwlPgkd3X5iGrVBTYSJ81i4V4qiJiAnCUd2JvyW0KWdkTQk8 Uyf0xxrAS8yCK49ZZCDksG0RwIP/8KoRXcD/0ny5CwHMIRTWGK30FGmMdOx5YSpoPE JpVOGchy87auI2mEngQ7OxQtPpiznD+DY/tWtUW5srCcawpJw9fI/7yoq/85Qt1TtN A650ei4Rnw4ufiQ5ZUFBHAt8J+PPiHZEQUWjJ2JoxVRcOfFLsCDFyU3faaOvBD1Qlz 93AaiPlX4fH4w== From: Vincent Mailhol Date: Tue, 23 Sep 2025 14:39:36 +0900 Subject: [PATCH v3 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: <20250923-canxl-netlink-prep-v3-1-87a7684333f3@kernel.org> References: <20250923-canxl-netlink-prep-v3-0-87a7684333f3@kernel.org> In-Reply-To: <20250923-canxl-netlink-prep-v3-0-87a7684333f3@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=Ou2rl0hYpUZ4J+DceB3A9S+4eN1YIUuXOKAXbdhHuLg=; b=kA0DAAoW0WQ+QNd/fbMByyZiAGjSMqrIYsO5dVHavwfyq6d8jQSetEzMfcORB9jzWRm/EpNFC 4h1BAAWCgAdFiEEpncJCyCIcUtWwv050WQ+QNd/fbMFAmjSMqoACgkQ0WQ+QNd/fbOotwD/d11f VVMS0eUFMqA3Dz1a6n7b1zFWVB8fhMDZ5lAwLk4A/RWW9yTtIpPgYajTg/MnHay8QZxh45ENR0A e8sGBC6UO 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 3354f70ed2c684d7d482549560d4cb5838cbebd5..c2fe956ab7761f45a87e77131bb= 57e9d5d51dd7f 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 03:28:39 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 A3DCE30E84F; Tue, 23 Sep 2025 05:40:50 +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=1758606050; cv=none; b=q4zZStQ90vdyplZNu4GZ70d3s9PC1BB1iLyQWjYTc9WyX+Qt1YhTNjHTfMfixjzEJ2YsyfgqcnAe8inUeN0u87Ye5xriupnR3JZFqijEcuVsLJIuGB7sBVUJ9eqMWX7tixb+bV6TbpN9SjC5MsA+Tkat6CWLSKSmAFhIqSBrU3I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758606050; c=relaxed/simple; bh=REFhokzmVq+Rh1cbGlF+fG8TBZl94LtWmTGe+FAHboc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=E/g4/tSpX7RQ4cYFTAnLKyWUYcBKN6VFrsnqKUfJpr5WFtfoLbdp8+Gssu/Gjp8QkkqO4eakEulN3io7bQ3tFU3acAbpGSxbD5ckKIWyOk1ZJQkYlkU5HvhCwoQOrcWjQLQzaLsXgWBtYcByVC76gPO2a3GiiD9gFMMSEYBgAYk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=a0UZPO8+; 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="a0UZPO8+" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0F63EC116C6; Tue, 23 Sep 2025 05:40:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758606050; bh=REFhokzmVq+Rh1cbGlF+fG8TBZl94LtWmTGe+FAHboc=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=a0UZPO8+baR3pcyAUsNwssN/buR5qf2TTgbiAnv7m1RGZf4v0EAzGxy6BksFnVRqz w5HIUC7GurNS08dRUgr4B/w62JBwR/RrmUJvwVvy+MVCNSzoZKabDIy7LsEqXErflW wXffaYBD80dOdefjQ0j2rb8OzTikRr636cCv7wvzqw3WNVpnhSXlwpumIDWTxBYJYj w82/f8j45PC1OdOKpFt8BNlYsHMteddZbmkJmiD60MtLRWHHpZ6jeKNp/Dz0vu/DAa nodLSrSVBJoauVCa3nW3mCQYMkm4IyxUvSxWZ3ukEWKpR2hmHOTefTBV1Z6E45Qlqf n8jj0FV2cMY0A== From: Vincent Mailhol Date: Tue, 23 Sep 2025 14:39:37 +0900 Subject: [PATCH v3 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: <20250923-canxl-netlink-prep-v3-2-87a7684333f3@kernel.org> References: <20250923-canxl-netlink-prep-v3-0-87a7684333f3@kernel.org> In-Reply-To: <20250923-canxl-netlink-prep-v3-0-87a7684333f3@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=4085; i=mailhol@kernel.org; h=from:subject:message-id; bh=REFhokzmVq+Rh1cbGlF+fG8TBZl94LtWmTGe+FAHboc=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBmXjNbc/hawoMjlx06eX/e4El613vr6Qaz9nn2w7AItX gt2jc9vOkpZGMS4GGTFFFmWlXNyK3QUeocd+msJM4eVCWQIAxenAEzkfSYjw6wtaTcrvV6dmjBX caNheXDPSuUJ0nzhCXK/v27v3i250ZXhf021z3SvePHqY3uMdoh95b7DkO31hKe1M7RbZE1kfWc rEwA= 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 c2fe956ab7761f45a87e77131bb57e9d5d51dd7f..8e75e9b3830a7a0dab16b645062= 2fc4a98219a9c 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; -} - static inline u32 can_get_static_ctrlmode(struct can_priv *priv) { return priv->ctrlmode & ~priv->ctrlmode_supported; --=20 2.49.1 From nobody Thu Oct 2 03:28:39 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 43D3830DEAC; Tue, 23 Sep 2025 05:40: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=1758606052; cv=none; b=ayBJCb4qNMgIqzFnvyvlZ9LV7OYacCjGPbSIDI7nbi57KtCFgEt8mruO9n3+rZ4RWrN9/nRs3kpq4bD/lmY5HlzBCC9CNoKZPH4txxFD21rwM6yu77hYH7mUP/f4PWweCX2JgX+YkXg1vdmjlGulCVXZ8nfU5LIbeNTxqkCMWyU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758606052; c=relaxed/simple; bh=7GXiF2puI9MV0ynLrL3LnDqqLVjv4d6zMPfx4ftHtlY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=azTjI+/fisjIh8Zj8PeFBENzK9RkMu+csyFIU6fYKd4YDOM73WGFUfGZO1hGPkxsICT4qoeeapJUeIfwbUWplCQpnRVG3u2gU6DuLH3rt0PWRpxkJP/+nWtM7C+NAcM05Nzt8pfcPOj0W6+RveZa7dEUSe+1jTdeGBS8eJtAty0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=anRqCqz3; 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="anRqCqz3" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 90F41C116D0; Tue, 23 Sep 2025 05:40:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758606051; bh=7GXiF2puI9MV0ynLrL3LnDqqLVjv4d6zMPfx4ftHtlY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=anRqCqz3ZJ2ewCRvBTJX1VFluKICSzMrNrTVtS2brmrZzoqLwpJajESY9YtQejWai MXibgLwyAFBaVB3jm5vY84sxhi/2wxCaGLPJLt/peCBO9ONGtu6IEc3L/Gt363BXkt mZ6mCmlDcKG6CBosyagdiB5KU7V+MvcMuse48ggGbT0RVIm7dEvWN9PrzLZppnDPUB HpsZ2HIikU+CaANEunGKsINwAQ2dWyuG1NUUuknwZEb/A3d+4Mu+6jiWfIc5BkrrRh J5yj9hGpiutCrTVe0H6cozd2rJp6kjIIpTldCZfQ4UFwwcmlXARFhiJEsLhN8kVjxR AnS0cz2l/rdeg== From: Vincent Mailhol Date: Tue, 23 Sep 2025 14:39:38 +0900 Subject: [PATCH v3 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: <20250923-canxl-netlink-prep-v3-3-87a7684333f3@kernel.org> References: <20250923-canxl-netlink-prep-v3-0-87a7684333f3@kernel.org> In-Reply-To: <20250923-canxl-netlink-prep-v3-0-87a7684333f3@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=owGbwMvMwCV2McXO4Xp97WbG02pJDBmXjNYH/HftCbBzXsm7gLN7wev5UzhWc6T18j6q3MPRs uZ4jcStjlIWBjEuBlkxRZZl5ZzcCh2F3mGH/lrCzGFlAhnCwMUpABORWs/wV2Qp+2UezYeaV6fc 7XlRfP7gycw67oM2tbU8M8saDlbqSzH8U7JZ3uxx/kDrW5nZnVEN0Ts33Tx5ZFvae4NV/azyZjc v8gEA 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 03:28:39 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 BE39B30F920; Tue, 23 Sep 2025 05:40:53 +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=1758606053; cv=none; b=ZZpxkr8XLg70boVKAiDaFESdWL6OGUkLU4te7V8yLKYxUUIw7kZFVnmqwzSP19dfPjpbrXiD+zBFcZc+PXbWTtAGhPsQ9q6ZILbSCtc1WunAM9oumGqwHn/9zeLmOfh59XYx5fMRM0sEARemy5h7Y2+SPHcTE+lrL6j/P/OURj4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758606053; c=relaxed/simple; bh=YbwnjxfMye/PzcS1THZ1QtGxRafIoeUGUPEkh1iC8L0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=RNLZlVCh1eprNDNBdH1Lx337EytbPzRpKeEEoYDEX3/nB5CCYr3RbqQ7094T3FaeZrz8QNfaBSC+uXJXgDdu/SdCt10rkH8n/iQSz+UI8eMghpg4EmkQ/LdPgmBAn5c+s2KFbz28vuWrGCMOqTUpOXmii8Xc0Xw1Q33FBOADXS8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=qND9BNll; 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="qND9BNll" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1EFA2C113CF; Tue, 23 Sep 2025 05:40:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758606053; bh=YbwnjxfMye/PzcS1THZ1QtGxRafIoeUGUPEkh1iC8L0=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=qND9BNll6+lABgVv3l3n183eD5kmlls5LNTkwp3ByvQr6k5qs7CoKz/5PzEM/Kfha ZqwzkVIK+67YBHUWbIVNrQSjzoSElUlyv6s3cVZXEFOsW7lNbUUQDIyHT6MMxEPSYY 9lv7Q1nUKwAaZh1TXzzTObxp+shi4Ys/93wXS0gBgnCWbZvyBZbkkP2nlVwaxLksKa 8cAAuF2IuV7Ctb35FqT9n5hYgE3f+mxqWfUVtgInqhqbsOjt8au1zibiO+fPS0/VHf mB8EMRqkWCTTSJjs8XcDceR+i1RyeIFYkmBzAb371YoCxFMMRD6IS9eOoIXXS1gmmi 4xeqCZilj7NXw== From: Vincent Mailhol Date: Tue, 23 Sep 2025 14:39:39 +0900 Subject: [PATCH v3 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: <20250923-canxl-netlink-prep-v3-4-87a7684333f3@kernel.org> References: <20250923-canxl-netlink-prep-v3-0-87a7684333f3@kernel.org> In-Reply-To: <20250923-canxl-netlink-prep-v3-0-87a7684333f3@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=2734; i=mailhol@kernel.org; h=from:subject:message-id; bh=YbwnjxfMye/PzcS1THZ1QtGxRafIoeUGUPEkh1iC8L0=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBmXjDbtjvt+d87tYoVnqe8qZU7Mkth+cLnAqqCWXZMuM Hn3njyzsqOUhUGMi0FWTJFlWTknt0JHoXfYob+WMHNYmUCGMHBxCsBEnKUZGW6+Y93184S/RDSL yxzu0w8kSo1mZ876enPP2eMBnFqiigkM/8v2y7wLktDLuskrGB0xs8rgvX6Ims8d4aeLb93dsFE 1jhUA 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: the nla attributes are four bytes aligned which is just enough for struct can_bittiming. Add a static_assert() to document that the alignment is correct and just use the pointer returned by nla_data() as-is. Signed-off-by: Vincent Mailhol --- Changelog: v2 -> v3: - add a static_assert() to prove that the alignment is correct. --- drivers/net/can/dev/netlink.c | 36 +++++++++++++++++------------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/drivers/net/can/dev/netlink.c b/drivers/net/can/dev/netlink.c index 248f607e3864ffbda6f0b8daf4e2484179cf9cd5..13555253e789ec6ca9c8c30571c= 990ad6bfde770 100644 --- a/drivers/net/can/dev/netlink.c +++ b/drivers/net/can/dev/netlink.c @@ -36,13 +36,21 @@ 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; + + static_assert(__alignof__(*bt) <=3D NLA_ALIGNTO); + 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 +113,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 +127,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 03:28:39 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 3EEB630F95C; Tue, 23 Sep 2025 05:40: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=1758606055; cv=none; b=cGOxDayPXYeUK0vvk9sYWmktIiK/2HIeex9K39a8+/N1yCdty30TZwODwLbKcJtR2VcqJCm2oCWBvmXjq7zOTlwy4U8QHEt0CyVLNJ4E3LBpNS9PQondcbqWRjOxFdDcPkVDYUSEtOwvDszCI2z3QZeBq820ZvgsROV4MKa6Sng= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758606055; c=relaxed/simple; bh=v3v+O363rC+dn52ot3vqRu7qNq/YGiBUd4dacgQWkrQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ORq6kCRL4SeuthSENj7MiitvA70To8TH8vUK+v0hbH0ZXyeM4PE+bUkPoFYOjeuN5wDUuOpF+RNE6fK/ngcyyBFZJCtDUdZ2uNcVPefwQaaSBNUzfzJTP8YyPMKVsq2ZLs0+PvMROmtKBIGCOxfHn5FRV3JWwMp/Fz1w7XdDKMk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=CAs5t3df; 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="CAs5t3df" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A1A0EC4AF0B; Tue, 23 Sep 2025 05:40:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758606054; bh=v3v+O363rC+dn52ot3vqRu7qNq/YGiBUd4dacgQWkrQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=CAs5t3dff3fEsfs7beYsMaMQZsQWm5/RHDL6A1hI9eCN7an5+1BI8BC5Ffsf0Frpx c9KGSaJ66lhfnCvuko/EQmD07Mce8W6xzv09KHVP3gE8DRk4XYGoxX0Aaxmu1JMJxO +GKcKKjAnSc1AyzdD/KubQ9ztOZxFoM1M1K3GX5tpH5CuAptP1AAGSjepsCTczKq+G T8KHHE0HhKHPMe1CLcFSm9wVdyWhov+7T9golkS5Env23YqWcgQU7LveK2AigUK5CQ IYd90uDT5O4K9v58NRKVr5WOMBNFMtA6bPQscdLiPNnS0SQZYw2Lwzs3aG9mTC4RE6 pSVXfUnvS/qDQ== From: Vincent Mailhol Date: Tue, 23 Sep 2025 14:39:40 +0900 Subject: [PATCH v3 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: <20250923-canxl-netlink-prep-v3-5-87a7684333f3@kernel.org> References: <20250923-canxl-netlink-prep-v3-0-87a7684333f3@kernel.org> In-Reply-To: <20250923-canxl-netlink-prep-v3-0-87a7684333f3@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=4624; i=mailhol@kernel.org; h=from:subject:message-id; bh=v3v+O363rC+dn52ot3vqRu7qNq/YGiBUd4dacgQWkrQ=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBmXjLbcXbAwrHppyI+cxFtJz7OedPLOO+qbyXxLPtm09 8N68ST5jlIWBjEuBlkxRZZl5ZzcCh2F3mGH/lrCzGFlAhnCwMUpABNx+cHIsPp2a+f6uzsdXk9i DVe0Cr7Zffdnxva3mmqBqUuPt0QIejD892ye/OHztsvVteXMSu+dhPadMd/T2azvXuh40O7zOfG trAA= 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 -> v1: - 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 13555253e789ec6ca9c8c30571c990ad6bfde770..25c08adee9ade22a5dabdd3dec1= b5eb1ee16a78e 100644 --- a/drivers/net/can/dev/netlink.c +++ b/drivers/net/can/dev/netlink.c @@ -57,6 +57,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) { @@ -67,7 +110,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) @@ -75,42 +118,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 03:28:39 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 DEE5F30FC29; Tue, 23 Sep 2025 05:40:56 +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=1758606057; cv=none; b=TXciRNyWWYqjo7L2qo7xpvRxFQYYaLRcBzEYSYLJudRkZCX9tSpFgY1evjSyHhFyWTw0URY3KT+CLeYU92F1Ut1oJbhE/8ZYz7fH2bLcYU5/XMKTtEP1Iq41tDQPXoSYMT7p5hl/UV1uMvnzS2quKkSoC2POLbL54VyMihMi53M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758606057; c=relaxed/simple; bh=nzN3dLaayJQUQNyfjfJG0vwlCtwEhYpqAcFOwwLzEmM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=NLn2CVcSeP9heii42op1io60FQAmUJQZwPyAAdiNorfd4K9J1bWhLso/v2Xl43ZeYQTnaPxirqlZ3xIxvttFe3aPyoyR1CTbtGjsCOZTiE5Z9Btqls1aGoPXv4gAj6XBJN47m79q4ZIRC17/Qdav6BJww1eLmlAFyXbtecwLtzY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=WmKtQQNH; 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="WmKtQQNH" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 333CAC113CF; Tue, 23 Sep 2025 05:40:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758606056; bh=nzN3dLaayJQUQNyfjfJG0vwlCtwEhYpqAcFOwwLzEmM=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=WmKtQQNHH2q+X6XReURbnoQ9LwnToMRv9NExyG6S8hIJtL/MDlUqF26iwqxHAaB4l 6/9XHB9GY7uOIuUYVQliz1Kx106pwTAymfTw0w6wIJZPxXdwnEtyor2qjukm5fRJgC C4ThXX8nl6AHW9s2fr+UADLKTIgIRvdJk1y094QoHPAlF1EFMIs90+gEma00RuxgKZ Y3lxYJHCcdR6JKNGGyAjZXdtVZbcptQZzGZ4exRfIFUdRMhhmE19zK+PKbpoHhoyiY hL5Z7L2CoZgE9DQd3syUHHpTgiWPczXRXsztmnINqgkGViMQeNjpusI0bdfcBb/2a7 RvxZ25mQv7klA== From: Vincent Mailhol Date: Tue, 23 Sep 2025 14:39:41 +0900 Subject: [PATCH v3 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: <20250923-canxl-netlink-prep-v3-6-87a7684333f3@kernel.org> References: <20250923-canxl-netlink-prep-v3-0-87a7684333f3@kernel.org> In-Reply-To: <20250923-canxl-netlink-prep-v3-0-87a7684333f3@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=3588; i=mailhol@kernel.org; h=from:subject:message-id; bh=nzN3dLaayJQUQNyfjfJG0vwlCtwEhYpqAcFOwwLzEmM=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBmXjLazq0dwBiZkBrxm61CP26w6NT3i9RGPFVc/vA92s +hb8nNFRykLgxgXg6yYIsuyck5uhY5C77BDfy1h5rAygQxh4OIUgIkcOsjwT3O3idf2DM1AnsUL v2jK1XQyWAf47NuUbchZdJf9iKJDGMNfwbce7Ir3/uWK3mo3cA/cu66v4eW1MMfjK6M/CEvZ3Dr JDAA= 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 25c08adee9ade22a5dabdd3dec1b5eb1ee16a78e..549a2247d847dd26c8cb8c76ecb= 609256f549eb2 100644 --- a/drivers/net/can/dev/netlink.c +++ b/drivers/net/can/dev/netlink.c @@ -100,10 +100,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 @@ -113,35 +116,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 03:28:39 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 1B2F230FF10; Tue, 23 Sep 2025 05:40: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=1758606058; cv=none; b=lwImWc/CwJc9uXRbdh80z3n/SUCM1GuPafyVSP/QfMKE8I37TH1fkLsZRBS6Yt6XgonUFkQ0DLxLIz9GO6pEGJuXj0xQqT+ep02AXEmpDz1xVdxIO55ufh6JfrNEKetiBJYDKBYKRIEie0u4jlMukleVC/DEGTp2YG0YIDTiTI0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758606058; c=relaxed/simple; bh=M9/FIIXWlcfUEEFfRYD4MlOKBHufakUc+q8CDcjTqY0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=QLn7BQasg4Vuqjrhqhk+4DOIsFuCG7OLZiCWFRRrru0t7JjNTJbIflWa1t7LYn7Eu/881smw9B85jiLcte6qCptSrkfjo7Wmkug1X51Bk4W2SBAQrUSlKyumRPb13iYdctzlMl+RfMc5/3e1ttOudgoUfaDDcimK0+dQgKL7k6c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=loizxqwO; 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="loizxqwO" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B5BE2C116B1; Tue, 23 Sep 2025 05:40:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758606057; bh=M9/FIIXWlcfUEEFfRYD4MlOKBHufakUc+q8CDcjTqY0=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=loizxqwOOF3dEH/RoxEWplvOcLfeU1fD9RXWBV4SRS2Sqdd7Ic5yngUXd50KQvCdP /F9ExcBUmQjDiHdKW8m/2Kzx7mKA3tefD6nuXDB6btEo+O3aMnINVRr9O+w0G2ZKVp OSwn3xagLDy8GwmxrUd41cRdeqFF+lyjmaIqpyr9F06kceMlZ3YxSvHavAQHVQgv9j pxYrSlD82Q8o53fDA8vG+dDINjplJA4udkRAsubvCPWMboPUZ3pI3/QP3ghWw12Nmu SlR5WIpfIMBEbhP/kIF2cU2eHUQQNxzQfDO0oJYoNzl6wCQsZadmxoioa4zvscAp01 SUL5w/1ctTA5A== From: Vincent Mailhol Date: Tue, 23 Sep 2025 14:39:42 +0900 Subject: [PATCH v3 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: <20250923-canxl-netlink-prep-v3-7-87a7684333f3@kernel.org> References: <20250923-canxl-netlink-prep-v3-0-87a7684333f3@kernel.org> In-Reply-To: <20250923-canxl-netlink-prep-v3-0-87a7684333f3@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=2060; i=mailhol@kernel.org; h=from:subject:message-id; bh=M9/FIIXWlcfUEEFfRYD4MlOKBHufakUc+q8CDcjTqY0=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBmXjHZuT/7+/+evu0L5r9ccfbM+hffz9kmZ+ZOjzYT/+ QtrRJXt6ChlYRDjYpAVU2RZVs7JrdBR6B126K8lzBxWJpAhDFycAjCRa+GMDIe+6StJHHS8NnNe 9MLnz28tlNw+4bHetM9Vv6pNWNgcTeQZGXbx+Or+ye/3uMdwPvD6rbcs+3LvzG8IiAmos1/21aH sBxcA 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 --- Changelog: v2 -> v3: - Fix a bug in the masking. Replace priv->ctrlmode &=3D !CAN_CTRLMODE_FD_TDC_MASK; by priv->ctrlmode &=3D ~CAN_CTRLMODE_FD_TDC_MASK; --- 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 549a2247d847dd26c8cb8c76ecb609256f549eb2..c212c7ff26cd3367d2014db99de= 7534077a1a841 100644 --- a/drivers/net/can/dev/netlink.c +++ b/drivers/net/can/dev/netlink.c @@ -255,6 +255,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[], can_set_default_mtu(dev); =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 03:28:39 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 DFF713101D2; Tue, 23 Sep 2025 05:40:59 +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=1758606060; cv=none; b=DgRScIQgfgKE95X3uy/MXAHb5+0V65UQ2vLEmTYvluIhaiWcpHh5zXkRGTjHqNJ0xvaulrzayOoB8KSams0PzoPFH4Vvy2Jg4lKo5AlmF+4+yIcGfYNJ61vrBQmcLIJCZ7BJADprJ41zdpG/+IzBJSzAkls5qrDqVJIgFxf66QE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758606060; c=relaxed/simple; bh=WAKm5KoMoYNrq4ugY2CVCp2v6gFNBH2vldJXBcaEOHI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=toHqWS+BuYH8YjjA8qm+dwOQke4ozm/MNy3DANHH0CRPFkBtVjkLySoAtnvl090wmhL3VcZ5X1f78sVCJuZyoHxuA9HQ0NFKAczo6TNLScuz4EYKjNLAyOPRZaVfO0UgCVVFOrNoldsj4yxdUhTsXFAH9nNZtiS9Fs1fUXhotCw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=pCbUY1m1; 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="pCbUY1m1" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4347AC116B1; Tue, 23 Sep 2025 05:40:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758606059; bh=WAKm5KoMoYNrq4ugY2CVCp2v6gFNBH2vldJXBcaEOHI=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=pCbUY1m1e71Lfb2EDyxWEb5Rz0OoqkhnE+2v0KsyOtnRD62JOjJG68LEvaV1OkDhk OuLb3t5BA1rPWZ1hRiav4+eqtIakr+6Jhh1keZKtJxIuAmumgaCrC/GQkL8YRyre02 PzOzMBl142AN1yKoUEj4HJEF6EUIzDYJvKlOdiLMwtvF9MTXTUnU7vhTsArZzIwLvO +GAUUEbehp4LGGNuzJ3vFdXQl7ahcl4m5H/F/CrR1D4pQtZKYMDuzdZHkTopg6eXeC oEKJwLgTqcCRdqtf7hIvO+VYvQN806Tdt0JBH5Ynxiqy6nnl1VG2imdcMe0wbCYRGs kZZET+sA4gwEg== From: Vincent Mailhol Date: Tue, 23 Sep 2025 14:39:43 +0900 Subject: [PATCH v3 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: <20250923-canxl-netlink-prep-v3-8-87a7684333f3@kernel.org> References: <20250923-canxl-netlink-prep-v3-0-87a7684333f3@kernel.org> In-Reply-To: <20250923-canxl-netlink-prep-v3-0-87a7684333f3@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=WAKm5KoMoYNrq4ugY2CVCp2v6gFNBH2vldJXBcaEOHI=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBmXjHbf7DcVt2WacP3CoRna9eV2nrUr9BwnbvIz8Lpbd dP6ildRRykLgxgXg6yYIsuyck5uhY5C77BDfy1h5rAygQxh4OIUgInw2zP8M/gb7DVRd5vFjJc2 gav82DOvClxdZfJE7vHJb4xPzQ/J+DH8s76WzH5c8VzmpQ19wRkSHu+t1+/5pKSutPLnxBvP5rd +4gYA 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 c212c7ff26cd3367d2014db99de7534077a1a841..17ed52d238e3a17e946116a94c7= c5f503e184c3d 100644 --- a/drivers/net/can/dev/netlink.c +++ b/drivers/net/can/dev/netlink.c @@ -180,7 +180,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 03:28:39 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 8952D3101A3; Tue, 23 Sep 2025 05:41:01 +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=1758606061; cv=none; b=aQJsjYeb9HIOCkl6eNwANmc/6+WoUwpNga8cheInxCfipf5if0S96CwfzWf1wvsVL1eIPMwlgrdSZzjIbBAn0/O6dxLTzipLwXru6x/KLsPsVnplV3xbZZzzFlFOHlrH1LLA4MXez0X5IJ7bN5IOCbor8rte52sJnnhNZ8ByEdY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758606061; c=relaxed/simple; bh=o4MugYdXfmhUPXOXY4Q6rh0kdu4L448448o6JZzxGa4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=YDcfYGvQb+Ug2gaAV/2xd0B9W90f5S3u2pDs+va77FEcDFKLim+BcimrIHntGTFH2vj/a0JvJriXscj3I8VQTBKjGXV2tWg3nOmNAhoOFpZEjHecRELupyEUtbQS7REh6WHBpAYEwb6o8tykFOF3qqr5Q2wMEgegDhp0AmtVd28= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=sQNpQZ3R; 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="sQNpQZ3R" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C5259C4CEF5; Tue, 23 Sep 2025 05:40:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758606061; bh=o4MugYdXfmhUPXOXY4Q6rh0kdu4L448448o6JZzxGa4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=sQNpQZ3RpQ2xF7qOpoBGN0YpkODh6rp4dhTZcL1TbLShnr3wgMfKfyGPMy5405UXu /d0CBurJ+4xj5/HNrlYKZLpdh+TrKXoWBFTAyCXFuKLYuAoas2A7fw2Rebdmnw4GbO GJc93j7NcmVoJ6+pp1KMHno6dWj/etxN1Iiqr6LwunpQLOJ/4NgEGOARu4IG3O/XXB iA8OOfdh/pitgfX3aXYZfkEflpFucZ84ILO3Oj0Wi3B98df+/WW5lZ6qXtNZyrXrAK sU2oFgK52YQ9VpKJxLWWzO73GhyBhUFelFuhDx2uVFB3vEHgrYg6l06guTNxlHJf0C UKuSW5G4djHXw== From: Vincent Mailhol Date: Tue, 23 Sep 2025 14:39:44 +0900 Subject: [PATCH v3 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: <20250923-canxl-netlink-prep-v3-9-87a7684333f3@kernel.org> References: <20250923-canxl-netlink-prep-v3-0-87a7684333f3@kernel.org> In-Reply-To: <20250923-canxl-netlink-prep-v3-0-87a7684333f3@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=o4MugYdXfmhUPXOXY4Q6rh0kdu4L448448o6JZzxGa4=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBmXjPYyve4pCK1szLM0SV5zcfW1Ju4OK98438krTS/vY F5kHqXRUcrCIMbFICumyLKsnJNboaPQO+zQX0uYOaxMIEMYuDgFYCIZ8xj+aUxZMXm91Ooa4+1p DWdL31Yp3JCurZQ6wir0TPDllL57uxgZ/iewsard25LipxPtGfRqU4KZeLy44h/rzYYlW47dKZ3 MBwA= 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 17ed52d238e3a17e946116a94c7c5f503e184c3d..abff7b84fdce9641e1a5338ec6c= ef992774b0ec0 100644 --- a/drivers/net/can/dev/netlink.c +++ b/drivers/net/can/dev/netlink.c @@ -172,12 +172,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) @@ -215,7 +216,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 03:28:39 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 CEEFE3115AC; Tue, 23 Sep 2025 05:41: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=1758606062; cv=none; b=uGTYt14HkRo3cxjfrL4uwmpqjhI0OVJLa3+hhY8ksJMRkQ+GbcCwTUwhpysBVT0W3IO0dbfhE5s9W2NhLQYH2e5RDprI87tHPgonXiezS4B6x5VAsrFsFA4I8o/+cIersKsbZqEFsHXagbQfkrNdZkhLLTWw0ID35fyvDfTA3CE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758606062; c=relaxed/simple; bh=Dud2tKNYSuJSlB6InOKLskOp5O1lGbmhGp2orl1cCrI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Wf57tN9ymXS0wNbxMtRsIlcehGvxrYL8iOGkGzgZVqYa+/0lGKqx9J/dOFeVRFjY2inEInSVvdTbnwhLZsGOHY9uvZFQyDOYT/piQEXminaFbSP446hnfZumghNYRee8TVK7d1kihDVvblm7GmucABsZHmGwpZmVC6S0goCUCvM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=GJVRS7tQ; 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="GJVRS7tQ" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7E42CC113CF; Tue, 23 Sep 2025 05:41:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758606062; bh=Dud2tKNYSuJSlB6InOKLskOp5O1lGbmhGp2orl1cCrI=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=GJVRS7tQAp7Y/yR2EXM87pSGcie6BAygmnEWFG7WtilxXHXx85648VA3H+cQN1ypp dng1uRw7Eo95SNcdy+r2bak+u5fp7IzcauqEiyw62A3UlkawbJdzSa8VaUkyKKGmRt jVmwx8md+al81242a+ezJkXGWVLhbVqBsIGgrOcGvaXnNNCFtIBeWRxcWJIgZtMxX3 pP6Bamhlnm61UiomqkHC5ohqVyopI75HBeK8X/Rf9HcNXxtte5zdUmzz0YRnOvnYgQ uTeGvb6IY7HqbC0OWnztJtDHezvKUizT3TJVEYqeKAoebrkyPc1nKWk1cbffGibTVz 9mio2IhLK4emA== From: Vincent Mailhol Date: Tue, 23 Sep 2025 14:39:45 +0900 Subject: [PATCH v3 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: <20250923-canxl-netlink-prep-v3-10-87a7684333f3@kernel.org> References: <20250923-canxl-netlink-prep-v3-0-87a7684333f3@kernel.org> In-Reply-To: <20250923-canxl-netlink-prep-v3-0-87a7684333f3@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=6646; i=mailhol@kernel.org; h=from:subject:message-id; bh=Dud2tKNYSuJSlB6InOKLskOp5O1lGbmhGp2orl1cCrI=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBmXjA40NDZ/mfX/y+HCSy8WN9hx7FWS0X3SEq2StGvSb oeiyz8COkpZGMS4GGTFFFmWlXNyK3QUeocd+msJM4eVCWQIAxenAEwkXJrhr4Rk2rfisz8ec+pd 8D6+t7H36BE1LxW2bxqTlEv1dC4ezmdk2Ky4pIT3ScbVuoLjyyaLSxq2boziq1Hb5XH+osgO2VX 3OAE= 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 abff7b84fdce9641e1a5338ec6cef992774b0ec0..5f2962aab5763a0dc8f86a6fa7f= a3afbef125d26 100644 --- a/drivers/net/can/dev/netlink.c +++ b/drivers/net/can/dev/netlink.c @@ -221,12 +221,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[], } =20 can_set_default_mtu(dev); - - 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 03:28:39 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 61C7530E836; Tue, 23 Sep 2025 05:41:04 +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=1758606064; cv=none; b=QJ6fWJ2sDMZP003NomHsWMQa9ymE/sqUSle0uETleUYl+7LYGfLLF1ifQxKGRPyllVWwqGF7k3DoXNQyXFT1pL3yciOuB0qkurER6zMCBJ3mNUxiakv/YHUBRRl0ZRIeTC1Je+7LmKv3nNj/dBltAbgql6apWkEi+q6R4DhECj0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758606064; c=relaxed/simple; bh=p+xubPDbmlHlPuLjAhtq7k8gryVUlVt/9NutQMUf7Jg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=CK8jOXNRMxWkC2x5XTJzdG8jmbIzq5pPFth0p+sjJnhrvqDFsl+uESLYAKfBajARKg66xMl9S4ibk74XzT4Mez5Bp0UUHm4fPViHDR3+KKCyOzPWCe5LPUZNMiDrCgiXQek4T8njfQC/gjRZ7FdA6IlinQPVRX0yZcl5Fb7OBNI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Sh6a1RSy; 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="Sh6a1RSy" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0C082C116B1; Tue, 23 Sep 2025 05:41:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758606064; bh=p+xubPDbmlHlPuLjAhtq7k8gryVUlVt/9NutQMUf7Jg=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Sh6a1RSyeCfIIqDLDGarJkzNUb4b+TT5LVheplt5d1+Vl77ZQF/9x3cpi6I46Tqf+ s3U4m1rsbFwM0wOkYQgnwowKuObMjqjehcFjQLcrs2YnQqa+qUQsW079ZhgjIXCMcI JmY6IRrLeqgnXuttxP2ydltxezl8N/rQAavnqcJlk5Jd8ovlyDMD95fqLh4Ftco7wt y1A47fmd4x6QSIrXYaJUGExcdmX7ZY8B1hli7bB9UI4FrGEmKlc95VtaDXxZ5oHW+3 IRwzJ0JHGVnBpIH6b55yEf/X0qaoRU4D2+RM5yfI2zsIfHvY27IRkobSFU8YMEBkwr TJg6gJlXzJRyw== From: Vincent Mailhol Date: Tue, 23 Sep 2025 14:39:46 +0900 Subject: [PATCH v3 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: <20250923-canxl-netlink-prep-v3-11-87a7684333f3@kernel.org> References: <20250923-canxl-netlink-prep-v3-0-87a7684333f3@kernel.org> In-Reply-To: <20250923-canxl-netlink-prep-v3-0-87a7684333f3@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=4269; i=mailhol@kernel.org; h=from:subject:message-id; bh=p+xubPDbmlHlPuLjAhtq7k8gryVUlVt/9NutQMUf7Jg=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBmXjA5rSt2+2HXryXTuJp0zpxcuXaPTkbAkYqK/B6veq SlsV5QkOkpZGMS4GGTFFFmWlXNyK3QUeocd+msJM4eVCWQIAxenAEykq57hf6LTt6tBvzUC77wq zztq/K9sre6FXNcwjlUqQRb1T4/edmD4p3pj119FqZR34df73pnlM2/cWBEx8WFgyJ07iQlLmF6 9YAIA 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 | 96 ++++++++++++++++++++++++---------------= ---- 1 file changed, 54 insertions(+), 42 deletions(-) diff --git a/drivers/net/can/dev/netlink.c b/drivers/net/can/dev/netlink.c index 5f2962aab5763a0dc8f86a6fa7fa3afbef125d26..e1a1767c0a6cfeeb06b7d53f9ec= 4c48d76387b62 100644 --- a/drivers/net/can/dev/netlink.c +++ b/drivers/net/can/dev/netlink.c @@ -172,6 +172,59 @@ 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; + + /* Wipe potential leftovers from previous CAN FD config */ + if (!(priv->ctrlmode & CAN_CTRLMODE_FD)) { + 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_set_default_mtu(dev); + + return 0; +} + static int can_tdc_changelink(struct data_bittiming_params *dbt_params, const struct nlattr *nla, struct netlink_ext_ack *extack) @@ -315,48 +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; - - /* Wipe potential leftovers from previous CAN FD config */ - if (!(priv->ctrlmode & CAN_CTRLMODE_FD)) { - 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_set_default_mtu(dev); - } + 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 03:28:39 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 DF72331196B; Tue, 23 Sep 2025 05:41: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=1758606066; cv=none; b=bI2OWYilufx+rAXQs1qA8EdB2fbMbRp+ydnT7UWHdYKRjb+uK4q8NmjOz8MC0iqYQoNObwoFlr8uBzrtQSjtfU2YXASoRohbVkFbG3DVW9Y+awnfyPFmAFkn9hBdW8bNGmWQEiLYloA1+w7mJzn98lXDPNlXEtwy5FQQLSrMtrY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758606066; c=relaxed/simple; bh=OHRQFZqsnTAMm/R0kHHlL+RdEIOPDbia69+QsOEPrOc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nmf061BMYkFDk9Fga+MLCdQ8rlYNjNZonB+1LQPWy5mFNrXNZaGJ0VMQGMHyZebU/GMEqJVx/qoQSGGXYhR771MujWiwC6Wp/GDzeviCj3EmZAu4Vh1FcpePIkD9OStIpc05jrsa7JWOWq4warAjYl3A51KLTa3riqL+7/kqBQ0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=aY5wJcV5; 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="aY5wJcV5" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8E56CC4CEF5; Tue, 23 Sep 2025 05:41:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758606065; bh=OHRQFZqsnTAMm/R0kHHlL+RdEIOPDbia69+QsOEPrOc=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=aY5wJcV5yFw+lZkG2deVYrmznqirEA41e61QDvINEskYF0PHe7hlrvmNfOaY1D1VZ 0/Wfecvzko2AhE256Qs6Y4kgeZDCDE90KkiVTTWhOUdAQwwrfhqeKISpNopf6JDsBP aMuhSA2JPcaSzbCpG6N7v9A8DYVqduKCx+/Y8lW6luebDJiOERWPuFdX5iKKCE2V+5 4oc069KT8u5lntLKXrbQidpwlE/mWwTm9jJ8xtuvpN5NvclkVwbII8a+FnEcxRrPiM LhWGlwZ1HnT9dBOQH/DpAQrGG889bv6zshT3tq4V0yMj0y3RdQMRE0hvFT8wI5j5hr GXRnLZEyyNGsQ== From: Vincent Mailhol Date: Tue, 23 Sep 2025 14:39:47 +0900 Subject: [PATCH v3 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: <20250923-canxl-netlink-prep-v3-12-87a7684333f3@kernel.org> References: <20250923-canxl-netlink-prep-v3-0-87a7684333f3@kernel.org> In-Reply-To: <20250923-canxl-netlink-prep-v3-0-87a7684333f3@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=OHRQFZqsnTAMm/R0kHHlL+RdEIOPDbia69+QsOEPrOc=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBmXjI4a77wj/zQ2ztMx+q634gPOJz3Xitc4loXoRC+UM 1a7zfuqo5SFQYyLQVZMkWVZOSe3Qkehd9ihv5Ywc1iZQIYwcHEKwEReqjL892822WH2QfB5t1C6 ek1O+b4yTc0tTZMF3wg4ywjG5CuzMTKs/iP/VE/0780WK6Gq2hw7ZrsQi4c5pSfDVUOqqlt+x3A BAA== 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 e1a1767c0a6cfeeb06b7d53f9ec4c48d76387b62..3c0675877f5ef84a2b84d5852a0= e91d23b164eeb 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 03:28:39 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 6D26831281F; Tue, 23 Sep 2025 05:41:07 +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=1758606067; cv=none; b=iMqK2/dZ5eyJB7UYPoLNyeT9P9cO8dHcLQqRPV4aR+FtMFa8Yi4mAP/Fa3VA8oq+jKsULAN3P7z3SNcimO7I/Sv/yTrwllDj6kZOVrYbaQl7c0eTPglld7vKZfVF3FfUG+57dyB+YC0e+E4NRwZmuMHFvST4L62EXhNOqGkU1RY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758606067; c=relaxed/simple; bh=b+C6iL5E7JnwjQ5NjxVbqJevhBvTZfzFh4fIjIFyacE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=lA0v8CKUU5AkV/oMz2ErDUQZGSJqbUfy/hnjT9RG67/jkNMbnFrWDQk/s6fA0NuM686fF8JjlKgK6hvAxFyOQAwMj5s1fiId9g9HSo4qu5RRLviQJof0GdaW0Xm19XVxIQWqvjTOiCwKf12j1AsWwKdj6GLetiUzD1enSuEul9g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=P++IEeYj; 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="P++IEeYj" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1C845C4CEF5; Tue, 23 Sep 2025 05:41:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758606067; bh=b+C6iL5E7JnwjQ5NjxVbqJevhBvTZfzFh4fIjIFyacE=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=P++IEeYjEWRBjokc0+60Ev1zz4zuzbruqqz9IKngVHEIeqbwmoeztuLKmBaErprcj eOpO9pZ86GgCOdqhTnDeXGSkkMeji7XILXtzLeJpVfqo0U2FAN8xE3uX+pby2xJabX re6G3bgBULZpvOsGLAwTOIvhMTx5Vlhvy6I7y0xQyyYQMtvkhSgdIVXMP9h72JMksK mdtjsaWQbSbsYcna91F+QK5DjrTA0jhtbXKF/hTaueak6GCvIJ8exFhXWoaY8E90qy /eQNrm3cQNihjytbIY/QPHB1JkI7t3S8+aaBsktq4WPZ4zkXyq6HLncom0LLIQfBTB 8iyt2LqZ5qDJQ== From: Vincent Mailhol Date: Tue, 23 Sep 2025 14:39:48 +0900 Subject: [PATCH v3 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: <20250923-canxl-netlink-prep-v3-13-87a7684333f3@kernel.org> References: <20250923-canxl-netlink-prep-v3-0-87a7684333f3@kernel.org> In-Reply-To: <20250923-canxl-netlink-prep-v3-0-87a7684333f3@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=b+C6iL5E7JnwjQ5NjxVbqJevhBvTZfzFh4fIjIFyacE=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBmXjE5Ms99zYtP2F/c33PVdJuh08SKb+rTVH6fENV6X/ lj5b7fg4Y5SFgYxLgZZMUWWZeWc3Aodhd5hh/5awsxhZQIZwsDFKQATUbRl+J9+VfKwceXXP+uK Th+++fHizgiBmRLTHyZFV93qrX43T5qDkeGOxfa7T462abnH3DVnk556Yr9V95XOf7bRnFPbd0x 8I8QNAA== 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 3c0675877f5ef84a2b84d5852a0e91d23b164eeb..5d2b524daea90442e56a1b24e7c= 32190a84ed934 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 03:28:39 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 596993128D1; Tue, 23 Sep 2025 05:41: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=1758606069; cv=none; b=V5Bsm0Of/AMIXlCLbj0XdiryenfwuyeXTubutv2AxNv3c764AY50G/eMFXrKrinY9FaAhBE/3H860HkKg5E5ARB5zIhEmvhuY01x7tMidyyBszWdLu0F70MVendwwNRJVXaX/5Eg4Tx4n1erxaeBHzJ8z7AHiMmyPZJI+pIcTq0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758606069; c=relaxed/simple; bh=vvz9ul3gCi9NrWnP1mxXcrN0iSXDjogBTe50AwWngEg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=RRD6q2hEsAEvgQf9OqjMQtInU9fFWStwVbwgE9iTAk1cbWCSSP21RbbmXb83/8paZfphwieZZ9oqqznSQa/2F4tkyKNK2muRNVQM1JQTttAZViepAIjT26Nxba0fNq/DAebsrisq+ggbA5F0ZLYAENq5MuXYW2Dt+tvFW3TRupo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=htcWT9LL; 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="htcWT9LL" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9FC18C113CF; Tue, 23 Sep 2025 05:41:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758606068; bh=vvz9ul3gCi9NrWnP1mxXcrN0iSXDjogBTe50AwWngEg=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=htcWT9LLgKEcMRJL43JA9Fp8C5lQ1fPP4o4y41qSHUthntxh70gR4PjN/2zmjMEbO HYLXLlBv4SR+fDMXxj/DuurWMly1G3+nBMgFuniqomc6SBY4msKSbLphXTK31rhH/8 n4wPO35qrdcgW+t19LVv+pcg3zNa0M4enxr7u7Si/ICvR4Z5lUyHj3fdHwzAYrmHV3 c0LdzbCQRJfkL4gps9hnOzjzYi7A62geRulonCsCJCRfec/cdtGfLCgq/i4lvFfG48 L9flLpgqkM0MFdQUbbKdUPRuxKKMNu6V6/8iluMfOYx/y8nQOUITLkaHEjc/90j+/F 11qpexMQMeLiw== From: Vincent Mailhol Date: Tue, 23 Sep 2025 14:39:49 +0900 Subject: [PATCH v3 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: <20250923-canxl-netlink-prep-v3-14-87a7684333f3@kernel.org> References: <20250923-canxl-netlink-prep-v3-0-87a7684333f3@kernel.org> In-Reply-To: <20250923-canxl-netlink-prep-v3-0-87a7684333f3@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=vvz9ul3gCi9NrWnP1mxXcrN0iSXDjogBTe50AwWngEg=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBmXjE6JdBrvsu/izpqSmn9E+11iB4eQoUPSiZBTV8vmq vq+PXOko5SFQYyLQVZMkWVZOSe3Qkehd9ihv5Ywc1iZQIYwcHEKwERmzmBkeHD2nvK3RaHLXn31 WuOU6rvkfeKh8LP3CvvO3xE6oZ+0L5HhrzTX/Ty5pfv27o7XmsukI7+ouVjqlvSlTfNbv6U+ig+ /wwoA 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 5d2b524daea90442e56a1b24e7c32190a84ed934..bedd2611d35852e3e1e8b63aa41= 8726a5675897d 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 03:28:39 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 7EE9E3148AE; Tue, 23 Sep 2025 05:41:10 +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=1758606070; cv=none; b=bKk+J/W4gGAGEWUj40Tr7moeoRXMe472zT4f2Gh+aB61xo8PG0r5HLwJh+apZvBFmOSSAU1CU5FB2JCvyEY3hxMj0wneLvQQ068G4/uOIge8OhwGBPoiFWAK9J2Cww1aVCO+Jd4Lw0wBgbKlunLFg2t3lRYz38j+ugBUKFwwONI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758606070; c=relaxed/simple; bh=g34JJI4MYiixUaRVCWnqaQWymZ4kL9no0rZXQlvaevQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Gv79yij11p5bECyKPtIWZ6TRlE2APR0JlKLGAttvux75+MoeuPmf0zGJfmLGtU2G1PjiiWJcqVQpf48pozPMo7aPywu9mmAl3+fb2Jy0+QljKQdT8sP4noGGexbFVq6KkvS0eN6SMh9gUizNHyOHI1pn/K0Euf2J+F06ilXPZr0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=fTSu0mKa; 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="fTSu0mKa" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2DA2EC116B1; Tue, 23 Sep 2025 05:41:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758606070; bh=g34JJI4MYiixUaRVCWnqaQWymZ4kL9no0rZXQlvaevQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=fTSu0mKaundYeTuwdMm6y+hB7l2JJQkGQdiSw8NWzR8+AuDc9Bk6x6uutgyp7Ro7M eWKEBs6WAH8Ddifkjh/TOVCwNSFWTAWW/cPJw/r91Qwlw6WdNIZIen7Wf5K9zkJ1c8 uUkVEDdl19ipBeI6UBbjajpVJNUjf4sW0VDGPokI0EhrvB5VvmKaZIs/20x5a+lA3z B+A8jdeQk/sjsJHXn1Bew4P/1BgXdaRoW9a+FCOrxB8VW/YG7TgMCSZIL6GWMegLz4 APoahFoqVdCrHn6qKQWV2iZ+DakpBOGWrlrxq16NMBhOJchEQoRY1Oz/qkwUaNsZli 2H+yvgJec/XfA== From: Vincent Mailhol Date: Tue, 23 Sep 2025 14:39:50 +0900 Subject: [PATCH v3 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: <20250923-canxl-netlink-prep-v3-15-87a7684333f3@kernel.org> References: <20250923-canxl-netlink-prep-v3-0-87a7684333f3@kernel.org> In-Reply-To: <20250923-canxl-netlink-prep-v3-0-87a7684333f3@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=2389; i=mailhol@kernel.org; h=from:subject:message-id; bh=g34JJI4MYiixUaRVCWnqaQWymZ4kL9no0rZXQlvaevQ=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBmXjM6+Wlz6OCFHdA3j7/V795XcTcg7+uvbm5iXTLN3G f1XYlBT6yhlYRDjYpAVU2RZVs7JrdBR6B126K8lzBxWJpAhDFycAjCR5FuMDOedJPb8eDG37OKl IO19Vqav/nyOmRHyWOqcCx+77Jej044wMvQp9F+SFgiUeNg1I/LkZ9tVnoUzKi0PNfS8lrj4reu 6JBcA X-Developer-Key: i=mailhol@kernel.org; a=openpgp; fpr=ED8F700574E67F20E574E8E2AB5FEB886DBB99C2 Add function can_bittiming_const_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 bedd2611d35852e3e1e8b63aa418726a5675897d..fa922a61f75afd18c587f144b6b= b2a17be7f26da 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 03:28:39 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 0B5EE317706; Tue, 23 Sep 2025 05:41: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=1758606072; cv=none; b=CoqcPWHrn/nQbXF8N8Ab9O+bznEoKSJsvym+g3vCi4Uzwdkgo8qyWKW/tPsL4XH2dZIMx5hpgjrPql2dLDtjBDonX0IUHXkV8l5dEuTmwn6sTssOqmcEVGP6T5lBnS/1vGUxr8Y+tVtTb0mLfJXbH7ElnRsqrNhccoZgiri3UV4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758606072; c=relaxed/simple; bh=5sfUrtoOZp4BjKuJF6RyWHTN4aQhqobLwkByaxTv0as=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Q7lLRGRwNewBQNAJLFkEffs3oFn/m6+1LZU3ngUprDq9wRN2tYS9d8HTAcpReXIibXas0UuZiOtW9JNZstFvDEQ7u6Ugtjs85ofLFKHpzxbXJQq1DJi3x7p2dei62YGU5wCiAcDkdId8tdH1Vc4RJj+6oiqlnguzyqvXExJC1I4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=JCSdOQX8; 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="JCSdOQX8" Received: by smtp.kernel.org (Postfix) with ESMTPSA id AF785C4CEF5; Tue, 23 Sep 2025 05:41:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758606071; bh=5sfUrtoOZp4BjKuJF6RyWHTN4aQhqobLwkByaxTv0as=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=JCSdOQX8usrmtB4Pih31u0b11Sb60n2jbtEj821+pABStUcC3DbxU81nUwzH6/8Sz /nGwh5zBf2BwZUCjTaoe6OMItvefcPUHjXO49g2AofbpVz336EpA23PKEnEoRlLYSl nNq6/r9vlhkCKily7SAJIubvpujMqFk3Do83QVBlhx6dEn7Yy8fBICrBqss+h/LRx7 udP/DpxxH0jKFCfWHSl2Gsw8Oh+Rlr3Nupbh0auN3tyWIVp8qRE5cO35YV+G2dZkvm TsjyO4Zz1DuujisjAZU79qqiAOZZI3s51zSHYY0gUaPyXMZuSzzABAuacrlpmTjEW3 pehrdBnZhsdQQ== From: Vincent Mailhol Date: Tue, 23 Sep 2025 14:39:51 +0900 Subject: [PATCH v3 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: <20250923-canxl-netlink-prep-v3-16-87a7684333f3@kernel.org> References: <20250923-canxl-netlink-prep-v3-0-87a7684333f3@kernel.org> In-Reply-To: <20250923-canxl-netlink-prep-v3-0-87a7684333f3@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=5sfUrtoOZp4BjKuJF6RyWHTN4aQhqobLwkByaxTv0as=; b=kA0DAAoW0WQ+QNd/fbMByyZiAGjSMtCiPyLcn2/4ja7tfeBRCy6meHU3j0aZG5hXk5Z3bl7BA 4h1BAAWCgAdFiEEpncJCyCIcUtWwv050WQ+QNd/fbMFAmjSMtAACgkQ0WQ+QNd/fbOlTQEA2JDE C/YAPqTqCq6xeAhN28zf+Y+gUZ7bDaoJeqAfK/8BAO8TcRrVUbVuuhO86JCxFAfMf5MFyDrvX3Q U6XFxy+YD 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 fa922a61f75afd18c587f144b6bb2a17be7f26da..9794f283ed588e37fbc9a189cb5= 4c6965960d436 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 03:28:39 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 957AD31A54B; Tue, 23 Sep 2025 05:41:13 +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=1758606073; cv=none; b=nAT+PiBsry/2+7vLIH+bqcCt+qhmfLQinG7a0ms8iE1R2O//I6mr7imIpjlH7eSU9P28MwAN+Kve9hb54YB1AkyaHbGPSkF+380BkbX2wY9pFlzy7oop8Q+GgQ1m0YM8lQGQoPj3DjAyZqNQIlQ0+gk/g31OwIfijMlixGBNJhA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758606073; c=relaxed/simple; bh=D/fnxllUMFFljUQVKz57aRLrEjBeJpnOQZizLzQrtrU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=FklxAxTFy8DLeteXHA2FSFuudqczV2zQLXhRSFHaZUHqnNRUZTdR5H7l4bOS0jbfj17Or4g8deC3phvS1WUgYtNGupW/r1axs66PoK/rr47d96DNc1K8/A5plXNfAsuxtxzOVPbFY+VcKmSmaBMU5p9ZYJrTEkFojXnH+l2mHkI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=TQK8DD4w; 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="TQK8DD4w" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3C943C113CF; Tue, 23 Sep 2025 05:41:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758606073; bh=D/fnxllUMFFljUQVKz57aRLrEjBeJpnOQZizLzQrtrU=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=TQK8DD4wldUeYMP7+ylCaL8CEH9vQUjrymLv0i2FcHbGHIGD++3xsQgyDBuMVhG8H l3QfPT4HaYNpDvhH14/xeqxpMaNSnamkHKJ0rf3Icbj2/Gb5OcSNGHLWxkWTXqjNWP fQJomULy/+XCnOIuQ/cgDOqdZiKVFHdb7COmTIeUj7+eewpP0OPawbg5qV1viTBq8m z2cSEQ1/5Pi77yp2EUrX2oGoLjo/jUJEgV7kAsdoFUIICTrNFgpVl5/6O5XGbVuuGH 5Kz3XrAxoE0uV+Is6ePA5HPz+EcvHhUZrJx4bO02sE1pP2ZyYKrWlqWq2gG2Esnk6T 8r2QvPUS9A8tA== From: Vincent Mailhol Date: Tue, 23 Sep 2025 14:39:52 +0900 Subject: [PATCH v3 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: <20250923-canxl-netlink-prep-v3-17-87a7684333f3@kernel.org> References: <20250923-canxl-netlink-prep-v3-0-87a7684333f3@kernel.org> In-Reply-To: <20250923-canxl-netlink-prep-v3-0-87a7684333f3@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=D/fnxllUMFFljUQVKz57aRLrEjBeJpnOQZizLzQrtrU=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBmXjC79y/if8mlLffGD9ytCmMJCyhaZVCySEtnMHfs6Q SyUZ3lzRykLgxgXg6yYIsuyck5uhY5C77BDfy1h5rAygQxh4OIUgIlE8jEyPHscJZc2W7JY/4Tq MZ3z8wR8Pxx6Irj4tEfPBQvN4jNHbjP8dxCw92ZSql//9DKHxPTjb/2UN8tPLHx/szDw4q/nnur 5vAA= 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 9794f283ed588e37fbc9a189cb54c6965960d436..99038e0fb25f4e05cd181b188d5= aeea25de8f77e 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 03:28:39 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 86C8031B104; Tue, 23 Sep 2025 05:41:15 +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=1758606075; cv=none; b=G/AF8s22LUOb0ng1engaUFGWKdpiI2k1WkM0wfCOYP2PsNjYKasyjX9ep/lyrNEUXtQzc6oQPwIf2syXDQ3/ankEcijuMkyZYHpvUbpOhaLHg/dwBOEMaduL9DXfUmsWUjaySwDmcp1oeqyqqNWwRlWAlwigwU4Lgvd2IkfWtCQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758606075; c=relaxed/simple; bh=F7MyAD4vh5cxeyCtARMCnPwZM8B/TzhziXFFTs1nP/Q=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=AZT9w6gfy5TR2DBiojyczKOWov2rQPgjZzEJP5UnvfDXX37IfLSUKQ9Yt2nYXH6yHJw8Taxngq2DO0T5iJnnDp0png5eyzqW8Ce2JSAw/9W0ZZlMYWwlLaa9jW3T+e4cD4/hILJyDf75q4j18t3eRRhA4Aco3jMOgxoe1/LT2Xo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=hlNgbZDs; 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="hlNgbZDs" Received: by smtp.kernel.org (Postfix) with ESMTPSA id BE681C113CF; Tue, 23 Sep 2025 05:41:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758606075; bh=F7MyAD4vh5cxeyCtARMCnPwZM8B/TzhziXFFTs1nP/Q=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=hlNgbZDsXuj3XkI7RN78ljQh798lxjGEt6eVUetp5fRJUP7wNj8isgwW9X2h5km/9 ZTiKiOcjdPTqJzEVBYC+u8zEBhuXyI+rcldgDGA4FoC75h/dvKWJk6m1M1oyjkVZC/ n3ntziseU7MOTbu85ByoWmMtkvSOrS6cDJOXBzE0Bby/5SLcDAnvk6aIORJS3VSpLv 03HZoJEPPXxKyP5YYopi9D/nn4mWK0yKlPGl1Wj1hWFrFOyQMV46eEpwNAdtNRf4sI zZMKPJ9GsCUe7wAIr3bA8PrmpsF6xI/bhtTM6Xa8/nV7fHHEpnyJIYGRPBuOheMCqa wXe7z/R67QILg== From: Vincent Mailhol Date: Tue, 23 Sep 2025 14:39:53 +0900 Subject: [PATCH v3 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: <20250923-canxl-netlink-prep-v3-18-87a7684333f3@kernel.org> References: <20250923-canxl-netlink-prep-v3-0-87a7684333f3@kernel.org> In-Reply-To: <20250923-canxl-netlink-prep-v3-0-87a7684333f3@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=F7MyAD4vh5cxeyCtARMCnPwZM8B/TzhziXFFTs1nP/Q=; b=kA0DAAoW0WQ+QNd/fbMByyZiAGjSMtWhghCgzdPOWaE/4e6fC5YYuiaUGlZWP4/62qGzemgyf oh1BAAWCgAdFiEEpncJCyCIcUtWwv050WQ+QNd/fbMFAmjSMtUACgkQ0WQ+QNd/fbMTUQEAtnk+ UUM/0q7kBa2qeLLqWiqeCXKL/XZtKAqA5ysa868A/Roroi0+u9xfh4JoLP81dWkRkJ2oyCfmadz rpgtWMCIB 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 99038e0fb25f4e05cd181b188d5aeea25de8f77e..92d8df13e886c8832c4ed845067= 5c22dc2e5b009 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 03:28:39 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 99FCC31B12D; Tue, 23 Sep 2025 05:41: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=1758606076; cv=none; b=tZ8lUmmnYYbhg7n6QOB2Hd7MK40mIpZZjWNaHrHXEwhoB8l+vhK1RMxohE0LCpitHZ3EKcy6Ng+cxIka/bv1SB9K7ANYjNJfQZsA2WZ/vUSy/nXaBYc1qmqLq+w01tHcQjEGbpf1iUFRRSQr6QZgq/SFkaQn05CZ65TzkUFg3D8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758606076; c=relaxed/simple; bh=7HuM9GT+2Kd+y3dPkOdkf++eyBOX+SiqQUavEx1WCQw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=l8LPd8yzYB2Bmhu9TLIGMw2vyAxTO6ppBXMjslTF0RzAusTCOcvJzf0ZyCP5s45c3HPM7em4r09nYtDdEITgO2CYDj/E/luoc1XivD8TKA0YW2RAMACFHcLP+veEmmJsgFZWZBscFtz4qF/YLQ1r1ocoNtQ8rxNGpLDUn09X4to= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Oi2D2UQU; 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="Oi2D2UQU" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4B697C116C6; Tue, 23 Sep 2025 05:41:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758606076; bh=7HuM9GT+2Kd+y3dPkOdkf++eyBOX+SiqQUavEx1WCQw=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Oi2D2UQUmooyW6KGyVPyk/TN8MxysdbwbqNGDGuIjGpue+zXn5xmnkjr/+z4zLDuS cO6ngDaoyLYGHqHGpFQiS2O4sn/qV8Y1VRCIsoVxicDBbNKPBUI2g8JBf0PeqfkYNu qVpr2ejiIO7bpQ+tblqq8uLkDBEqcbLxxQSTho4OP3IcMWpPuhH9/x6FpTiXCPdLz5 zkfIycqTovDFswJtNcdHfiidk7Y3fqLI2vjVHtNCmyveiPVWvNGgWEkek98YDYfeAz on16GJjxuxFp3Cl/190ipaoIUrus/fsUSLWDp6OPLSverd0Vtu648yHnKO87R4BNtd p9cE++YF255mQ== From: Vincent Mailhol Date: Tue, 23 Sep 2025 14:39:54 +0900 Subject: [PATCH v3 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: <20250923-canxl-netlink-prep-v3-19-87a7684333f3@kernel.org> References: <20250923-canxl-netlink-prep-v3-0-87a7684333f3@kernel.org> In-Reply-To: <20250923-canxl-netlink-prep-v3-0-87a7684333f3@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=7HuM9GT+2Kd+y3dPkOdkf++eyBOX+SiqQUavEx1WCQw=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBmXjG6YC2+0ck0+KbqkeOEKgzP9z7VnnagU5sivURGVm zd9jmpqRykLgxgXg6yYIsuyck5uhY5C77BDfy1h5rAygQxh4OIUgIkYHWP4790nrtT/M1NSaeaz GSoWzZvrz88r2ORbLnJTui4mYWKrJ8P/ypIJsuqG/At71Fde0vlSanY5SbspP32OeR1rr03ccU0 GAA== 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 69c00720e9956cad986ea86fbba49285d76f51db..9ad062dee261cc7ad431959ef4c= 4bc1d24a2736d 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 8e75e9b3830a7a0dab16b6450622fc4a98219a9c..a2229a61ccde8140f3cee83ce6e= e66fcfd726a34 100644 --- a/include/linux/can/dev.h +++ b/include/linux/can/dev.h @@ -141,6 +141,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 03:28:39 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 2837231C591; Tue, 23 Sep 2025 05:41:18 +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=1758606078; cv=none; b=XKlnhfRwtaJh+B5JljNcVTg8GCra3Rck3PYIhJAKNrNO6Rm09bFm7xTlRGp+gTbDDfAiThc60dMAYXnQ8BdujG3iBvpOCZ690i99l9niAnYdyBNMCdSgw5BuI8W1TPNYIBL9qyeuwTX4WBseVZQvu32jXZP3dortkfl9IDn1VF4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758606078; c=relaxed/simple; bh=1biZK1FFNfuf1m10cZY7+frVmMOJ5/zVUzkW14nYRTg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=a36Ixeik0T/poICz7JVgHMzLEFpBvPtc0y48ZvNFQCdpT2TRwKZ7JIy9jnT7hfmR8Bp7tiBNN3bh4mHMjCMjazEBDRrQygVviIxTsKW/QXcIQFMEAN27Eb2kQnrlVIk9RLrQvf1Su8E7+nlh9uQ4WSZ1+8P0QbQKRi/Z4IpjevI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=TfgiNprh; 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="TfgiNprh" Received: by smtp.kernel.org (Postfix) with ESMTPSA id CCE7EC116D0; Tue, 23 Sep 2025 05:41:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758606078; bh=1biZK1FFNfuf1m10cZY7+frVmMOJ5/zVUzkW14nYRTg=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=TfgiNprhlzfFB6rvD4CaGjq6FYlWs0C9o9BhrUEw+Ez5quAak8ews4d77lmMCyyRv VuCt46IHjro//kphBTjKQU1yfNZU3j/uwTkzkYx2cRbXl1YT1rhKzy7cm+p8R7ewlY Qj9Rb51WssMlnZj9J7XJw1O4u1Uqr2QOz91EoCmCWQrtV9pZzc/52DwD2K8WCdJ7Ej WsRF/fLAoARo4TK9FWBJ1opuThb3zA7/wMz4PC087GNRHGTkaElkA8masShXUQmbXb u3Phti/SCKlj6EkzUzaJjLEji3yY3JO2M2XiLa6r/VP+qisuPLy0NBjG/YY4n+VCwj slYGZvXP9gaug== From: Vincent Mailhol Date: Tue, 23 Sep 2025 14:39:55 +0900 Subject: [PATCH v3 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: <20250923-canxl-netlink-prep-v3-20-87a7684333f3@kernel.org> References: <20250923-canxl-netlink-prep-v3-0-87a7684333f3@kernel.org> In-Reply-To: <20250923-canxl-netlink-prep-v3-0-87a7684333f3@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=1biZK1FFNfuf1m10cZY7+frVmMOJ5/zVUzkW14nYRTg=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBmXjG5bVwd3TXZRO+Z9cl7wbq/eY3VlN9Q7dhj/uTR5+ qYzGmJvOkpZGMS4GGTFFFmWlXNyK3QUeocd+msJM4eVCWQIAxenAEyk4yzDP4WrXzOV2q3nSxSf FvWqcjhvNF1vb3VNQk/8At3n/1dcP8fIcDXx1vH711p6uNf0c2x5bJ4ysVeqo/Ca0zHx4zKmcn9 OcQIA 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 92d8df13e886c8832c4ed8450675c22dc2e5b009..0591406b6f3207f4db5ef1d25dc= 5e0289a1d06fe 100644 --- a/drivers/net/can/dev/netlink.c +++ b/drivers/net/can/dev/netlink.c @@ -64,15 +64,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 @@ -86,15 +94,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; @@ -105,6 +121,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; @@ -120,18 +137,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); @@ -178,8 +208,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; @@ -189,20 +218,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