From nobody Thu Oct 2 03:30:37 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 9F77230FC0C; Tue, 23 Sep 2025 06:59:47 +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=1758610787; cv=none; b=IEbV020UYHum+kEaHyaMkqozQrf+QnJXkee4ZUTq+OKLHYTuiwwzSkGzfnAB94QP3W9VUIjOHpmfiiFQjnZI2z9M4pfmPKlHh42A93cOR1E2L7bjavKyJLoNyuJze/Fvr7bsb1W0DnXSeji6+rd5LMuGbD6VX/O0nhJ3jzPtbzw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758610787; c=relaxed/simple; bh=Ou2rl0hYpUZ4J+DceB3A9S+4eN1YIUuXOKAXbdhHuLg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=IYxVrhMtVOn0nxO16h6xkMo1grOmwhJQVqTHCqZCmq3dd38BZkD3Ozp3iaKmIwnP6z3Es6EKt2iqQ1Aavp1nqZJbWfmL7uABc0ru7p3+/5hcryJqNvBrV8RFuK00XowPPPF5IAqtNEanPJ2bCZ52zLSUV/wPI07WgLWYejxRYBM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=NW6m1H2R; 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="NW6m1H2R" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 111CCC116B1; Tue, 23 Sep 2025 06:59:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758610787; bh=Ou2rl0hYpUZ4J+DceB3A9S+4eN1YIUuXOKAXbdhHuLg=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=NW6m1H2Rc5tnCadT+2HqxC0v4kvd514lWQmFev3unIutBwJGs2dH+fwDulH2Aj0iL iHauMk+B/jd8J6XMmvjLeRjKsBgVU8gBj4wxLRxFnCRa3IrSYmgswstB39RtTzmndm 4oo+rExYwynMvwCPBBFJyiZfKwCOlMKD2rFR5KnMcvBv5vtcs8NXh7z/9A2lJOIfDk cclLC3Fsvw4YC/zEwGMhXzLWuyE996lKPqWQi65rK79Qjh6tcjm9JrVsaRl4VrN738 GJG7Z5mTBHrJDC/BBIBNm3/oib3hQwIcaHkuOV5C7NKLI569cgXpndcThz27d8noRu wikfKNRBX3ubA== From: Vincent Mailhol Date: Tue, 23 Sep 2025 15:58:26 +0900 Subject: [PATCH v4 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-v4-1-e720d28f66fe@kernel.org> References: <20250923-canxl-netlink-prep-v4-0-e720d28f66fe@kernel.org> In-Reply-To: <20250923-canxl-netlink-prep-v4-0-e720d28f66fe@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=owGbwMvMwCV2McXO4Xp97WbG02pJDBmXXFUFWbV+uXWuuu316cGMV8snRTZN2HZzpSin2oZ9k YZfFU4u7ihlYRDjYpAVU2RZVs7JrdBR6B126K8lzBxWJpAhDFycAjCRbi9Ghnu7bVz2ccx+LFSy blW6gcvP3Hnb2lt+r9/2d2ZK2LtrJb8YGX4kSR66v/D8Js95ATNfn9x39rLBxiS2rNa/ztPir78 +UMcLAA== 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:30:37 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 508D830FF1D; Tue, 23 Sep 2025 06:59:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758610789; cv=none; b=XwBMcns5TZeVXCUqnhFsFprDyNoGejU4Mco4Ev8Yz7JpUO72Dn9+bD4IW1VQLpPWQj1HAF5HiQhcxkpR/Nu0QfFcfz+pfHVuCb48t0vQBd4TxiVwst5/BtS/uy/t7j9XfEDsC70grH+5BJdJnBM/mihsiQPIK+bRrVvkN8twkq0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758610789; 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=TCqo/3iBNWTB36w80oU2KJwIA/PSsVjfSMw7L69ZlPeelH6sIPb7ch8Yt6nLbVb2dLHw+eF58xCPm23PHoaG8CIrP1Gy/W/L4Z0U9rgci0IGyIPKjhFrhVM1wHF5XX48267f2KVRj9ZboYcK8yk6IY0d4HRJFxkpKJ3xkpsOY9c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=QzQd1eQ3; 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="QzQd1eQ3" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9E2EFC4CEF7; Tue, 23 Sep 2025 06:59:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758610788; bh=REFhokzmVq+Rh1cbGlF+fG8TBZl94LtWmTGe+FAHboc=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=QzQd1eQ3qhTN399ozFpcOFFza+EPUyPiv8ZKVQdopP62c+lD/IA59OntCBqjJCkOr POLLkVqp0R4PMDfEmKzvdDenk4S2pxu5wk/t2zcLPanNlDVmVSzso27cc5qZ7EDsUy GJwemZiTDbRLGBGzwUgCEMsG4wk2EDisxy1pboxqUrSPh62U5Yi1Qa9jDN2t2GV4wd CJgBNQgqI8j0U8ybzSYjPPlJMqzyPqSA+dP1aHFmqLrhuFsuiSW60whFdREUDKCnpY OGucLuXbmszWomcaC9wPVzWVu7/EBwWSqwMWkvyHL6RXpz8GtIHtg7Y6BgkrX2G3bW 940tFQdz5LCVQ== From: Vincent Mailhol Date: Tue, 23 Sep 2025 15:58:27 +0900 Subject: [PATCH v4 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-v4-2-e720d28f66fe@kernel.org> References: <20250923-canxl-netlink-prep-v4-0-e720d28f66fe@kernel.org> In-Reply-To: <20250923-canxl-netlink-prep-v4-0-e720d28f66fe@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=owGbwMvMwCV2McXO4Xp97WbG02pJDBmXXDWidoYbqd2VnXTm5dxW1jqrkxMb3bmX/9yVefDUo 4lvGNcmdJSyMIhxMciKKbIsK+fkVugo9A479NcSZg4rE8gQBi5OAZhIEivD/7zCG/qL6o9X6Xnd M/d3X6HSyPOqQaLbbE1VSvvUbm+5UIb/aQuu5HYY7bEP91nAyjtb89VN/rK6xEXbla5teGK+QZS LAwA= 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:30:37 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 DCB073101D2; Tue, 23 Sep 2025 06:59: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=1758610791; cv=none; b=rxnJPnfwJc6HIJiEyOOdph0Wj8Dbdpfmed5yKeqEG0pDuajBVsCP9kwl4o4SblZLBJquAOxKHK4hr1zIkilfRpJ7cgYuWqA54ZKoJlqBHw+As7BuqAP7vTgLhKVTFnjfo7GF7kbip3+u0eXWqn/ETm0swTmzHDT772t/khvTAdE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758610791; c=relaxed/simple; bh=7GXiF2puI9MV0ynLrL3LnDqqLVjv4d6zMPfx4ftHtlY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=UvhQ9iwVyY8WEl9xy0EcQtER5mItAEWgLB4ZBQD5QueR4doRVeBXN/oeJ2JzY7AtHRsqMfuDnMRmoaPYHgxNy3SLulKdQelA/IG4vm86KlxZZYO9HuXQMRgvZEwG/jKdVgBNopBSqUC2RzsTAyQgTjUlCb0jWtIKCzb611mh3+g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=M4v5Qts+; 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="M4v5Qts+" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 390ADC4CEF5; Tue, 23 Sep 2025 06:59:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758610790; bh=7GXiF2puI9MV0ynLrL3LnDqqLVjv4d6zMPfx4ftHtlY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=M4v5Qts+s363PcvgMAoFtqu4lZiz4L6AUSXSQtUY/FVGfBuDcL9qTXf9SgMkYviCX 1maNSST3sVkPrQDR2qTjRkOGzrKBIkyombNEgUnQhPzApNvj1GeCbk2EftZ4xXJ4qq /MumC3QWbdHeyZS9rnlzG/nQBHY6WIQGarizoIzx67sGPq0qvJ58aXPbJS7kX5gaJL 88wcRYIXRXgRvsG3BwexvqbkR8GLGkOlYbVJFszxjBSwwJInIICIiVNVv6QJRA8a5D x14JUEg/gKqOSdXx2TQCt5trJ73GVgQj6USfCzT9Ppu939r/u279D1IWMco1FjLrDa vHywonEQuDZtQ== From: Vincent Mailhol Date: Tue, 23 Sep 2025 15:58:28 +0900 Subject: [PATCH v4 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-v4-3-e720d28f66fe@kernel.org> References: <20250923-canxl-netlink-prep-v4-0-e720d28f66fe@kernel.org> In-Reply-To: <20250923-canxl-netlink-prep-v4-0-e720d28f66fe@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=owGbwMvMwCV2McXO4Xp97WbG02pJDBmXXLUfd3OnWbNaM7xfPfW2VeQN4w6nzUfFlA35Dlc08 0l3CxR1lLIwiHExyIopsiwr5+RW6Cj0Djv01xJmDisTyBAGLk4BmMjuh4wM7yrZre++Mf+/Z2vl t9B7OXsNPpu5JuxmeDPJYtnKA4sORzH8d5lieU++JG/i9VMbRc5/tpw9+/P+pfcyDpzQ0Ds5izl gEj8A 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:30:37 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 843A7311586; Tue, 23 Sep 2025 06:59:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758610792; cv=none; b=a4emeLXSSiteGxnO8i3X+UfKpCJC1VEfqCRk5RI3RkE77z2I8kLliLVi5iaOXo6yP8vnERuULdfZLGXWELBzYdrOqaQYt5XCYGPeciS/Qdkiv9H1GRQ5m8DErzlR9G/Dymu8YSwl39hu6XAMsBIEgYPVQ6WZdEH1N333KfjgQJo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758610792; c=relaxed/simple; bh=YbwnjxfMye/PzcS1THZ1QtGxRafIoeUGUPEkh1iC8L0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=LW5C2WrNXBmvC0bJpB9gBBMG29PTsFa1GP1bKCMLCUKYPzsGvVxPSuiOgcUmp8CEhGit0uf7sgT1AbqHWjaZG3TKyLgquZi+JMHUEhKuYXoLG04e8tMq4cslJAvnIvGSbXFkAHKRXNFnUpHN6Jr065rdnXAZSrsFrEQ6FAksXwE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=tBB60qv+; 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="tBB60qv+" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C7452C116B1; Tue, 23 Sep 2025 06:59:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758610792; bh=YbwnjxfMye/PzcS1THZ1QtGxRafIoeUGUPEkh1iC8L0=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=tBB60qv+uo/+daSANX4YUwMARs93aREqLF1v1USM4r3awAFi4F9Ar49uHhNeWaDkc Af4Zw3zLwZSbtl3YG1VlNrwhtkhKuAqoflNmMQ6j/IDXcEnDzquYAAc85dM7O2b+t/ 2kuNmVIvgROg0BcNGKEauLaOSzspOeNXyWDcOfthB29ckwLRn43ycKUca+Ib0KGZVP hEnhNeXa9UnMqVYgFvG0nqAY9fn9mwsDFHmKRmRHISSosIjeZldEglC8whi5NcsdAD Mbd7/OGkLRL8amgam2vC0uleTBXJyqYImzkgVEANdIs64PpMBrkAo8U6PIrfk72MLb 2teNixUjm/SIQ== From: Vincent Mailhol Date: Tue, 23 Sep 2025 15:58:29 +0900 Subject: [PATCH v4 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-v4-4-e720d28f66fe@kernel.org> References: <20250923-canxl-netlink-prep-v4-0-e720d28f66fe@kernel.org> In-Reply-To: <20250923-canxl-netlink-prep-v4-0-e720d28f66fe@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=owGbwMvMwCV2McXO4Xp97WbG02pJDBmXXPXuqSWyHuHPfcKiJORWsmOZZCvX3btT/glOzkpN/ vrjsDF3RykLgxgXg6yYIsuyck5uhY5C77BDfy1h5rAygQxh4OIUgImUxjAyTLZPXt54pn2F/EHV pJWdx/ZNspGt4Dlf/eb6h+Zi/tR76xn+aVV0+Uzl4n55sJKrUPkj/+t3Fuzzd635lyFeZtnAHtj MBwA= 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:30:37 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 00E263115BC; Tue, 23 Sep 2025 06:59: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=1758610794; cv=none; b=e5eGWgOZ7MKLR6hpqdvd1b9zGhcxIB6IfTs9/+o+F+tT3kjNYDBQb0vI4vV6xOrtR2pvssMp4m91ZV6SUUFc9Aqyuscgb5+n13t7xVVTyRd1KF1Apb61bIzK1qWtNRTuVTHPqry27W1MSGbKfAGNWEQigbwMwiYqbTzMgz8P4Tc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758610794; 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=ISBQvOfXjGrTuFOPK2ynYiccqObM/9b/ZRZQC0q0WYnJkMovXpg8OrmaVuauYw/bVDn3lsYhAH+VKIP04PFQAVOs+Gt8lZEMCwk9NaltQfYG6vV4jAFPwOhcUAk/M/a1l0RodZkQ7kVZerF+WkNPWk+fQspqdaNb9pfUxmCKGYo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=kCRWJ6VE; 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="kCRWJ6VE" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6000CC19422; Tue, 23 Sep 2025 06:59:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758610793; bh=v3v+O363rC+dn52ot3vqRu7qNq/YGiBUd4dacgQWkrQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=kCRWJ6VEZNUcOneXDI0jY92DSzrKgVrjpopohYpDql5LIaVkk+NKKh4m6A8+mD4L+ HHW5YHkNbka5Ccj2C1fRk8bC+5LkSVm1xAwxCxCtvOuPURIrzsyTdzkGT7uRLO/XPO O8CZj5tkbA8UCcfuO2emo1eCPoLOYg+RFxUdP0+4voAtEySMtIRid3EHbYaJSzf7qv wqkCDA+UXqLGjsJiCasdOeipvP9cwohnIxRW9kkxGy42Tv2gz4H5qZjjaZ/97NC0U5 HXAIdGkJ6P3YpeOmQUuMgftjteBs51pP5BbILZvLfrzLXLP8+x5w5xYF07iwrbRWa+ lQu7q5hp2aq4g== From: Vincent Mailhol Date: Tue, 23 Sep 2025 15:58:30 +0900 Subject: [PATCH v4 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-v4-5-e720d28f66fe@kernel.org> References: <20250923-canxl-netlink-prep-v4-0-e720d28f66fe@kernel.org> In-Reply-To: <20250923-canxl-netlink-prep-v4-0-e720d28f66fe@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=owGbwMvMwCV2McXO4Xp97WbG02pJDBmXXA0fXfzKo7iT48aLR1n5FZs+PRec2v6U8YN575TmZ XPzXERUO0pZGMS4GGTFFFmWlXNyK3QUeocd+msJM4eVCWQIAxenAEzE7isjw6zt5zQjrl88Mdty 45nPsfLMh7d3xEvl7s2Je8/cwnVy9RyGP3weYgt0J5df6rxaZ7jKe8Nx8//HOL7k1m7g4QjKWb5 iCx8A 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:30:37 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 504E5311C07; Tue, 23 Sep 2025 06:59:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758610795; cv=none; b=J4uh2IIWsE2IHo5S6xOlPvWx+lw/OPlt2EcPeeInUFxWqQ3KbvUrfKGeuaPPFv6cqLvVkRVfMcF/HN8rFsWiBMUS+e3PQgatmqzW2dN02/IN/ZG2pkCt6TRwoor2trXouhE3BL2FzqweLSXFfk69AcFmBVvjYnz4NYTSUq9U7ec= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758610795; c=relaxed/simple; bh=nzN3dLaayJQUQNyfjfJG0vwlCtwEhYpqAcFOwwLzEmM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=sXLcN8pGP+Kw65vuC4L427jUNA1OHOIiFXHmLt03mIyOq6JX5iRJBmXbrd1G14lNdKzIGNtu2p+k+hJXH+5rmV8mMx+zFhEj75TlT0zapkK5DCNKYRtW0VcWl46Y5ryLXN6I+FUeSSA5z6DeJdhwLpIYjhl11VLAWymjHw/VBvs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=bCCYvsbw; 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="bCCYvsbw" Received: by smtp.kernel.org (Postfix) with ESMTPSA id ED789C116B1; Tue, 23 Sep 2025 06:59:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758610795; bh=nzN3dLaayJQUQNyfjfJG0vwlCtwEhYpqAcFOwwLzEmM=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=bCCYvsbwmjsjFaSEOHGLCvJ9mOUGpH6tBWHVA5ayMRjwf0Sd727LgMgMRU4yM2uE3 /xz+B8VDcj17MKtRxRiIpk+TWifx/laTmwoP+A/IKnEnz9EpOau2Dj8S9eLKhD1Fxt yLo5X+V3gddVP9IaWBGC47LxxyFQrmJ1DTXLR5RCsk2fOqRkvItva0erMPeQuo8To4 /1r+pJyqm/NVSRyMJ3V+MLDE2jUh8SPyU8HSXmu90thP4l7FABFlDX/0iY7+5rZacq 2HGGYDS/15sma/144u/YKdkpZ6Tco1bnG9McP1KLVHoxPGZ3iOCwWCrM3Ef6X8ub+W FDjE57E1gNCNA== From: Vincent Mailhol Date: Tue, 23 Sep 2025 15:58:31 +0900 Subject: [PATCH v4 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-v4-6-e720d28f66fe@kernel.org> References: <20250923-canxl-netlink-prep-v4-0-e720d28f66fe@kernel.org> In-Reply-To: <20250923-canxl-netlink-prep-v4-0-e720d28f66fe@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=owGbwMvMwCV2McXO4Xp97WbG02pJDBmXXI3ZSg8YZzeocX2paX4gLiq/pEPNrkaaRcF229WG3 cyVPV87SlkYxLgYZMUUWZaVc3IrdBR6hx36awkzh5UJZAgDF6cATESOgeF/ulV3W8X65Cf8XZqy pS9Pbqy+xtT2UJjlar3CNu9vmWfsGRlubj/qspDfV/LlKtV7/vzHRc+2/0v6bS569P/3kC/BEZc YAQ== 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:30:37 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 4A4D93126BE; Tue, 23 Sep 2025 06:59: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=1758610797; cv=none; b=dG8wREEa0UjZJ73jMVmgvwLjrFA/1Sf9qcsp50lXe4FSi2an+p4zccUWnnsCa97tAoEfwzFbGgMKFFlXT+iGq8koD3lAF6baWYWB7nHzJpWY840AqpL9rMp+KRoDcTFNfjjgsTjal6meMircwYODU8WuKGAXsSODXEHHjT0DLNM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758610797; c=relaxed/simple; bh=M9/FIIXWlcfUEEFfRYD4MlOKBHufakUc+q8CDcjTqY0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=LZ64Urm0S6VloRTgyAOyR5aWp1fhGSBgg8wpvNkKDxlJ6OXRciJ+4yXd3Ck6284pOfo4Y4OpzlNyQSvH4Xg/TMufaS3is7oSc+3My1fyhQWRA3tySB4jLhfZ6BT8GWOvN7cDaeGqZU1U9/JdDbuOplTZgUuZwk8K1hbiDVI5v/U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=WEjQRbbt; 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="WEjQRbbt" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 865F3C4CEF5; Tue, 23 Sep 2025 06:59:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758610796; bh=M9/FIIXWlcfUEEFfRYD4MlOKBHufakUc+q8CDcjTqY0=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=WEjQRbbtowBkXFX59CVu5l1G86KjwL/KuUp6l5h0ayVcFZf81GUQ9ZAIJ9G0WJYgK SsIWC04ZHgukFXelnLjd9Fzf+EqC3VyehjW1HAxFXrRWzlHDTCs2lhX34iKc80Iyv/ tcIqo5nNfVItWzdP+jPB9tuX4SgEblVDuo10W0w+4DL7oYL0erjH16cJl6JTt1w9nO EqVy2QkEY5YsdN8t3XYfkEjW46JarxyDIg2J8usG+S34fQoFAICTtACLf0yxSsGypG pLJh0r46a4+QbanfYLxLTVaWu7UT3Y97OpIeQMTiuUnm3SXbjwd6OWH1E+xqlprv/d Zqx4/xDOAg6zA== From: Vincent Mailhol Date: Tue, 23 Sep 2025 15:58:32 +0900 Subject: [PATCH v4 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-v4-7-e720d28f66fe@kernel.org> References: <20250923-canxl-netlink-prep-v4-0-e720d28f66fe@kernel.org> In-Reply-To: <20250923-canxl-netlink-prep-v4-0-e720d28f66fe@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=owGbwMvMwCV2McXO4Xp97WbG02pJDBmXXM1UN2wy9vOuvPggPqpuzSa3V0//qJzf4Bd7Tsqn2 F8k7F51RykLgxgXg6yYIsuyck5uhY5C77BDfy1h5rAygQxh4OIUgIlk9zP8rwuNnvngScHJLzWv nFcEeZ95l6pXzz83c4M2z3ITZv1TvAz/rGzMi5O8gytyvv5+euvoh3kxX3JsLu3mnCjwivVV/4f fHAA= 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:30:37 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 D43A63126DA; Tue, 23 Sep 2025 06:59: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=1758610798; cv=none; b=D+u80bRnzZZQPd/I8IFNpyuFBZgwpVzhKiI7OtEJxIPTgXmy9/WYGrCzswTur+LZ4Y840lpb6soNVigGeQxOJN+aUUPoaU0jNB1/m19GmhQdRnpClSb07WsKvWuUDJ2xqD94BEoQcahYYI8R0Bz6d3nxR1EgkrIAVcOhtlU8edU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758610798; c=relaxed/simple; bh=WAKm5KoMoYNrq4ugY2CVCp2v6gFNBH2vldJXBcaEOHI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=SEIrUUizkEZnNkONTIQ701+ijJsXJf4E53XKjANhXCVNG1DxuMitURn4yQFkRWtwqpA6glLcGYQrpT9E0N9GXT5T307LaMUZsljlUXA66lL/APYkMCidpPwMBaOj62gNET76ecV95Vx32t6R4kBas6e8PUjB2ZnbqkhY3AbpwVw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=rHSf/qMm; 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="rHSf/qMm" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1F243C116D0; Tue, 23 Sep 2025 06:59:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758610798; bh=WAKm5KoMoYNrq4ugY2CVCp2v6gFNBH2vldJXBcaEOHI=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=rHSf/qMm5h41BT/6myD+dUwEO1YA1jCT6gewmoKi7T0GdlxPJaOAZT+ZohreJF3Zy ZmDo0CQTgaMl/XYGYNGLx8xkHScNy0qII311FZgkEh1Y+ENHQ/OjsXkdy6hzIu5A3x mYj1m+ZUTJjvi3IHEXTdephcYdvtwG1pU/WasCwYp6zjGFPFufGYlveByJNrifLzhh FhBIkrgeTw2f3fffTvbLiFrJbTTKaM+HEflxOEeJ2ic7l/xy/MuWqcNoQq016365h8 WqV23BZtsXeQBxGhrcR28ofX4IQvxTx7eLI7zx2H9SeIsnCx+KkNcGyZApfYLtoQ6r BhG36OEY4p2og== From: Vincent Mailhol Date: Tue, 23 Sep 2025 15:58:33 +0900 Subject: [PATCH v4 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-v4-8-e720d28f66fe@kernel.org> References: <20250923-canxl-netlink-prep-v4-0-e720d28f66fe@kernel.org> In-Reply-To: <20250923-canxl-netlink-prep-v4-0-e720d28f66fe@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=owGbwMvMwCV2McXO4Xp97WbG02pJDBmXXC1uMD15vykgNe/0FL+1d7iT7Ti12u/nJjMuu77qz fVlLeJ6HaUsDGJcDLJiiizLyjm5FToKvcMO/bWEmcPKBDKEgYtTACbykIORoWW/27YVt1///JIQ nT07jmnT9Elp7ga32Fa5m73nEujIa2H4ZyCUkPzwY2XliSiP+TZzZ+V+X6CsFKxlnVq9MPhU3Fo 1fgA= 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:30:37 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 7B32F3128AD; Tue, 23 Sep 2025 07:00:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758610800; cv=none; b=PGC3jyaj5+TnOdS5KxWaT8sbNAbOEZkL7ZUUnb2wDuDOQshFMsN6oNA1FiBXaIld96iGkBhswWYybRrWfgTH2tsZ2joqCj9ZlpuxKd5h7ggnCMmfpKwf+BjFXlVkmqIUdUg5i6OL6uafbNk4YFuQpbaavIWfavxwHkDZn71o8Zg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758610800; c=relaxed/simple; bh=o4MugYdXfmhUPXOXY4Q6rh0kdu4L448448o6JZzxGa4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ow3lMwiMj96c5Q0l8ettG9eRZ5bGQOieb+h3lTrMs56dRnwWSBJpvxvl1CfoT/8hp7eQUe6XdSEmTPm+8+wXrkZdfSf0E9Z64nd164adqF+yE3Pug+rSmjQwUEvfxsU1LPSTp60aC6dvKHuc02OOAXSmNRfnmSbvuTcYTrO0FMU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=PzFO/IFa; 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="PzFO/IFa" Received: by smtp.kernel.org (Postfix) with ESMTPSA id ABC1AC4CEF7; Tue, 23 Sep 2025 06:59:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758610799; bh=o4MugYdXfmhUPXOXY4Q6rh0kdu4L448448o6JZzxGa4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=PzFO/IFavyhqfzeQg5GQtXPQXi5PjvgJUu0BCCH76E/IXFdf/xU5pUnh1EtOLOv0U z8k8rbsR3yefsW/SYv1+vnJndjn7EojGFLZrymGQmuw+mGlFCJq19ADjT7pd66BfIT 4xBbnwNIy2PDtVXMs7ppVmW+hmgZJR2uohE1wAghcALEmMam3iiAw9FUHK4yuF2K53 iJAPVSgZ4/uQcrZip1kYz8j5daxlpi95Rj0UoaXv25b3LDPrWWKlzLVIZe/PoewCSX R+3Jks3LxggrhmEzzTfb6gFcE8ZLSe98S2nJaKcLXu4zvf622zkMgUUVO1e2dSIUzg 9mHqTqT6kb92g== From: Vincent Mailhol Date: Tue, 23 Sep 2025 15:58:34 +0900 Subject: [PATCH v4 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-v4-9-e720d28f66fe@kernel.org> References: <20250923-canxl-netlink-prep-v4-0-e720d28f66fe@kernel.org> In-Reply-To: <20250923-canxl-netlink-prep-v4-0-e720d28f66fe@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=owGbwMvMwCV2McXO4Xp97WbG02pJDBmXXK2lvzCHf5rF4Z14+u6BQPPHNxKWxe3S881XTT7pW s0Tcpa3o5SFQYyLQVZMkWVZOSe3Qkehd9ihv5Ywc1iZQIYwcHEKwEQCJjL8D2uZGrjef2b+nOma bUrxobOffRD6mybUkLif0Ww6w2KG7YwMD5Kanr91n6nleVKp/PvUFCf1/Dv5NRqBc8Jbg+v4Ki0 YAQ== 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:30:37 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 E4A853126DA; Tue, 23 Sep 2025 07:00: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=1758610802; cv=none; b=hT02JU3fs5Ny6qccqFdDyHqDsApHAR+hXquRLufoU0W/KXuETf4tqwQk8Pg2Ox1Pv0Ih3grqSs5qcO1RrRaMDDisqPMV7FZzaqrd1P7VSmC7NRVuPndR52ynKCwL777cqU0XxqLDjdB5O/RaoIONVnDRGve8QGOes9+cexxStpQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758610802; c=relaxed/simple; bh=Dud2tKNYSuJSlB6InOKLskOp5O1lGbmhGp2orl1cCrI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Go7OQbLUL7PhlbYqrcrCPeHFJwAUZIrA75cxaLA770JUg6DlsivjDyz+QLMTPqfzF4J+f/1Al9FK9BPdnCNZ+zon7WmRC+XpxW9ONWG5WMp0B/51zPGVAfWYjhuXipyIsJsEcmHbzVQJmucoGUg9d7uQzecczS9adS4t5J1SAws= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Z/PEIRBM; 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="Z/PEIRBM" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 44BC2C116B1; Tue, 23 Sep 2025 07:00:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758610801; bh=Dud2tKNYSuJSlB6InOKLskOp5O1lGbmhGp2orl1cCrI=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Z/PEIRBM57H9m1e5D69I76/EhKJuG64CZ1l0rYh9MLpEaMJQ4t7Ybxw23JyA4Sc8v rJTgS6nSGKKvTlqq2HPKgNyYLX2drqPfn/lhoWwLvGzM2QJRQgGDFwYC+cytkVMB8s 8dsKkZpqCd4v0VvZBvhohK2mXBqGrFDrecX/NP+uS0varPG3eUmFzQRopc7XkRFcyv iE9tJ54NxTQJdthLzHggaxAk4WhtAuAQ77a0oBsysN/qeLTlEzjfxXvkuNdsvqJF2i 73I7/2Nloi2lv3aQXVhqzlKgrCsxb4k2T426Vg40TFVd2WoVXOp7Rgn0NNo1orFZZg brF0YWqEURqRA== From: Vincent Mailhol Date: Tue, 23 Sep 2025 15:58:35 +0900 Subject: [PATCH v4 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-v4-10-e720d28f66fe@kernel.org> References: <20250923-canxl-netlink-prep-v4-0-e720d28f66fe@kernel.org> In-Reply-To: <20250923-canxl-netlink-prep-v4-0-e720d28f66fe@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=owGbwMvMwCV2McXO4Xp97WbG02pJDBmXXO0e7L41u7ZxepaNgfGNFi/NRJMbGx7VRd2/zPvpy yG7nec1O0pZGMS4GGTFFFmWlXNyK3QUeocd+msJM4eVCWQIAxenAExELJThryCXXVdibNNNiz3v Oz99YFRT2bwz4rfUPFvdU4zLQi72NjH8r6x+8uRCwxHTD1U8m5ele9ez/FxmfMFyVUb7KqcX6T9 /sQMA 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:30:37 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 47C883128CA; Tue, 23 Sep 2025 07:00:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758610803; cv=none; b=uJgJ0Vyov1Do3SWop/VTAf3MtkbyjqGAM/tRKwEyWd3ht2cKHpKYHIaDUOejxydbaaJX5UcY/MTuTsotsA6rdSbs9fN+voYQvOdNDfywBfNDe87g2tdtlJXUUVmAJHjjp3dad4ahKTuyiWnzCPfD1YGJtkVB9uEhqFJzvA1uPFM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758610803; c=relaxed/simple; bh=p+xubPDbmlHlPuLjAhtq7k8gryVUlVt/9NutQMUf7Jg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=QxC5vKdiU9NutXXTVEqtPN1zQi+WZUCxEE7Z2BjAEw8OPO2cbkrg83mPBbwifRONqHgZBbG+o1CqvXQYxwc3VThacLectx78fVG3sh0S/xPjdBH1cp60Sr+u6F/uZYWRRWygIWd6en8vZUxjkqM1aLVz+gOtcfJz94EM6KknMfg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=rcEk4tgN; 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="rcEk4tgN" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D2CA3C116D0; Tue, 23 Sep 2025 07:00:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758610803; bh=p+xubPDbmlHlPuLjAhtq7k8gryVUlVt/9NutQMUf7Jg=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=rcEk4tgNkQLW5DSOhmxlKcNqvp8Y3vdOIUr0mWSD8ePJzEpgfEf4o/P6i9Gi53WYr mLGUVQMcww/74okWZlpilMBA/HzDKUrDkJAD+AELmYzIycDGvyHqrkUSuZC4AXN9Em 8zkTuarDr+LKxkjKysV15d7zIFqomaIPt69EGrxjlOU4XOlfuHUemhQ3WBrGnsJykj YWpb7AjM6ogvf0oM52kopXIqF51Hmr7qU7wM8wUXr29WFnXmN2kZtY00A4kHks1vaA QDSimW7kNnrmQ9tqGufdCmFoEDt/Ol8up6tNwPlmzLPWZtVD9sg2mrh9lMjk7TnBwh mGStVSDH0tp8w== From: Vincent Mailhol Date: Tue, 23 Sep 2025 15:58:36 +0900 Subject: [PATCH v4 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-v4-11-e720d28f66fe@kernel.org> References: <20250923-canxl-netlink-prep-v4-0-e720d28f66fe@kernel.org> In-Reply-To: <20250923-canxl-netlink-prep-v4-0-e720d28f66fe@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=owGbwMvMwCV2McXO4Xp97WbG02pJDBmXXB1ThA+HzZpZzhn45nAl/4Y5pe8Xyh3uO+o9mfWHt uRKF/etHaUsDGJcDLJiiizLyjm5FToKvcMO/bWEmcPKBDKEgYtTACZiFMDIcE0o+uEf9+i8JPd4 O/8ZzrvMRUI3uq0+kl0rnSYvfKjmHCPDwoY9i6frPJZqMmc/kd5aErG7ePYOjlvR8RfS183wMFj HDwA= 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:30:37 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 2EFB7313D71; Tue, 23 Sep 2025 07:00: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=1758610805; cv=none; b=jyvj3dYIlWISdy/LtWa7ahoXmMkW5tVXpwOlsoDpkldt4S2ewxtpruVGPGVm+hyz1K61VVkuTYZHwbQPI23y+sf9I/S1KulDw/d+jX/OG/A1YYe1K3QcsT1qU6nAqbJn2JU9cvoDpnDrpTD/3JO+jheGYQYrJyjaGk8xgMgtkZ4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758610805; 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=tkGjM7LLcEV5udUw7cVbOtRknVtlNoaIxZ6ASatH5lHMomFLbECYpHzbW2u0R5dqB4W7y1dlSgY0xk3JDmxgQx9GyNEuyp6xrcEm004B6Zjwae2XmeCFYfUVuy3OljWOCxl2KfUTOVpNLmMdL3G+b8i4QjjiqlJN/+tHZGl66d8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=pysIleVr; 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="pysIleVr" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 71CB1C4CEF5; Tue, 23 Sep 2025 07:00:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758610804; bh=OHRQFZqsnTAMm/R0kHHlL+RdEIOPDbia69+QsOEPrOc=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=pysIleVrQQ7ImCXi/ZZTATOXXryOXWT6opjbSweUOWquGxzSNznF81pAHbMkAzO0r fZYOh+3Kao8O+AM//d2EjrRoqLRsUe4QC0xBiSMixc+4V3/SHuvuLV5ew7nolLcKVq Ejd9g1S9zps27flYFYLLKOlQXaUKaLcrTRnVWAwGIVBsya/5r5FIfB/VI0oPNy+gLY 9cp95GMvdBNU9CVFVaDHv2ZECSSbYeMcI5akv1DMjqTMFJb4uFrOwOBCsbfJqj8LYl cZFB1epW55oNCp5EgT4O2C++UQ7g+c96AVthEdZQweZeUrrVaP5nqnSmjfng38P017 oAmzfL32gTnpQ== From: Vincent Mailhol Date: Tue, 23 Sep 2025 15:58:37 +0900 Subject: [PATCH v4 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-v4-12-e720d28f66fe@kernel.org> References: <20250923-canxl-netlink-prep-v4-0-e720d28f66fe@kernel.org> In-Reply-To: <20250923-canxl-netlink-prep-v4-0-e720d28f66fe@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=owGbwMvMwCV2McXO4Xp97WbG02pJDBmXXJ3XCgWu2BCVdjnxpnhoVNu8O9P7a5W0bu7210x73 TXlas6WjlIWBjEuBlkxRZZl5ZzcCh2F3mGH/lrCzGFlAhnCwMUpABOx7WL4H9Q0d92VFqkjL212 2P2/8ClxDluj6mn2eVccTsxlfB24L4eRYXL+/50dEg1HIhomHpLfaTPrbvznwF9/nqtXMq6wlBK z5QcA 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:30:37 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 6B3C0313E25; Tue, 23 Sep 2025 07:00:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758610806; cv=none; b=HuU5rAOQ8Minzp4tpy/iUFsGpxx9Rs8yy121PqXcqGLbGWDEdVi05AkLJY6PmF6mJv9UAEe7ih9mx9Yxrb4dJrsaF57ouAXQOWgfmZc06LftdVmwtQTs9g/3kMlDN5a5mSpn/J4HqQVU+B+DC3cCPVEvvYwZVW7q+bLtRL2st5U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758610806; c=relaxed/simple; bh=b+C6iL5E7JnwjQ5NjxVbqJevhBvTZfzFh4fIjIFyacE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=tB9RcGP5WzZzsdt1Ms9vbm1lCL8ZATG46JdCoKPCSX5jpJeAbn3p7wUnuBeAmYsBOlK07nNlelZuIFV+emcqzprLf69YtZ8Lur0euhvrZMqdeD6ozDzu/nCtWc7yEyf4h4DNTF4lEl9FTCmjAmGD+RFveJ69oVNOncmccsRpluk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=RZuvLj/t; 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="RZuvLj/t" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0FC55C116C6; Tue, 23 Sep 2025 07:00:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758610806; bh=b+C6iL5E7JnwjQ5NjxVbqJevhBvTZfzFh4fIjIFyacE=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=RZuvLj/tb4nrqFuBRfG3mVMHIjMWtHlm8zqxcAe4OsraCQTkzbbkZ2wYSoznq0ORB 2gAuhv6ojMIj8DaDEyam/7haMExfO3Hk5432ovlyHeMmUgwAhdMifXbz55GMK2GBL3 JxS+Y0yWGxj/whVNwI2QnvgV2itcbLaG+SvpHKkibeIIFxUdmTQd6ADH4iBoWZeVrP APvL+N2KCqPSRXCg1XfsB+xTqhu4hlU0MUgJTR8BsMD3ZrU8ADfxYYHpCbsQd8ofGI e9rObSRDz/pTGrTH9UqeaMH6s2AoRpRpaObrIU2GaJYMFJTwIZbkjP6e1IHIxsigy3 vH+IgCKWnao7A== From: Vincent Mailhol Date: Tue, 23 Sep 2025 15:58:38 +0900 Subject: [PATCH v4 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-v4-13-e720d28f66fe@kernel.org> References: <20250923-canxl-netlink-prep-v4-0-e720d28f66fe@kernel.org> In-Reply-To: <20250923-canxl-netlink-prep-v4-0-e720d28f66fe@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=owGbwMvMwCV2McXO4Xp97WbG02pJDBmXXN1uFPsaW0452J3JdvdMUMymddNvcFa6zA4Q0TTOe KoetPFdRykLgxgXg6yYIsuyck5uhY5C77BDfy1h5rAygQxh4OIUgInkejL8lci5+21t/q+3qk+7 5oiJWAuFHcg9dkCFoWGb6jrFJS969jH8d1p4Lu928MmAxEV/ew5x7P38yneHr5esQl/0u9Wzu3z ZuAE= 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:30:37 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 4412A314A61; Tue, 23 Sep 2025 07:00: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=1758610808; cv=none; b=mLD9GO7ItbR1pqLp3z/vpahNA871BDw5rdRF+Td8Ni2ter7f794vOL+FRG7b7QEfHVPn03SGSRSddvH4X8uweyI+Oe/xmB3DNiRPl8p0JofgnmX4FQf+Aopj9tAt1oM1GDa9w8h4o6kfAlSWFK8XmgtHLZzFDgf4nlzFjKp5s1U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758610808; c=relaxed/simple; bh=vvz9ul3gCi9NrWnP1mxXcrN0iSXDjogBTe50AwWngEg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=UDxXp1nd2bGyHkLcyzCHH/Bx01Ed2W5LiXjWqXbffuJO/7ougCQlY+4uEpvfjrn4DtJuV9fKNeVYjEEwENdLCHawlreBjXhVJBx5xA7wNnxC87GLVT1Jh9/58nD+unujuLoTQzG3Y9zies9RKQNIr+e/auiZBvmpcS+CqiuYc2o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Bjvj78sd; 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="Bjvj78sd" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9D4BFC4CEF7; Tue, 23 Sep 2025 07:00:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758610807; bh=vvz9ul3gCi9NrWnP1mxXcrN0iSXDjogBTe50AwWngEg=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Bjvj78sdxJtMQiOyF+hIrqfDtVPrRLxWeTrQN19d/HdNKqwtraRu3Y+CNfUm8sGMv 4X3ErLnA1pnQ3orTCkf4bGxB0R0vx/FaNTlO3mXjDWW7dCvPCeDAjkMddHcyGa31qv jRT6ddhxslG8YxJC+89tAOcsTO4Qs7+ikr0sZ4Do0U7066QgQEATakIUdR6xwXbSvr rUBxPxwukj87b8a8YZP7a/DTEYAT8fTr4IRRT/Zyc/L7lTJ9XMY2bZgq1RUrueB86r mWK+dkvMkn9GY9nWMIJ3nLr/2eIOHMXLslKjtAGhqVVFlnthnftbFysWdyN37mQq/0 mGa6OXRkkrQMw== From: Vincent Mailhol Date: Tue, 23 Sep 2025 15:58:39 +0900 Subject: [PATCH v4 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-v4-14-e720d28f66fe@kernel.org> References: <20250923-canxl-netlink-prep-v4-0-e720d28f66fe@kernel.org> In-Reply-To: <20250923-canxl-netlink-prep-v4-0-e720d28f66fe@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=owGbwMvMwCV2McXO4Xp97WbG02pJDBmXXH1/Bp1PcpnU7MgT7djIf0Vvk+1Hndnanhwhe1K6v JpjHLM7SlkYxLgYZMUUWZaVc3IrdBR6hx36awkzh5UJZAgDF6cATIRrHyPD6Y9btR5HF0lubVrG de2J8v8Fe468vJwSeOolQ63GgoCVcxj+2VpNSFvaJNPpt0mBy4inuf/UN8/tLhMqd11Yp/fJLPs VDwA= 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:30:37 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 8DEF7314A7C; Tue, 23 Sep 2025 07:00:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758610809; cv=none; b=BHRS6he0tBS5OSL5AdZKjFI4v4r4gO0F7FeqvW5Fk+ElvOsVhCfdW57Q2KykFgVuUJ6HtNy7+22IDF64VDstKZwEY/QBafGLdab03pImYVXxbdPGv3/jZqBJCPEsHRo4yAXmGzRa+Se88T+epyrM0WccjFyLCYAMnKUpBXrCGAo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758610809; c=relaxed/simple; bh=g34JJI4MYiixUaRVCWnqaQWymZ4kL9no0rZXQlvaevQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=GOmgL4MgstK/tNvxBSEIY+lZG+nF5o6GaUJrlhgvDKDhxvoAzhz5KUjAddtlcAVKBytSwgMD4MPRxq6uoVW+w2aJ/toqdR4D2dUy+TxFKvXGH8+5ORrFSrJlQqLCvo5A6XOa28CxI9TVr6ESaDeA/slER9QWuNmMb+dzfe0eDII= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=nYkSJ7SF; 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="nYkSJ7SF" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 36CF7C116B1; Tue, 23 Sep 2025 07:00:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758610809; bh=g34JJI4MYiixUaRVCWnqaQWymZ4kL9no0rZXQlvaevQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=nYkSJ7SFCHxSESmT67t6zIcXyANzKV4DzB+HzVVPpq+VdFGrxSTzcOuWqbGSjRImS 1kZvVCsD6RdFvXd07hqTAr4qNfWUaXDoVxx+P00JbOPwPFOjxn/dnHmdrZVrhVEPwm cs0lBTpxzrBcHBs5Wxfuctylael9EPK7v2bd17a0zLIh/8Ph9aMkhkDd20oXec75qx ai+fhGR8DyVmQtx1tZ/URb8qdF8yEUMByHUGd3/VEQnSbJbPuiDua6X/3s9M6gQTDl O4d1FGFVXsM46qMUIig+xbwZW2aBtChi9aSxtywj1M2FiSJNjKKJHXsWm7EdX0I01/ Pc7YsSBItOkvg== From: Vincent Mailhol Date: Tue, 23 Sep 2025 15:58:40 +0900 Subject: [PATCH v4 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-v4-15-e720d28f66fe@kernel.org> References: <20250923-canxl-netlink-prep-v4-0-e720d28f66fe@kernel.org> In-Reply-To: <20250923-canxl-netlink-prep-v4-0-e720d28f66fe@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=owGbwMvMwCV2McXO4Xp97WbG02pJDBmXXANiSm/e1N1Sqj3/4+8pcRYvTyn7174oX9L1bOHGh tUr7HqqOkpZGMS4GGTFFFmWlXNyK3QUeocd+msJM4eVCWQIAxenAEzEkofhr0Ddt4eHPn1NPDP9 zKklP5pYLl/YcTg7RZ/Z+dlH7tgrW0QY/nB0Li+/MWGS3M59bxjT59VFM7bUyiUVP/6q7XvbnMX KnRUA 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:30:37 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 957C4314B7A; Tue, 23 Sep 2025 07:00:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758610811; cv=none; b=kiLDQXwuD+ZK07A7wvmQtGe+6IDfk6Py+xnqAIzcsbuOLx0PWvVWN6vqSLkeuJyiZzuiBAjO+BGHm0nAclbi4jiF0XLr4f76XeSfAl8jD80SadiQfG/nf/vBLJUNzZfYL1/xTxkaBRIazulXTRt105dx2uyynnqnCXOxhFLgocY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758610811; c=relaxed/simple; bh=5sfUrtoOZp4BjKuJF6RyWHTN4aQhqobLwkByaxTv0as=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=O69KRplhBCPQVMBb7fOz85tJEQV3w2IBMkdNfbakPIZ6FwLKsHv74dlet0xgKTgr8EkR/01gvlCMANu9AGsw9LfygU5VuwnpyMSeGChP7i2jQedpvpaogw7Sn/itIT5myes2fCUO5TUAFKqASsezKQ6su0vGOyeikNaRmp8x+Dg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=fLahSg2u; 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="fLahSg2u" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C3D0BC116B1; Tue, 23 Sep 2025 07:00:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758610811; bh=5sfUrtoOZp4BjKuJF6RyWHTN4aQhqobLwkByaxTv0as=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=fLahSg2u2GoJZ5uWvLQAu63JCu8ZGFoaGK6/Y9Lx+lB/xqbOnmDkRR05AF3Bv9yql VZ7svWWF8py5JVBJFLg0+8ip0jZiRVqiQ9knHFc70Z+qJnJsUAL4YwG0M+pgQSGtvX 6PlE9nHFd4iCOMcp+lnONvrQBrez+3tcYTEVwrBZtzbkGsPZBMUnpa9Rdiqrqmgl5N 3jZEjXbui+ks2H5VGuuApGnfT1h8htq0GKCYZ4pv8GB3Yh9r2ljlaoKwVp6MtJ+MD8 nGZDZUFzUzoNuRKgCOr6mjmIyVhL9HTfeZm8NDLoLWqSuYS1zJEh74OOnI5OhsTWfT 9pnTMjqre2fqA== From: Vincent Mailhol Date: Tue, 23 Sep 2025 15:58:41 +0900 Subject: [PATCH v4 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-v4-16-e720d28f66fe@kernel.org> References: <20250923-canxl-netlink-prep-v4-0-e720d28f66fe@kernel.org> In-Reply-To: <20250923-canxl-netlink-prep-v4-0-e720d28f66fe@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=owGbwMvMwCV2McXO4Xp97WbG02pJDBmXXIPX35tcG3//qb90D5uL7LzenhkiFed7v8nP7ajan aF4bIl8RykLgxgXg6yYIsuyck5uhY5C77BDfy1h5rAygQxh4OIUgIk4cDH8LzMOKQ5arRE9573f nShGP/PZVy/5HlfX/sbHO2P7V8eG74wMS+Iikjxup2Vc4v1698DnvDv/XgZfOsFQM+3Z+6+nRNd WswEA 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:30:37 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 18546314B6E; Tue, 23 Sep 2025 07:00: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=1758610813; cv=none; b=AoweYOkJwir4CJCiGE+GJey4DzcNIdAmwf6gh4GBMoYOjH4VskIQvEyuRpzpAL7h/3HTVjyoLVtjnrTrGAHqcYSQdz0mDxKjwRE0U3vZAgcEy4lA5Y7cWr5rFmYJcHdXKQFOShbVaCDNMtZCguPBFL6x+umHI72TmHGUizBCwVY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758610813; c=relaxed/simple; bh=D/fnxllUMFFljUQVKz57aRLrEjBeJpnOQZizLzQrtrU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=FZugpGmIaJ/f7+o2vdIz1cAraNDrh5RC19LLzOjFh2jdAOyiZVFKS5a1fYboTe43tw0mjvmwAL97D2giprCt4bbm0DZFUrdqtSbzkdNNCAgJHvC7KJCBDEh5Wjas2r5G3RQCiwn6zChpipK5RhBM7hsD5H1PB85Hy79t4FtrHJ0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=k77K705V; 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="k77K705V" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5CB40C116C6; Tue, 23 Sep 2025 07:00:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758610812; bh=D/fnxllUMFFljUQVKz57aRLrEjBeJpnOQZizLzQrtrU=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=k77K705VNg0DHyOUFQbMEmVFzvBy2c9GDxOJv0pnwRXHaWQGCSh+dqSVq14U9OXuc B/RMyn322UmvKC9g3lECEisePyxJDAD4b/oqQSIazVapQk2dANMaAIsfjvhmbSJR0q EVZJBCEyDqQdp30vho9A1GsqxhSWcBI6dFledshRoi5vEOOEAIsGc3jskk1UQM3aRh YDvoiEUMGAUhnck7SROTBG2QN9t4VYf/OW5ZhiEZ247EmaURfc1vszvpQPqHmJWhAO RHQUCUMDI91AgQBpHocnoRD8rVGt7UO9Ul6FPF871S3GaC4lSofPOVzMhaK05jIbMu ICJ/X1WyiLE4w== From: Vincent Mailhol Date: Tue, 23 Sep 2025 15:58:42 +0900 Subject: [PATCH v4 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-v4-17-e720d28f66fe@kernel.org> References: <20250923-canxl-netlink-prep-v4-0-e720d28f66fe@kernel.org> In-Reply-To: <20250923-canxl-netlink-prep-v4-0-e720d28f66fe@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=owGbwMvMwCV2McXO4Xp97WbG02pJDBmXXEO33kz5Z+07I0W2a3nb3zaZNJZTB3af9Gz+rrnxd LfEXHnzjlIWBjEuBlkxRZZl5ZzcCh2F3mGH/lrCzGFlAhnCwMUpABP508vwv2K/UKVhgZ+lvG3P b98jEz9u7rv7Wl8n63yUt/uOAMW7Hgz/a9+oM7G+KtEMsun72J1dlPtqptm/4twPPy9Onrmk/nE WAwA= 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:30:37 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 9BA07314B64; Tue, 23 Sep 2025 07:00:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758610815; cv=none; b=K9/RgQ4h6e+OF/uVIgDiBayv/1pIZjQRM7bibmtnGDxhLU/ZZrZ4Cb6brWJU9dklnom9yO9Z6PRA/3MJM8/iVuwHOHhjGi3rv5e+8RYsW+y45KK8gyfSAz5sJ4dCji2tooa9yyPx6xgP9mxj5OwObrG3UCK7cDDbo0bwpQUVFEQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758610815; c=relaxed/simple; bh=F7MyAD4vh5cxeyCtARMCnPwZM8B/TzhziXFFTs1nP/Q=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=LvrSPXXcAzbBXMsYH7gsIC61ZX5aGUlErPzbD385rACnLJbt7xmHf3R8aSHHBPl9S3yWHc9Nbrad7ah0f9oAat+AmGzpkoTXSVVz+CwUAPKh/legaEEdwRJ3K6AnDu1qOLieIpIEkVDlLGOQo8JxbPuEFn3WY7ktKBW0uWUeFrU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=hbh5ivIm; 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="hbh5ivIm" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E9A1FC4CEF5; Tue, 23 Sep 2025 07:00:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758610814; bh=F7MyAD4vh5cxeyCtARMCnPwZM8B/TzhziXFFTs1nP/Q=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=hbh5ivImEODhIldKlqfp8ASVq4x57k8RMTrb7+7CP5ZDaRGdM5TsHwkAKI88S39vW IpYGtW25x8/GjRB3FKlYHghd7C1lm+xxgwqSL1QgVCkdJFfk8Mij6QDdKiQ4Q0MJhj 5hipREmvxaMWNDLBiuG4UxWJtMIzQat4XRgsVCphBqwKtnCSkc0Ki81D9MmJmSK1sq 00QSLiiuCRuNOmq3nRQFf48DzIvecYWIRJXhfqdumVtvDhHa2xeySdpFhANB9nIqox eZjLAM9wKsZ9Jbdem3PhOw8NQNrGRM3ME0Be47MV7bHPoY87vKGqsETxcrSAZKeBLN SYZRyDkHcVsmg== From: Vincent Mailhol Date: Tue, 23 Sep 2025 15:58:43 +0900 Subject: [PATCH v4 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-v4-18-e720d28f66fe@kernel.org> References: <20250923-canxl-netlink-prep-v4-0-e720d28f66fe@kernel.org> In-Reply-To: <20250923-canxl-netlink-prep-v4-0-e720d28f66fe@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=owGbwMvMwCV2McXO4Xp97WbG02pJDBmXXCPqJ/U+O3NicqeT/9m61/MVJpTctIzjP6KnsZLN6 +Hyw7HmHaUsDGJcDLJiiizLyjm5FToKvcMO/bWEmcPKBDKEgYtTACYSt4bhnzG3jt/EpyJTallZ /4TsX7IvN/v30131e/aHx0r9nZb+fAvDH75Vy0t9eC123Nh+5rf/jJbLIr63xOPy19ke91w9+8h TI34A 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:30:37 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 DAA79316189; Tue, 23 Sep 2025 07:00: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=1758610816; cv=none; b=FtetiPyDMBkpxsPzdG8sg6w2PmIzRBBCDsvrWmed0LMD+UPcF+6Qm751fu3m9lXR/elB6iOONUD3py1hmc8QIDY1xnoHHkHlSGLlgONTqZqq095eKzvHhbWcAzhVBYlPT82oIBsBh5tjzyVG5qpalyWSaJVryoJAVBLyd1H+0xA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758610816; 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=hWTrgzFGi90zVyYTfds+7gW1jYmtMkuKq65lIDNECjymkd/G85fWUw6zlfamCT63bk1gzpWBtBFofBbs2xpzunZUOXXJD7x1h3y0I8ECCFLLRPvABwjA38jYOq9PmBCeqk6R0cPaGqU/9lAFHe95d/GrlntlfRCLFo4hV+QZ4fw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=e6gsdmPL; 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="e6gsdmPL" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 82B93C116B1; Tue, 23 Sep 2025 07:00:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758610815; bh=7HuM9GT+2Kd+y3dPkOdkf++eyBOX+SiqQUavEx1WCQw=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=e6gsdmPL0QQfftdEKZg1769jKakhQvw8l8Ok6en3AwIeCm0JZjrci+SMZAOmfCT4F Qu/4FCqqprCTB3kH0h61rHDbD7Huiltu46tRZXjjXltnBBrvUpglYAakUO7E8JxZUm zL6gc2DexVtKCa4sWVvJtEPmVa5zBKUwyUAv05e1DSXhuYJWhJL5C2K9HtVi0DtVii S+1R4uR97eNfIgDhk0Vrhi1F3tO5ynQmAqB0r3t4k2M0wV5mlVzV0Pwb88JCGhmXho Q/MXCT7pCeFrluYWl1IKOV3QYHC4LxGGJUEYS7IYZ22pbxP8pbmqH6kuZEjODadwt0 7U512nCjWqgxw== From: Vincent Mailhol Date: Tue, 23 Sep 2025 15:58:44 +0900 Subject: [PATCH v4 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-v4-19-e720d28f66fe@kernel.org> References: <20250923-canxl-netlink-prep-v4-0-e720d28f66fe@kernel.org> In-Reply-To: <20250923-canxl-netlink-prep-v4-0-e720d28f66fe@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=owGbwMvMwCV2McXO4Xp97WbG02pJDBmXXKO/upvdPHTKc5rsAunampILT9ac/u4jsORQ1uXF+ veu5Ub96ShlYRDjYpAVU2RZVs7JrdBR6B126K8lzBxWJpAhDFycAjCRmTGMDA9kFkdfM3jsGiET bXJ2yumjCUfCdCbtDZjeHcZdtUlNl4uRYfnJkKuNHTP+FFzY8LDl3gS/gISWqNnvOG+1ct58vFM 8nRsA 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:30:37 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 BED6A318136; Tue, 23 Sep 2025 07:00:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758610817; cv=none; b=io3HXa0mXarUD46OtBT1JtnvKKLb9m/erBXwXLU8gk3DXtX3iGRg4+8fRU+4hyBlJDvhrpI4s7R5sypKkaxAHxVp6HwXdF5a7KyVC2fs/Ze9u67B00kE2zC4uC0UPLuWRpL36p2uxAQxQFf9bN2cQVgSFbUvDW7UD4GGoLN4KhA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758610817; c=relaxed/simple; bh=1biZK1FFNfuf1m10cZY7+frVmMOJ5/zVUzkW14nYRTg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Vj0NwMudMik+YhaYvea3CQ7ZBxtzfQZptGxV6CgTUaCM8HZj6i6xH9rdc6KnWyHoQrV+3Y5cChWV/XhrjpbQ5EossEvelqbPBfr9HsrQk/ysqZLLvLYiw9dLoYplOH1qQ2EIrGVH7g+a23w5HeDTFIsoF7Hi7KZ7eAQuyK7xN9g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=hn/+oDcy; 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="hn/+oDcy" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1B829C116C6; Tue, 23 Sep 2025 07:00:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758610817; bh=1biZK1FFNfuf1m10cZY7+frVmMOJ5/zVUzkW14nYRTg=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=hn/+oDcys6MD6IEaciEtfO54CZjk9/ALUTWPMbL65ElJqv5gyCyfa+1zKnsN2LiFp 78g2GP3QIY3/ykHBVrYL1v3THrawRQfkPdTjxgEg95b+rYQ54Zd00mCxZCtOamx1rW 7lK4gUCro5t0bDjUL7FUw6348LcdzlnhwNikuFsuwOz8a8Se9ikC1JW5NuZ9jVPucO 47RyCyQiX/P+MJgZQgwId/phrFeQKXbQinOp95jd87GLVexzNSElWbYbmMX4k3hCaz aeicXSSOLav/CtErNRTORaGsydD/3ir66oHqJjhrWA/5w2bSKLlfXkiytB3QAycwEL lmJVJhaqN31NQ== From: Vincent Mailhol Date: Tue, 23 Sep 2025 15:58:45 +0900 Subject: [PATCH v4 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-v4-20-e720d28f66fe@kernel.org> References: <20250923-canxl-netlink-prep-v4-0-e720d28f66fe@kernel.org> In-Reply-To: <20250923-canxl-netlink-prep-v4-0-e720d28f66fe@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=owGbwMvMwCV2McXO4Xp97WbG02pJDBmXXGOt1Bwfs/y/q6dTf+sfC/fzJ6FZZ3syI1nao9qDN v6wLX/QUcrCIMbFICumyLKsnJNboaPQO+zQX0uYOaxMIEMYuDgFYCLT2xn+Gd07V5lgWFR+XFvo d9bkUsXMgobXV5gkb/ZuLvx0IXdbLyPDhp5vl1jiNWY67jA/ucne/NDcVuuNDHyzfzxedtn54hM JLgA= 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