From nobody Fri Oct 3 08:47:48 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 1F3752EC56B; Wed, 3 Sep 2025 08:52: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=1756889521; cv=none; b=TzXYOCND7g04FWHqH6/IImsGFx7bzpPzIeHGw0qMQ+NPoXx+3Ab1NaxmU7a8yPmwLawu7v35999kd0Hiu3jHZzArxZMjQDWXx04om8cIy1RbH8NAeqJy5+KXitcIehyhLWzLDEYD1h9vURF9lTr1heMfFgToIadc+amd9FunEAM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756889521; c=relaxed/simple; bh=T88mFb7sQ3TDbgKtkbXsmLV//5AWUv8klMda8U+nd2Q=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=KGsq2d6gMXf+uyIGQm3/qOTEDaTDTzzcKjC+ZGpoE7HMWL/xtTGxCHdeeG3ZdvvO+FzXDJrrLmiwJjsYNWW+TMPlJ6QscSWK/IFrbPZUek0K3Frw/YDKg1qN+8icuCeDviaLf4GdiJ+4g+LhsZ7H59duj03RMPn8ZRGrTyphjLY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=kxbzOgwj; 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="kxbzOgwj" Received: by smtp.kernel.org (Postfix) with ESMTPSA id AFDC1C4CEF7; Wed, 3 Sep 2025 08:51:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1756889521; bh=T88mFb7sQ3TDbgKtkbXsmLV//5AWUv8klMda8U+nd2Q=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=kxbzOgwjqgyizeKkkC9Dr7gZwyr9On/c/ihcqcGybW8z8aQHI2faImptvejS75jLS 5BHfuAwx4gc92zTkfKqsQmoI4iocSrDXofVyDrqsPkv01SJXkRx6agJNKfI1z0FuZG 6cF8fDL3/IqxZ2U09Kqgkp313NN/8oIo2B2DjcFr1tkkgWPyw9+mjn1EOK5pLdOOdk 5/s7D5iZFGY9b2eQDBsSvPFcUnBwGN9d/3AsInEZ8Tbq8SMD1wzMqzfdcfS0RqgsnY KQeV0PF7jvT5qSH3v3P/+ouSEWC9aDuRRzyFF09yMHLkatb1A8r2u3fFtHn/SAAc4w AZ+Rs9ouC9udA== From: Vincent Mailhol Date: Wed, 03 Sep 2025 17:50:00 +0900 Subject: [PATCH 01/21] 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: <20250903-canxl-netlink-prep-v1-1-904bd6037cd9@kernel.org> References: <20250903-canxl-netlink-prep-v1-0-904bd6037cd9@kernel.org> In-Reply-To: <20250903-canxl-netlink-prep-v1-0-904bd6037cd9@kernel.org> To: Marc Kleine-Budde , Oliver Hartkopp Cc: Vincent Mailhol , =?utf-8?q?St=C3=A9phane_Grosjean?= , Robert Nawrath , Minh Le , Duy Nguyen , linux-can@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2460; i=mailhol@kernel.org; h=from:subject:message-id; bh=T88mFb7sQ3TDbgKtkbXsmLV//5AWUv8klMda8U+nd2Q=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBk7GIs2vbvMy3O/M6ntgk7lRZXFT1bOkI27eXD+t9w7R l8mf7Z51FHKwiDGxSArpsiyrJyTW6Gj0Dvs0F9LmDmsTCBDGLg4BWAiuv8YGb5sq+SuYOFbv+TP hnthzQ9tzB1q6+etsr4stj/8tZx+fAXD/2iJ9RxTfifckHNmmSV+nXHGfdY7x9+633kat3s7/5a UZE4A X-Developer-Key: i=mailhol@kernel.org; a=openpgp; fpr=ED8F700574E67F20E574E8E2AB5FEB886DBB99C2 In commit b803c4a4f788 ("can: dev: add struct data_bittiming_params to group FD parameters"), struct data_bittiming_params was put into linux/can/dev.h. This structure being a collection of bittiming parameters, on second thought, bittiming.h is actually a better location. This way, users of struct data_bittiming_params will not have to forcefully include linux/can/dev.h thus removing some complexity and reducing the risk of circular dependencies in headers. Move struct data_bittiming_params from linux/can/dev.h to linux/can/bittiming.h. Signed-off-by: Vincent Mailhol --- include/linux/can/bittiming.h | 11 +++++++++++ include/linux/can/dev.h | 11 ----------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/include/linux/can/bittiming.h b/include/linux/can/bittiming.h index 5dfdbb63b1d54f3dc02170b10b73dbb9c2242851..6572ec1712ca2df8db7fe1453ae= 5a4d5699712b1 100644 --- a/include/linux/can/bittiming.h +++ b/include/linux/can/bittiming.h @@ -114,6 +114,17 @@ struct can_tdc_const { u32 tdcf_max; }; =20 +struct data_bittiming_params { + const struct can_bittiming_const *data_bittiming_const; + struct can_bittiming data_bittiming; + const struct can_tdc_const *tdc_const; + struct can_tdc tdc; + const u32 *data_bitrate_const; + unsigned int data_bitrate_const_cnt; + int (*do_set_data_bittiming)(struct net_device *dev); + int (*do_get_auto_tdcv)(const struct net_device *dev, u32 *tdcv); +}; + #ifdef CONFIG_CAN_CALC_BITTIMING int can_calc_bittiming(const struct net_device *dev, struct can_bittiming = *bt, const struct can_bittiming_const *btc, struct netlink_ext_ack *ex= tack); diff --git a/include/linux/can/dev.h b/include/linux/can/dev.h index 9a92cbe5b2cb7ccdfca3121718856d096e9ecfa6..76022f48a97673d81676c39c697= eadc6d7063ff7 100644 --- a/include/linux/can/dev.h +++ b/include/linux/can/dev.h @@ -38,17 +38,6 @@ enum can_termination_gpio { CAN_TERMINATION_GPIO_MAX, }; =20 -struct data_bittiming_params { - const struct can_bittiming_const *data_bittiming_const; - struct can_bittiming data_bittiming; - const struct can_tdc_const *tdc_const; - struct can_tdc tdc; - const u32 *data_bitrate_const; - unsigned int data_bitrate_const_cnt; - int (*do_set_data_bittiming)(struct net_device *dev); - int (*do_get_auto_tdcv)(const struct net_device *dev, u32 *tdcv); -}; - /* * CAN common private data */ --=20 2.49.1 From nobody Fri Oct 3 08:47:48 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 021832ED854; Wed, 3 Sep 2025 08:52:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756889524; cv=none; b=UW6uUE64Ra8RZLqt/anJBzKZUFtXHVXJpEHSUlkwJxMw9LqykQbt6JZ9zB8kVG6VyTSZVzqhy0No16ZvaxRq9O1xA62n67WqjliF7HJYecA/nezwMMx2QzmhQdC3efMXAGcLzVc7GrntKznrcmTA1KJ70mHpz87BDUSkp6o0K0M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756889524; c=relaxed/simple; bh=sWHZaOqLzX2L2GpQTcYE/d6XotteDzKRJz/cgKPJ+a4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Y+PpMZ2b4Ekr315XMZ1aJ0RGr8cDvsx1jbIc3NWUXtrPzCLWWcqZNgqsjclkSvxRQhpe0DAerTqVAvxuM1G1KMvUpA3Ae0wIqTJntcH8UpRZXv4T74Lw8MZA4JU+iss2q7eKVANTth97J8E8xnUzBJrI5G655DE+qbkF9IemAA0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=HG93bKg3; 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="HG93bKg3" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4A59BC4CEF5; Wed, 3 Sep 2025 08:52:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1756889522; bh=sWHZaOqLzX2L2GpQTcYE/d6XotteDzKRJz/cgKPJ+a4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=HG93bKg3KvPkZ0KC5v3pZVziVqPQLuXO3a0CyvJBmDecUscsxuIauvRW7aU+X71yG 0vuiTDqU3F70tTsXI07Qdme9AY/Fevd8Pv48Y4kJeyTqb1E+a6WrbHc0jIxbGm7yj1 5xl/MTf8jrIA2mgbY6qS77l71RkVjQQk23bg1qj5oV3RDJAeU669J09zvkRQRzgKad njfEagdLzNMGsg82ZkbgsVZeL2UF8kOzMgSJfCvpzOIzOzwhYN2RlRZVc1jMRdgd12 9Vh2ShPnatwVlS71nxkDruHT18wsrDAyFwr68v6hCI8+vbdn2Otx6pYfcJ/9qUDNMD Dt+tw/eMOGTmw== From: Vincent Mailhol Date: Wed, 03 Sep 2025 17:50:01 +0900 Subject: [PATCH 02/21] 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: <20250903-canxl-netlink-prep-v1-2-904bd6037cd9@kernel.org> References: <20250903-canxl-netlink-prep-v1-0-904bd6037cd9@kernel.org> In-Reply-To: <20250903-canxl-netlink-prep-v1-0-904bd6037cd9@kernel.org> To: Marc Kleine-Budde , Oliver Hartkopp Cc: Vincent Mailhol , =?utf-8?q?St=C3=A9phane_Grosjean?= , Robert Nawrath , Minh Le , Duy Nguyen , linux-can@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4153; i=mailhol@kernel.org; h=from:subject:message-id; bh=sWHZaOqLzX2L2GpQTcYE/d6XotteDzKRJz/cgKPJ+a4=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBk7GMsqGJ+Fzzz4eM20lz4yS8uqfFRzfh+2nlIbbK283 Hyi4KH8jlIWBjEuBlkxRZZl5ZzcCh2F3mGH/lrCzGFlAhnCwMUpABOp28HI8OXALLZX1Z0PvJJv xue+PxLOVMDiyXZOevuX+O/JJ9rNvjD8d4u3OnvB8IdmTo3q4/Oa/Z2pnKunMN9a8Ojmm6ou2+0 SjAA= X-Developer-Key: i=mailhol@kernel.org; a=openpgp; fpr=ED8F700574E67F20E574E8E2AB5FEB886DBB99C2 can_get_relative_tdco() needs to access can_priv->fd making it specific to CAN FD. Change the function parameter from struct can_priv to struct data_bittiming_params. This way, the function becomes CAN FD agnostic and can be reused later on for the CAN XL TDC. Now that we dropped the dependency on struct can_priv, also move can_get_relative_tdco() back to bittiming.h where it was meant to belong to. Signed-off-by: Vincent Mailhol --- Changelog: RFC -> v1: - Just pass the IFLA index instead of passing each argument individually. Instead, derive these as local variables depending on whethe the IFLA index is IFLA_CAN_TDC or IFLA_CAN_XL_TDC. --- include/linux/can/bittiming.h | 29 +++++++++++++++++++++++++++++ include/linux/can/dev.h | 29 ----------------------------- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/include/linux/can/bittiming.h b/include/linux/can/bittiming.h index 6572ec1712ca2df8db7fe1453ae5a4d5699712b1..4d5f7794194ab13641c7854c2d6= 6625c4e942f6c 100644 --- a/include/linux/can/bittiming.h +++ b/include/linux/can/bittiming.h @@ -160,6 +160,35 @@ int can_get_bittiming(const struct net_device *dev, st= ruct can_bittiming *bt, const unsigned int bitrate_const_cnt, struct netlink_ext_ack *extack); =20 +/* + * can_get_relative_tdco() - TDCO relative to the sample point + * + * struct can_tdc::tdco represents the absolute offset from TDCV. Some + * controllers use instead an offset relative to the Sample Point (SP) + * such that: + * + * SSP =3D TDCV + absolute TDCO + * =3D TDCV + SP + relative TDCO + * + * -+----------- one bit ----------+-- TX pin + * |<--- Sample Point --->| + * + * --+----------- one bit ----------+-- RX pin + * |<-------- TDCV -------->| + * |<------------------------>| absolute TDCO + * |<--- Sample Point --->| + * | |<->| relative TDCO + * |<------------- Secondary Sample Point ------------>| + */ +static inline s32 can_get_relative_tdco(const struct data_bittiming_params= *dbt_params) +{ + const struct can_bittiming *dbt =3D &dbt_params->data_bittiming; + s32 sample_point_in_tc =3D (CAN_SYNC_SEG + dbt->prop_seg + + dbt->phase_seg1) * dbt->brp; + + return (s32)dbt_params->tdc.tdco - sample_point_in_tc; +} + /* * can_bit_time() - Duration of one bit * diff --git a/include/linux/can/dev.h b/include/linux/can/dev.h index 76022f48a97673d81676c39c697eadc6d7063ff7..55aaadaacf68f940fa1b71f7c43= 8e68b84080292 100644 --- a/include/linux/can/dev.h +++ b/include/linux/can/dev.h @@ -85,35 +85,6 @@ static inline bool can_fd_tdc_is_enabled(const struct ca= n_priv *priv) return !!(priv->ctrlmode & CAN_CTRLMODE_FD_TDC_MASK); } =20 -/* - * can_get_relative_tdco() - TDCO relative to the sample point - * - * struct can_tdc::tdco represents the absolute offset from TDCV. Some - * controllers use instead an offset relative to the Sample Point (SP) - * such that: - * - * SSP =3D TDCV + absolute TDCO - * =3D TDCV + SP + relative TDCO - * - * -+----------- one bit ----------+-- TX pin - * |<--- Sample Point --->| - * - * --+----------- one bit ----------+-- RX pin - * |<-------- TDCV -------->| - * |<------------------------>| absolute TDCO - * |<--- Sample Point --->| - * | |<->| relative TDCO - * |<------------- Secondary Sample Point ------------>| - */ -static inline s32 can_get_relative_tdco(const struct can_priv *priv) -{ - const struct can_bittiming *dbt =3D &priv->fd.data_bittiming; - s32 sample_point_in_tc =3D (CAN_SYNC_SEG + dbt->prop_seg + - dbt->phase_seg1) * dbt->brp; - - return (s32)priv->fd.tdc.tdco - sample_point_in_tc; -} - /* helper to define static CAN controller features at device creation time= */ static inline int __must_check can_set_static_ctrlmode(struct net_device *= dev, u32 static_mode) --=20 2.49.1 From nobody Fri Oct 3 08:47:48 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 8AEFF2ED872; Wed, 3 Sep 2025 08:52: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=1756889524; cv=none; b=H08PNv/NrC+eGemXAqmy/GsWB2q2na3crR2AI76mxkm4uwN+YyW+KXeCQzXD07dN8YbDZ0+c2Hwc7MygS4/Y8K0Rve/LjfWOA01c6lOn6O6106FWqQEY/HAFOpwD06sDr1rcM7nViSP4RnMBt6S3b5uOi7tgpfIhgDyb+PTWLTQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756889524; c=relaxed/simple; bh=7GXiF2puI9MV0ynLrL3LnDqqLVjv4d6zMPfx4ftHtlY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=k1HeTRonQFYBE8qfDZWJ3r+Zf1+DVflc9u2/APTViftECoBhuK+lKZp1yTLL0W8VV4r7DEBrCRfU6R4Y/iHZA+c/2zqfSrlYj1O7k3D/oA99NMaWQ9YhwTc+TVHLdtdyAQmQ6VgaQ+Ehuh9sZ+8P9QZPJuT+hbt4ASBCkFPgjJM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=eExnSCPS; 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="eExnSCPS" Received: by smtp.kernel.org (Postfix) with ESMTPSA id DAFF9C4CEF7; Wed, 3 Sep 2025 08:52:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1756889524; bh=7GXiF2puI9MV0ynLrL3LnDqqLVjv4d6zMPfx4ftHtlY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=eExnSCPS8E7604a8VyaZRFqnxeBnFkum0U3zluEyMBdUAcXIXxkHDoIPyzzjiPlUV NkoRKZv7s7VlrCSRMrCgdiM9Scx8J3HU7mYEIuzGzSN8IntrAUXV9zXzGhtE7UxjMZ QBxGu+QY5aay14czh3Qk6i8kbdTV/ChwpbK5HVJJH3AduyNcQxQTQKsPVLe3pJ3Ypc kR9oRaTSMDLcZVJykGxzW/Aj/zyycOwQWNdgsEOs2YScf+Oe2Zq8GhBbP5xLPK9O3v YAfrl2yejPCyQA2HUXwc6XV/QjYurMG17aczEgzgU9NSYyhSl2PW1jQm2JeTGRQlcR Il+EiZZPed7Gw== From: Vincent Mailhol Date: Wed, 03 Sep 2025 17:50:02 +0900 Subject: [PATCH 03/21] 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: <20250903-canxl-netlink-prep-v1-3-904bd6037cd9@kernel.org> References: <20250903-canxl-netlink-prep-v1-0-904bd6037cd9@kernel.org> In-Reply-To: <20250903-canxl-netlink-prep-v1-0-904bd6037cd9@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=owGbwMvMwCV2McXO4Xp97WbG02pJDBk7GCvjV2s6Xnj96GDskbRYnmWiclJeVqeEMmrvx5xvu N9w879yRykLgxgXg6yYIsuyck5uhY5C77BDfy1h5rAygQxh4OIUgInMWsnIMPHSlVundgmyneNZ 5KC25/STOafb9r1ZF7L0iZ5lbf3PiE2MDLuFVyYU2SvW/nW7UWyWOUfQ+u6Wf6Gtj2L0JjC3eyT 8YwAA 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 Fri Oct 3 08:47:48 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 D45682F0666; Wed, 3 Sep 2025 08:52:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756889525; cv=none; b=ngIEwj24FwkvKZhb+/mKzzuT/GnQ99j6BEWnMMETmfWg2QyP4Gs27Y6t8st9Ob9q7vM2V8dlbkbtMAV6l4uWIYs5ZmTEAC/NifY53aw5SpuL7WvvKUWlX5ev8BTkwMswhfLQXpDcf5SavTMdWr1o1rf4QiCThlvAl+2UYcAePPI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756889525; c=relaxed/simple; bh=tdXomOJI//XghU69xAqi9CGEG7kEl4VTCc4F7HwUNcY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Sx9y7eURhYn7PzqLuu+SDRC4CCT8YYqRMaIXrGBbs3wrJDNOSyWtKDjzDlAEPsy2Fz7r0y5SSZQkOL+MZGY6pQzdtaZ6uTaMOzRvQGRiKGzza/6LAgKZf9v0A8h3ZSP+Ui0vMrY5hO1amCQrHMJo/3z260MXPk+9g2nPUjX6Cgc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=tvTUQB+5; 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="tvTUQB+5" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 75ED3C4CEF0; Wed, 3 Sep 2025 08:52:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1756889525; bh=tdXomOJI//XghU69xAqi9CGEG7kEl4VTCc4F7HwUNcY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=tvTUQB+54zhquXA4tHKGJXDEovF0GG4Ve9Sn+L2DGRC4G+wYw7WGgysPTuMsHEn6F acdWj2doEBD75UfcL/m2XTbJag8SvYAy+qsP1flvU6/j+7L2GMxA1a1Hg4PIoo/uWs kpJIS2caFxV94gsAAsTUJQ7eocRXmB/rRNdniUmBTBJL/77nZHMdpumXN9GCL51HSG IkcdrC/eklnDXuMwkS1qTtvjFiat9N/5tGyVX0JUrQ5QO04jR2AxMxAxD83KmA66Mn chkPYgq1S8JKk/8WVlhdz/tkCEn+yaDIEnDbpfEO/k43wKUyCaldEvAbyjyY97hl51 5653z4mgZhGtw== From: Vincent Mailhol Date: Wed, 03 Sep 2025 17:50:03 +0900 Subject: [PATCH 04/21] 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: <20250903-canxl-netlink-prep-v1-4-904bd6037cd9@kernel.org> References: <20250903-canxl-netlink-prep-v1-0-904bd6037cd9@kernel.org> In-Reply-To: <20250903-canxl-netlink-prep-v1-0-904bd6037cd9@kernel.org> To: Marc Kleine-Budde , Oliver Hartkopp Cc: Vincent Mailhol , =?utf-8?q?St=C3=A9phane_Grosjean?= , Robert Nawrath , Minh Le , Duy Nguyen , linux-can@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2424; i=mailhol@kernel.org; h=from:subject:message-id; bh=tdXomOJI//XghU69xAqi9CGEG7kEl4VTCc4F7HwUNcY=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBk7GGtenn/7afrkhXLSRltvZ3yvuP79iPXppMyHfwMa6 0+s/CGV0FHKwiDGxSArpsiyrJyTW6Gj0Dvs0F9LmDmsTCBDGLg4BWAisncZ/opp5ZVzOIcU/cx7 /jhKmb+ss9Jy47LnZucna74yLQw+s4iRYSevsOBq7eK43Y0Wm996cBW1huy9cVrz/LrdzK6KBUq LuQA= X-Developer-Key: i=mailhol@kernel.org; a=openpgp; fpr=ED8F700574E67F20E574E8E2AB5FEB886DBB99C2 Whenever can_validate_bittiming() is called, it is always preceded by some boilerplate code which was copy pasted all over the place. Move that repeated code directly inside can_validate_bittiming(). Finally, the mempcy() is not needed. Just use the pointer returned by nla_data() as-is. Signed-off-by: Vincent Mailhol --- drivers/net/can/dev/netlink.c | 35 ++++++++++++++++------------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/drivers/net/can/dev/netlink.c b/drivers/net/can/dev/netlink.c index d9f6ab3efb9767409c318b714f19df8a30e51137..bc91df8d75ac41381fefea895d7= e490a965d3f7b 100644 --- a/drivers/net/can/dev/netlink.c +++ b/drivers/net/can/dev/netlink.c @@ -36,13 +36,20 @@ static const struct nla_policy can_tdc_policy[IFLA_CAN_= TDC_MAX + 1] =3D { [IFLA_CAN_TDC_TDCF] =3D { .type =3D NLA_U32 }, }; =20 -static int can_validate_bittiming(const struct can_bittiming *bt, - struct netlink_ext_ack *extack) +static int can_validate_bittiming(struct nlattr *data[], + struct netlink_ext_ack *extack, + int ifla_can_bittiming) { + struct can_bittiming *bt; + + if (!data[ifla_can_bittiming]) + return 0; + + bt =3D nla_data(data[ifla_can_bittiming]); + /* sample point is in one-tenth of a percent */ if (bt->sample_point >=3D 1000) { NL_SET_ERR_MSG(extack, "sample point must be between 0 and 100%"); - return -EINVAL; } =20 @@ -105,14 +112,9 @@ static int can_validate(struct nlattr *tb[], struct nl= attr *data[], } } =20 - if (data[IFLA_CAN_BITTIMING]) { - struct can_bittiming bt; - - memcpy(&bt, nla_data(data[IFLA_CAN_BITTIMING]), sizeof(bt)); - err =3D can_validate_bittiming(&bt, extack); - if (err) - return err; - } + err =3D can_validate_bittiming(data, extack, IFLA_CAN_BITTIMING); + if (err) + return err; =20 if (is_can_fd) { if (!data[IFLA_CAN_BITTIMING] || !data[IFLA_CAN_DATA_BITTIMING]) @@ -124,14 +126,9 @@ static int can_validate(struct nlattr *tb[], struct nl= attr *data[], return -EOPNOTSUPP; } =20 - if (data[IFLA_CAN_DATA_BITTIMING]) { - struct can_bittiming bt; - - memcpy(&bt, nla_data(data[IFLA_CAN_DATA_BITTIMING]), sizeof(bt)); - err =3D can_validate_bittiming(&bt, extack); - if (err) - return err; - } + err =3D can_validate_bittiming(data, extack, IFLA_CAN_DATA_BITTIMING); + if (err) + return err; =20 return 0; } --=20 2.49.1 From nobody Fri Oct 3 08:47:48 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 B7FBB2F0C7F; Wed, 3 Sep 2025 08:52: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=1756889527; cv=none; b=vF2ZYAqUBT/l8XCu4MEeiaGzqMqU5nQ+0wqQrLgsAfXa0+HHl9bYqGnv/NQI4u3S3yawk5QMU9fkBPURttHR91QGtd5kzaFPzl8KaTf4RXc8EPa55Po/K18GL07gDCb86KXao18k4RuU9fxMSZbLOulwaDsaJNUXVsj6C4IcUv8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756889527; c=relaxed/simple; bh=N5vyjcsyY2EYRTViVRONes7S2dnBxSd+pnrbvocT+Yo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=H93WGClUykwsepfaDkm08POB3nGGtccRSwjQq+22xiw010MANa67NoxJ+G2Q5/PXmovHlBe6nkZkqbGzCIhUqD5jgXqECUeOT/0qsA9KrC0VKCIsy32KSJQYyHU8RCaHJR+5tVdfn922tKCieX1ARi+rrlB2ZsH+PrKz7VxIOJY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=IzU509Gv; 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="IzU509Gv" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 10938C4CEF0; Wed, 3 Sep 2025 08:52:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1756889527; bh=N5vyjcsyY2EYRTViVRONes7S2dnBxSd+pnrbvocT+Yo=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=IzU509GvGcEDogvGK1+AVn3LK2PAoH0rTiG3yrpssO7rc5j6ceAar75c/g82Xlj7I tvWB5ZSD+efOmn3A1cuoVxhHmbPmp/5VXwK3DsHtgXyQV7NwrmjmYDlVgHAho/IxuS ZXpmy3dcrXn1mT/TKRma5/hWkXBxOYHzLPsdBMzGIcAc9GRlfbHYHHcln9rleWUaHQ 8QYQwTcdunGo5Rakg4SDMCZIepdJqsBNo+3M8QerkyNdIkPjP8lqXzYxHHrNzjOf6J qlRAW1RC9ou470TZtT0OWW8eEQfjPihWuMFbyIE6r8cS+FA9NM/yP2QXkuU8z16Yhy B6se7GxNYTZGQ== From: Vincent Mailhol Date: Wed, 03 Sep 2025 17:50:04 +0900 Subject: [PATCH 05/21] 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: <20250903-canxl-netlink-prep-v1-5-904bd6037cd9@kernel.org> References: <20250903-canxl-netlink-prep-v1-0-904bd6037cd9@kernel.org> In-Reply-To: <20250903-canxl-netlink-prep-v1-0-904bd6037cd9@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=4290; i=mailhol@kernel.org; h=from:subject:message-id; bh=N5vyjcsyY2EYRTViVRONes7S2dnBxSd+pnrbvocT+Yo=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBk7GOtrzyQe9dwpPdHS14AjxO5nnuKWw6FyVyav1+LX+ fdY85JTRykLgxgXg6yYIsuyck5uhY5C77BDfy1h5rAygQxh4OIUgIm0TGb4Z/yzpOqHo+RnrRnT k8/G/2Z8JCci+q3bpezg+5qMLtGgfYwM7a2fm/46W0oFK4adfMkTMeWyY+WDsxt8pu4wFb1UHH+ RAwA= X-Developer-Key: i=mailhol@kernel.org; a=openpgp; fpr=ED8F700574E67F20E574E8E2AB5FEB886DBB99C2 Factorise the TDC validation out of can_validate() and move it in the new can_validate_tdc() function. This is a preparation patch for the introduction of CAN XL because this TDC validation will be reused later on. Signed-off-by: Vincent Mailhol --- Changelog: RFC 1 -> RFC 2: - fix bug on tdc flags mutual exclusivity: 'if (tdc_auto =3D=3D tdc_manual)' -> 'if (tdc_auto && tdc_manual)' --- drivers/net/can/dev/netlink.c | 80 +++++++++++++++++++++++++--------------= ---- include/linux/can/bittiming.h | 4 +++ 2 files changed, 51 insertions(+), 33 deletions(-) diff --git a/drivers/net/can/dev/netlink.c b/drivers/net/can/dev/netlink.c index bc91df8d75ac41381fefea895d7e490a965d3f7b..1367ebe5db8fd6fcac49d3a1f59= d44b61847128f 100644 --- a/drivers/net/can/dev/netlink.c +++ b/drivers/net/can/dev/netlink.c @@ -56,6 +56,49 @@ static int can_validate_bittiming(struct nlattr *data[], return 0; } =20 +static int can_validate_tdc(struct nlattr *data_tdc, + struct netlink_ext_ack *extack, u32 tdc_flags) +{ + bool tdc_manual =3D tdc_flags & CAN_CTRLMODE_TDC_MANUAL_MASK; + bool tdc_auto =3D tdc_flags & CAN_CTRLMODE_TDC_AUTO_MASK; + int err; + + /* CAN_CTRLMODE_TDC_{AUTO,MANUAL} are mutually exclusive */ + if (tdc_auto && tdc_manual) + return -EOPNOTSUPP; + + /* If one of the CAN_CTRLMODE_TDC_* flag is set then TDC + * must be set and vice-versa + */ + if ((tdc_auto || tdc_manual) !=3D !!data_tdc) + return -EOPNOTSUPP; + + /* If providing TDC parameters, at least TDCO is needed. TDCV + * is needed if and only if CAN_CTRLMODE_TDC_MANUAL is set + */ + if (data_tdc) { + struct nlattr *tb_tdc[IFLA_CAN_TDC_MAX + 1]; + + err =3D nla_parse_nested(tb_tdc, IFLA_CAN_TDC_MAX, + data_tdc, can_tdc_policy, extack); + if (err) + return err; + + if (tb_tdc[IFLA_CAN_TDC_TDCV]) { + if (tdc_auto) + return -EOPNOTSUPP; + } else { + if (tdc_manual) + return -EOPNOTSUPP; + } + + if (!tb_tdc[IFLA_CAN_TDC_TDCO]) + return -EOPNOTSUPP; + } + + return 0; +} + static int can_validate(struct nlattr *tb[], struct nlattr *data[], struct netlink_ext_ack *extack) { @@ -74,42 +117,13 @@ static int can_validate(struct nlattr *tb[], struct nl= attr *data[], =20 if (data[IFLA_CAN_CTRLMODE]) { struct can_ctrlmode *cm =3D nla_data(data[IFLA_CAN_CTRLMODE]); - u32 tdc_flags =3D cm->flags & CAN_CTRLMODE_FD_TDC_MASK; =20 is_can_fd =3D cm->flags & cm->mask & CAN_CTRLMODE_FD; =20 - /* CAN_CTRLMODE_TDC_{AUTO,MANUAL} are mutually exclusive */ - if (tdc_flags =3D=3D CAN_CTRLMODE_FD_TDC_MASK) - return -EOPNOTSUPP; - /* If one of the CAN_CTRLMODE_TDC_* flag is set then - * TDC must be set and vice-versa - */ - if (!!tdc_flags !=3D !!data[IFLA_CAN_TDC]) - return -EOPNOTSUPP; - /* If providing TDC parameters, at least TDCO is - * needed. TDCV is needed if and only if - * CAN_CTRLMODE_TDC_MANUAL is set - */ - if (data[IFLA_CAN_TDC]) { - struct nlattr *tb_tdc[IFLA_CAN_TDC_MAX + 1]; - - err =3D nla_parse_nested(tb_tdc, IFLA_CAN_TDC_MAX, - data[IFLA_CAN_TDC], - can_tdc_policy, extack); - if (err) - return err; - - if (tb_tdc[IFLA_CAN_TDC_TDCV]) { - if (tdc_flags & CAN_CTRLMODE_TDC_AUTO) - return -EOPNOTSUPP; - } else { - if (tdc_flags & CAN_CTRLMODE_TDC_MANUAL) - return -EOPNOTSUPP; - } - - if (!tb_tdc[IFLA_CAN_TDC_TDCO]) - return -EOPNOTSUPP; - } + err =3D can_validate_tdc(data[IFLA_CAN_TDC], extack, + cm->flags & CAN_CTRLMODE_FD_TDC_MASK); + if (err) + return err; } =20 err =3D can_validate_bittiming(data, extack, IFLA_CAN_BITTIMING); diff --git a/include/linux/can/bittiming.h b/include/linux/can/bittiming.h index 4d5f7794194ab13641c7854c2d66625c4e942f6c..71f839c3f0325b2a496a4bc4470= 44a4853541338 100644 --- a/include/linux/can/bittiming.h +++ b/include/linux/can/bittiming.h @@ -16,6 +16,10 @@ =20 #define CAN_CTRLMODE_FD_TDC_MASK \ (CAN_CTRLMODE_TDC_AUTO | CAN_CTRLMODE_TDC_MANUAL) +#define CAN_CTRLMODE_TDC_AUTO_MASK \ + (CAN_CTRLMODE_TDC_AUTO) +#define CAN_CTRLMODE_TDC_MANUAL_MASK \ + (CAN_CTRLMODE_TDC_MANUAL) =20 /* * struct can_tdc - CAN FD Transmission Delay Compensation parameters --=20 2.49.1 From nobody Fri Oct 3 08:47:48 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 0AA272F0666; Wed, 3 Sep 2025 08:52: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=1756889529; cv=none; b=IxfhW2hyy1LN5yKv7FFMCcsqiwpR4+W1fS8SFyTBXbYbNmX81Md+w+sFvaXXdnUWJJZrPFabUGvTj1ENbbekrbJERY3/SS3903AXP3SF+jlMM+Wv/S5fN7xi5Fz5XPFYc+SteJHl/A0xVW/oy9qC31elTuc5bpqrQWAhRa4k5O0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756889529; c=relaxed/simple; bh=/7yR2bTbG3z9BRBOnVH5Wh2v8KTbTEoUXWedJ/vhrOo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=KkF3+jkdfajBmRPU7mpivcscUQ3Uvn+rbfw8DFMQRmIwMnDvESjTnvx/GnAokNIjQmEIsP7wpxmNEHp6/VLO+LuTa2McSxIF8Jyr53miQBRkLyS/jM/zx7z2VeKUbLTjD6HRfPx92+5mCpYpXgHSVj+MXNUvaiH3+1YQqUHbWiM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=YEFzK+Wn; 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="YEFzK+Wn" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A109CC4CEF1; Wed, 3 Sep 2025 08:52:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1756889528; bh=/7yR2bTbG3z9BRBOnVH5Wh2v8KTbTEoUXWedJ/vhrOo=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=YEFzK+WnwBmtyszVKep9X+ShE0tP5PGHLaF814y32RJ2NbJB21P4VoKN1wNGVWhI3 6tqrIYXTNs7O65wF+CeUQwTyAjvp2UfqinCDV0lPwp+hy5nVW45QqSHRjg8vLvJ4mA wFu0je3JJvDrecopHhf/16tLXZLGR7xGPBgPYbw2GXDBY8pY8FhM6dGT4OQRgwp80n y7eR501wpbD3SNMdkzU/La0xQqzMJdpInIBe6HIhG71tTZmF+cpxloIxJYuflEJYFX XNShuZk0lecg8A4nzK4IIDwlBSAT5x7wkKmHzmvdt5yGJnafl0OjEuNebfvuP+grb5 3I1PbZXwUcxzg== From: Vincent Mailhol Date: Wed, 03 Sep 2025 17:50:05 +0900 Subject: [PATCH 06/21] 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: <20250903-canxl-netlink-prep-v1-6-904bd6037cd9@kernel.org> References: <20250903-canxl-netlink-prep-v1-0-904bd6037cd9@kernel.org> In-Reply-To: <20250903-canxl-netlink-prep-v1-0-904bd6037cd9@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=2914; i=mailhol@kernel.org; h=from:subject:message-id; bh=/7yR2bTbG3z9BRBOnVH5Wh2v8KTbTEoUXWedJ/vhrOo=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBk7GBs3r69/cOLfOo5Orxbr3WcY3r8+pvpYpuDaFqkJ8 RPO9PMs6ihlYRDjYpAVU2RZVs7JrdBR6B126K8lzBxWJpAhDFycAjCRj+aMDJO/Pfww7aK+5vS6 S12WJ2ewpBbqXs+etIp3Mdc5qb9uFn8ZGbp2r4+Yu9Gy+W3szoCd93pSNpusqDU+7pi27jzvQp3 Np1kA 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. 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 --- drivers/net/can/dev/netlink.c | 60 ++++++++++++++++++++++++++++++---------= ---- 1 file changed, 42 insertions(+), 18 deletions(-) diff --git a/drivers/net/can/dev/netlink.c b/drivers/net/can/dev/netlink.c index 1367ebe5db8fd6fcac49d3a1f59d44b61847128f..f7b12057bc9c6c286aa0c4341d5= 65a497254296d 100644 --- a/drivers/net/can/dev/netlink.c +++ b/drivers/net/can/dev/netlink.c @@ -99,10 +99,48 @@ static int can_validate_tdc(struct nlattr *data_tdc, return 0; } =20 +static int can_validate_databittiming(struct nlattr *data[], + struct netlink_ext_ack *extack, + int ifla_can_data_bittiming, u32 flags) +{ + struct nlattr *data_tdc; + u32 tdc_flags; + bool is_on; + int err; + + 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 { + WARN_ON(1); /* 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) { - bool is_can_fd =3D false; + u32 flags =3D 0; int err; =20 /* Make sure that valid CAN FD configurations always consist of @@ -118,29 +156,15 @@ static int can_validate(struct nlattr *tb[], struct n= lattr *data[], 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 Fri Oct 3 08:47:48 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 04CB02F28F4; Wed, 3 Sep 2025 08:52:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756889531; cv=none; b=URN3+Hp16c6mYCGNB0SGm4atbB5ZSRYi1WnMCBQYjhbbWtiess/lJoASohaHPMQKvHayK0iCEiSgaZoTLLKAl8kGZEmLcsuTHxAHKQqXYj2hNVIfMq8/NS51PFllBF41SMRJPdFRwibbTLyV2qu63Q+de3XyN4H/RRRnZKkQfRg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756889531; c=relaxed/simple; bh=vPnP+LzDwFe1AgRH6UfhBv6JEs+VwpyKFj0I1pIxwWc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=LWdqgMn4799/wDXCyTCiT1fvrxEo8ITEKwtldpQ5EW3tjWhF68Y/ATabWKDinEwiGbeO+1/E7xqhLQejUUQmyCE3MA8wpEQbF69OlQoec5lCmEpEo20gFLp4NpqrXttL2Jj3AJTDlOSDSi7FsWdODfiYK3Yn/FAVuAQaKhDbE7E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=hMyvp5yV; 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="hMyvp5yV" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3F8EFC4CEF8; Wed, 3 Sep 2025 08:52:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1756889530; bh=vPnP+LzDwFe1AgRH6UfhBv6JEs+VwpyKFj0I1pIxwWc=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=hMyvp5yV6wDpq6RkWm+ahnGLG0aKExxQN8CqLwZJRapvKgPdQtZPhW5D0C9i3OJg5 0tRQq6CUqrZSKtQd/s//pEFmwVNXhqdtOWI+yAUSkIaDo6uT/sLAjkETe4FftI3Y6A wEW/YdNu/Imry1FXkamOJOL0Rs1UsEF66KRCX+Tt7SxNbYBigBpgGb4iVmZxgeDMja qstDxLbcXc1eGt0JfsOUl0J2oLGpA19X/nJuj822P0KDd5ghx4MGOuk5KcKYXfK1QZ xQP+nG3ITC6Ga+8tCnMGaT8Do5WLBtgUv3HADJghMhUm7UaBckMHYhOAxRUspTc+T5 2kDOQwPcneDSw== From: Vincent Mailhol Date: Wed, 03 Sep 2025 17:50:06 +0900 Subject: [PATCH 07/21] can: netlink: remove comment in can_validate() 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: <20250903-canxl-netlink-prep-v1-7-904bd6037cd9@kernel.org> References: <20250903-canxl-netlink-prep-v1-0-904bd6037cd9@kernel.org> In-Reply-To: <20250903-canxl-netlink-prep-v1-0-904bd6037cd9@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=1076; i=mailhol@kernel.org; h=from:subject:message-id; bh=vPnP+LzDwFe1AgRH6UfhBv6JEs+VwpyKFj0I1pIxwWc=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBk7GFvubsrb+e9zXqb0o4tpC2oa+bcUd5wQ5lm80u3Hx XNR6pq+HaUsDGJcDLJiiizLyjm5FToKvcMO/bWEmcPKBDKEgYtTACay8Bcjw7EtnOaK3Yyas2VP ahwsz7BWWtpUq3/l5y3PohUV3m6O/Qz/VPuZl01naPzNdFCV/2P6a6NPx5+Vt++YOFNsXZGC7kI WHgA= X-Developer-Key: i=mailhol@kernel.org; a=openpgp; fpr=ED8F700574E67F20E574E8E2AB5FEB886DBB99C2 The comment in can_validate() is just paraphrasing the code. When adding CAN XL, updating this comment would add some overhead work for no clear benefit. Now that the function has been refactored and split into smaller pieces, let the code speak for itself. Remove the comment. Signed-off-by: Vincent Mailhol --- drivers/net/can/dev/netlink.c | 7 ------- 1 file changed, 7 deletions(-) diff --git a/drivers/net/can/dev/netlink.c b/drivers/net/can/dev/netlink.c index f7b12057bc9c6c286aa0c4341d565a497254296d..6ea629331d20483c5e70567eb1b= e226a3b09882c 100644 --- a/drivers/net/can/dev/netlink.c +++ b/drivers/net/can/dev/netlink.c @@ -143,13 +143,6 @@ static int can_validate(struct nlattr *tb[], struct nl= attr *data[], u32 flags =3D 0; int err; =20 - /* Make sure that valid CAN FD configurations always consist of - * - nominal/arbitration bittiming - * - data bittiming - * - control mode with CAN_CTRLMODE_FD set - * - TDC parameters are coherent (details below) - */ - if (!data) return 0; =20 --=20 2.49.1 From nobody Fri Oct 3 08:47:48 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 8B07C2F28F4; Wed, 3 Sep 2025 08:52: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=1756889534; cv=none; b=I1r3dRANggGVZOGOZDW8IxowOGbEfVKuHxOgflVWlSq2WvF8MB72CcoRijobtDd2IvBXMLPS/5mp5vzU+fWBt+pyMNmEl+co7pZxIY9y2hUdE0kmyHuahKnE2QeNZVMp0XrKSRPGzwZ9ENM1fGOar6Ucqz9LpjnQOKzrkeUzzs4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756889534; c=relaxed/simple; bh=GjTV/5L2ZdLVzjt0OPfo1ElfwP2t92QXFhoCAlrxUF4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=tlLogfglfMXtfqSuR6nUF98LrXxP15FKIe8J2np5C1GnM/oFGFzZgKG6YjjgEphKzL7G0mqwP9OpDyeymoIxa6PyzcsGa7pbdzskkJkVwi6cbX2ka7nM9B4h+ZABIRESC8+HU6wyLAMBWgAVOuxQAHwvpVK1b+DGzV5YRDfTll8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=jpORcDbk; 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="jpORcDbk" Received: by smtp.kernel.org (Postfix) with ESMTPSA id CED68C4CEF7; Wed, 3 Sep 2025 08:52:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1756889532; bh=GjTV/5L2ZdLVzjt0OPfo1ElfwP2t92QXFhoCAlrxUF4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=jpORcDbkOsr7WRIetHr2wjPuAbdwdL/MmrKTgdENHYE9F/Bohw00oteGJ3D0aZymm ePmcBtaND6U9yAoDQTKp51jz4yu//f3p+ggA1h+yWDkFx7YIsrv/2OSqsW1CxfiRgr 1npWxcldQv99bihZ0hQIx5th5FQv5ojFh6eFvzwW3Fohoepd/2AWvsjx7tEoPUQgOG /yDtfvRERr8zC2qe3JURL8cDabVmr/JJREUpDwzA0JvyMUxxScfSy5WARSnBthoEsV QRJFuENK2yyviEi+JiLTfLGB1Yhfd4PX1Xu99RzkQ7M0nP7g6EV4lGK6GTHEILCnir K6C/+Xfu2eiRw== From: Vincent Mailhol Date: Wed, 03 Sep 2025 17:50:07 +0900 Subject: [PATCH 08/21] 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: <20250903-canxl-netlink-prep-v1-8-904bd6037cd9@kernel.org> References: <20250903-canxl-netlink-prep-v1-0-904bd6037cd9@kernel.org> In-Reply-To: <20250903-canxl-netlink-prep-v1-0-904bd6037cd9@kernel.org> To: Marc Kleine-Budde , Oliver Hartkopp Cc: Vincent Mailhol , =?utf-8?q?St=C3=A9phane_Grosjean?= , Robert Nawrath , Minh Le , Duy Nguyen , linux-can@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1857; i=mailhol@kernel.org; h=from:subject:message-id; bh=GjTV/5L2ZdLVzjt0OPfo1ElfwP2t92QXFhoCAlrxUF4=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBk7GDuWu951OPhhWve53pAssYWBNqvNuX9tC1ayefJp+ r+VQV/EO0pZGMS4GGTFFFmWlXNyK3QUeocd+msJM4eVCWQIAxenAEyEn4OR4dv/wNgHMV07njT/ f6oR9H2Pd9LSvZ/+794UxOrsfuD27xaG/zWvPuzdwftyx271ZZXR36NY4rj99FSK7MuuNQb2P/o +ixUA X-Developer-Key: i=mailhol@kernel.org; a=openpgp; fpr=ED8F700574E67F20E574E8E2AB5FEB886DBB99C2 CAN_CTRLMODE_TDC_AUTO and CAN_CTRLMODE_TDC_MANUAL are mutually exclusive. This means that whenever the user switches from auto to manual mode (or vice versa), the other flag which was set previously needs to be cleared. Currently, this is handled with a masking operation. It can be done in a simpler manner by clearing any of the previous TDC flags before copying netlink attributes. The code becomes easier to understand and will make it easier to add the new upcoming CAN XL flags which will have a similar reset logic as the current TDC flags. Signed-off-by: Vincent Mailhol --- drivers/net/can/dev/netlink.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/drivers/net/can/dev/netlink.c b/drivers/net/can/dev/netlink.c index 6ea629331d20483c5e70567eb1be226a3b09882c..a7bcb2b0a1c06711601d0bb037c= 4b998259b5dfd 100644 --- a/drivers/net/can/dev/netlink.c +++ b/drivers/net/can/dev/netlink.c @@ -247,6 +247,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; @@ -263,11 +267,6 @@ static int can_changelink(struct net_device *dev, stru= ct nlattr *tb[], } =20 fd_tdc_flag_provided =3D cm->mask & CAN_CTRLMODE_FD_TDC_MASK; - /* CAN_CTRLMODE_TDC_{AUTO,MANUAL} are mutually - * exclusive: make sure to turn the other one off - */ - if (fd_tdc_flag_provided) - priv->ctrlmode &=3D cm->flags | ~CAN_CTRLMODE_FD_TDC_MASK; } =20 if (data[IFLA_CAN_BITTIMING]) { --=20 2.49.1 From nobody Fri Oct 3 08:47:48 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 2863C2F3623; Wed, 3 Sep 2025 08:52:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756889536; cv=none; b=ijqRm0wgxORT79n2kKvH9eGywlWHue76mmHKbvb01oVjAjlN4lyyuBfwe/tvHUaq0PrmmWRPBKf4QhoZ6JWhmvKdKyKflzxhpvLn7BBpeJhnbpW8kXkk8gW2B8qe+lEapwBIxOSWI5+SHkKK3wTWOsHCaodaklZcmRLWgT85a18= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756889536; c=relaxed/simple; bh=mf9LgqcZWpmP7m5KW3Tj2JV0mHkTZDSnwKCnbyNv7/k=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=HnjdKNktD2i2EM5BkFd7B85rIHOIlR7qtIcULhFw65odVss7UMX6FaBhjOWtkJXyZHh+MfNr4nYY91AzKPUOJkJ5TfNESgMq3Qqfslk7ilxrknKu1fxN1qHhhIB86yNzFuzYPBIrVF9oOH4odKU9qzRFiUbghH7qlK0JJXGuS1Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=tR7T0d99; 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="tR7T0d99" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 69414C4CEF0; Wed, 3 Sep 2025 08:52:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1756889533; bh=mf9LgqcZWpmP7m5KW3Tj2JV0mHkTZDSnwKCnbyNv7/k=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=tR7T0d99DpfD2KCMGz5z2rMWw9qhcRyUglLgGch6JwD0dBc2tiY4Od4bc2LXvM1lm izOLnvcnl3cayr0h6zxSd23zeVVRcv3RleKmk2lW85bs30UhYHgUt47IZs6l+xTYbi t0ga5s8sPfeVIa6c61pvqE74QBSkN7kR1l612WBw1Q3TF5nawan6GN5a1wm8hNz35u oOTM9TFMlYqaLgChDlEH1LjsuabZknkEghGzCCJojvbX7grgIfUunwZBYedf4XHl0Z 0mSMZjyz9SRbtfLypm3/tJT7PvHlCBgAJOIGiAudURiz2eBTqJKWYEf2i6ztXdzGrl fKEzNNXPLtAog== From: Vincent Mailhol Date: Wed, 03 Sep 2025 17:50:08 +0900 Subject: [PATCH 09/21] 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: <20250903-canxl-netlink-prep-v1-9-904bd6037cd9@kernel.org> References: <20250903-canxl-netlink-prep-v1-0-904bd6037cd9@kernel.org> In-Reply-To: <20250903-canxl-netlink-prep-v1-0-904bd6037cd9@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=mf9LgqcZWpmP7m5KW3Tj2JV0mHkTZDSnwKCnbyNv7/k=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBk7GLt+Lu87zBEx//sLJs3IJypvq7XbOQN42Fsnfi/KZ 4p6nGzTUcrCIMbFICumyLKsnJNboaPQO+zQX0uYOaxMIEMYuDgFYCI17gz/PRbM1Ol2mbtuhjl7 /QJF48/ut9avLeounDNjjfyP3iNXTzMytByeo8Hy/nq19QT7fw8Ed3zfcvtvnojdAu7LrC+XtUv lMgMA 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 a7bcb2b0a1c06711601d0bb037c4b998259b5dfd..fcb23df08f7b76f341a298d0bd1= 6ec62e0a98525 100644 --- a/drivers/net/can/dev/netlink.c +++ b/drivers/net/can/dev/netlink.c @@ -172,7 +172,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 Fri Oct 3 08:47:48 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 62F232F360A; Wed, 3 Sep 2025 08:52: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=1756889535; cv=none; b=NoIpI3eHExsHf82/mWZNWT95Kc9Vlqk+jO1+Lk6CqtGhy/MYdz4NKMrmc7V0+RcI9SIMqNU6rkKtMbIXVeMjnAFUFaN9Ql/PuFznsx1TilI51rDV2DqtEvBttak2kuXB94/gFUo3qwS4Eotb9V1B5a7Z9GeV1EuOJ6YT3T4t0zE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756889535; c=relaxed/simple; bh=j+XT6RHjpBO0eBj0mjkVANxUKisnC4Q+X3d22r45gmA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Y7PegQazSRxrhtKzdtJgGQnCSX8hP+Vqi0OeJl5GCMMpCSBvTnRfGlWl2Rgk7oi2t1YHqsIlbCItCn57CDb50q/Qhi3Vcmj4Uu/39CR5vwh7KfDG8kIIKgIvXkJDb0orID51YrtcNb+NtJVuaP9zdtE/JYfhze7nuVH0sgnr+Qg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=qpw3SFX5; 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="qpw3SFX5" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0477BC4CEF5; Wed, 3 Sep 2025 08:52:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1756889535; bh=j+XT6RHjpBO0eBj0mjkVANxUKisnC4Q+X3d22r45gmA=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=qpw3SFX5R4Fv6VHFgzmMdwQZQ5b+NoippbZJOkBTCGeSco7ifF6H8TR0MBFcfdxTk H7nvyeKr/erkIFMjWaxIotlZhx8UhycCdRA55xcCKXeza5WGLB2qyv1XjFo2tMalTl 8ufSOkmzKfjq7Re/tRaDjOIA7TOAukNGoBfdjnsDL1fZ7eg7ta7zUsdv55d0nU7q47 k+4nhyaOL+bhCykk7zGrdGMwkHNQBhb4erCOqWUe2jDCcXoPWIjFvuUB5wnMUkPYQN 5KNJgtKZjMS6vhZI7YZhhB8umyqlPKPXYOPVXiS3nSh1utn/4YC3QqDn9TJPWcJn2v XArH/zrcyN/og== From: Vincent Mailhol Date: Wed, 03 Sep 2025 17:50:09 +0900 Subject: [PATCH 10/21] 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: <20250903-canxl-netlink-prep-v1-10-904bd6037cd9@kernel.org> References: <20250903-canxl-netlink-prep-v1-0-904bd6037cd9@kernel.org> In-Reply-To: <20250903-canxl-netlink-prep-v1-0-904bd6037cd9@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=j+XT6RHjpBO0eBj0mjkVANxUKisnC4Q+X3d22r45gmA=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBk7GHsN6toPmlrFfjgQOLdrobyNU9Y/HvVLUzeba8Utc 3VYbzW5o5SFQYyLQVZMkWVZOSe3Qkehd9ihv5Ywc1iZQIYwcHEKwEQkGhkZFuvPfrKndJv394au XQ3lHrmLrq/jEPx9N2L+MtFH09VOWzMyTGa34tgUdTFK/HZDiXDmjTVm/1d9d/ixaMmZRbv9Zx0 t4QQA 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 fcb23df08f7b76f341a298d0bd16ec62e0a98525..1a3389e3880f1c9c57e2e45f4ca= cc272c260fb07 100644 --- a/drivers/net/can/dev/netlink.c +++ b/drivers/net/can/dev/netlink.c @@ -164,12 +164,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) @@ -207,7 +208,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; } @@ -375,8 +376,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 Fri Oct 3 08:47:48 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 5E1FD2F3C0D; Wed, 3 Sep 2025 08:52:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756889538; cv=none; b=nLdHqarvJ19HFKVsXhCsmz5uFlLch8bFWPaQMqNunrYrFlO6jwTSktmG4+zDSKTa4vlVdOzUTD0Gc1Mu591EXKulwFYWX91UcpCIhuJT6WJpenuklY/wir6XI2zkj1Pe3/qYFvxoi6DldVEZeLFBXPopq08Tc+suCg5C9OytVkw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756889538; c=relaxed/simple; bh=PopfJEoHaOSDhL1YVnEW2pslcdJB86v8o2TxUlnq+FI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Z6fq8DSkOVBuJO69es83zq2xLK0DHFx2u9XVETPB8P9DaKc5nbeNWjAqqtTIUoDWRcnW5c2WutoX+V6hABT44MCKvOBUcNvOzwQHJlclc4Gb/Yih8LbHa/exFxMEpdB5gjm/8DUy9edtfbpQXFX01KAkDS9funJNtOAVBdq7bWo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=REYKqN6n; 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="REYKqN6n" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9304EC4CEF1; Wed, 3 Sep 2025 08:52:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1756889536; bh=PopfJEoHaOSDhL1YVnEW2pslcdJB86v8o2TxUlnq+FI=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=REYKqN6nCOK1gMoxjBQw7FH5p3NE0/RbE9H5EC64T6MY/fjRGSIULAbyiHoafTeRR 6iZ29I64l+3uu8lX7xdJPkcQzj06GTabmRW8koZmydXGcgrvheOiMPu+AdE/DcCVZ2 k1SfmpgIYprokUtP7gU/F6mS3dYyMhjfY3lg3IW3E43ID7ZiRFsYhzA0JcQ9IsHi+R 6uSPpVWo82VTohNK1mgFGPyMaiq/MMQT3gdijDVMgtJ42HJ5tzSUhEeEtpYdQVsqMW b1MIH2J1so8AAQRe+RsQhMgZUAfyrDImpq1vbgizKBlrAmx1sNtV8zxMo68T8JkZKJ 6rhrHEaXPClxg== From: Vincent Mailhol Date: Wed, 03 Sep 2025 17:50:10 +0900 Subject: [PATCH 11/21] 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: <20250903-canxl-netlink-prep-v1-11-904bd6037cd9@kernel.org> References: <20250903-canxl-netlink-prep-v1-0-904bd6037cd9@kernel.org> In-Reply-To: <20250903-canxl-netlink-prep-v1-0-904bd6037cd9@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=6532; i=mailhol@kernel.org; h=from:subject:message-id; bh=PopfJEoHaOSDhL1YVnEW2pslcdJB86v8o2TxUlnq+FI=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBk7GCcUzZBcXdbSXZKfPPmav/0CU65NClHn5xX96Jrto K/qknSno5SFQYyLQVZMkWVZOSe3Qkehd9ihv5Ywc1iZQIYwcHEKwESy7jEyfLLl3pGdcGhJtKVV /jYBW9lD2sG39xacvdqd/mrrXB/nJIb/iTZGfXfVtLkil1k9tte68Pdz+nG/df8YwibdED+eumg bDwA= 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: 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 1a3389e3880f1c9c57e2e45f4cacc272c260fb07..47c0b88ab2b3b1f6a2b00676012= 4fe0ba4767e42 100644 --- a/drivers/net/can/dev/netlink.c +++ b/drivers/net/can/dev/netlink.c @@ -213,12 +213,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 { + WARN_ON(1); /* 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() */ @@ -266,8 +349,6 @@ static int can_changelink(struct net_device *dev, struc= t nlattr *tb[], priv->ctrlmode &=3D ~CAN_CTRLMODE_FD_TDC_MASK; memset(&priv->fd.tdc, 0, sizeof(priv->fd.tdc)); } - - fd_tdc_flag_provided =3D cm->mask & CAN_CTRLMODE_FD_TDC_MASK; } =20 if (data[IFLA_CAN_BITTIMING]) { @@ -340,67 +421,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 Fri Oct 3 08:47:48 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 87FD02F3C14; Wed, 3 Sep 2025 08:52:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756889538; cv=none; b=fvGTt11mQb5UbC1NkWqLlsnt/IHCV3IMoI7DEoe7rzv+XV1NXk2tavYKGWgItc0wIhuy6wLOX7MODQA07gEJzdO15P3V/owamm9F6KJFjzJr6ByIhpF1kYbz4FCpERC3947nH4qhgUq5U79fdJZaJQFQ0l1FboS8+XyRwVRYTwY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756889538; c=relaxed/simple; bh=fbg4LcWIev6X2gJK2JMdJuUZi1OWGOZTlAtYM2zbcUY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=d4ud/ErVgKdB2b6MT8mAbwFIaPvWzTqI1Yxepo+zZAmcJbYMfYLVfwVg3NiWvCkrvKOv+BSRiJN+BT6GsQPyZqIri1CLwWqxjLn1Fz0U+zTREXAu17IR5tHb2g0EIQql3Q8ZT0IL6R8QtF46ZuQh4VJdt2LmnP3EKmgRlzcLBbM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=pd6uQBTw; 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="pd6uQBTw" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2E15FC4CEF0; Wed, 3 Sep 2025 08:52:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1756889538; bh=fbg4LcWIev6X2gJK2JMdJuUZi1OWGOZTlAtYM2zbcUY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=pd6uQBTwpePXctWI4W+PKhUHxpVa9yNRT9zF/LbqPcajXSGQ9TFdxUaWv9tIk3mgW 6rbczuCr24Zbs/+p6+B4VkcEZtpLDFlhz83C4XnGDqH7ic7HOUujr641aNbOzB6IVr flcZylt5RaLx8iqwP9paq1fw2l/UbE2mH/ZLq5+0O6IjNZmkWsLYrMxZVRHOnzbQoj 0xn0w3znRz3qL+XzC2LceLLEtj8zWtqcXU4sDrnbHR/k12tYel9Di0yJXpzZ7Q1jUv rqtElfscv0TiOPXlpzXlZVX9RgqVrTgWLPbZeMEIUquyOEs9kb+gHUllrtseFMU38I CeLlptGNKZiog== From: Vincent Mailhol Date: Wed, 03 Sep 2025 17:50:11 +0900 Subject: [PATCH 12/21] 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: <20250903-canxl-netlink-prep-v1-12-904bd6037cd9@kernel.org> References: <20250903-canxl-netlink-prep-v1-0-904bd6037cd9@kernel.org> In-Reply-To: <20250903-canxl-netlink-prep-v1-0-904bd6037cd9@kernel.org> To: Marc Kleine-Budde , Oliver Hartkopp Cc: Vincent Mailhol , =?utf-8?q?St=C3=A9phane_Grosjean?= , Robert Nawrath , Minh Le , Duy Nguyen , linux-can@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4331; i=mailhol@kernel.org; h=from:subject:message-id; bh=fbg4LcWIev6X2gJK2JMdJuUZi1OWGOZTlAtYM2zbcUY=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBk7GCcve5V+IHlNzMEfueUs3ivmz5PecnKFaPnpd/UuD iv2hfjN6ihlYRDjYpAVU2RZVs7JrdBR6B126K8lzBxWJpAhDFycAjARt8eMDNvmP/z597LHLP30 Ha+EulgzGn5PKlzw4mJkb9pxPsVTXCcY/vstLHJaujRTa+NRnh4luxW/Qjpm/LCosH4sssG++Hn UZB4A X-Developer-Key: i=mailhol@kernel.org; a=openpgp; fpr=ED8F700574E67F20E574E8E2AB5FEB886DBB99C2 Split the control mode change link logic into a new function: can_ctrlmode_changelink(). The purpose is to increase code readability by preventing can_changelink() from becoming too big. Signed-off-by: Vincent Mailhol --- drivers/net/can/dev/netlink.c | 98 ++++++++++++++++++++++++---------------= ---- 1 file changed, 55 insertions(+), 43 deletions(-) diff --git a/drivers/net/can/dev/netlink.c b/drivers/net/can/dev/netlink.c index 47c0b88ab2b3b1f6a2b006760124fe0ba4767e42..2f6192fc439bc3a7528aea2ad17= efd18fce91c2c 100644 --- a/drivers/net/can/dev/netlink.c +++ b/drivers/net/can/dev/netlink.c @@ -164,6 +164,60 @@ static int can_validate(struct nlattr *tb[], struct nl= attr *data[], return 0; } =20 +static int can_ctrlmode_changelink(struct net_device *dev, + struct nlattr *data[], + struct netlink_ext_ack *extack) +{ + struct can_priv *priv =3D netdev_priv(dev); + struct can_ctrlmode *cm; + u32 maskedflags; + u32 ctrlstatic; + + if (!data[IFLA_CAN_CTRLMODE]) + return 0; + + /* Do not allow changing controller mode while running */ + if (dev->flags & IFF_UP) + return -EBUSY; + + cm =3D nla_data(data[IFLA_CAN_CTRLMODE]); + maskedflags =3D cm->flags & cm->mask; + ctrlstatic =3D can_get_static_ctrlmode(priv); + + /* check whether provided bits are allowed to be passed */ + if (maskedflags & ~(priv->ctrlmode_supported | ctrlstatic)) + return -EOPNOTSUPP; + + /* do not check for static fd-non-iso if 'fd' is disabled */ + if (!(maskedflags & CAN_CTRLMODE_FD)) + ctrlstatic &=3D ~CAN_CTRLMODE_FD_NON_ISO; + + /* make sure static options are provided by configuration */ + if ((maskedflags & ctrlstatic) !=3D ctrlstatic) + return -EOPNOTSUPP; + + /* If a top dependency flag is provided, reset all its dependencies */ + if (cm->mask & CAN_CTRLMODE_FD) + priv->ctrlmode &=3D !CAN_CTRLMODE_FD_TDC_MASK; + + /* clear bits to be modified and copy the flag values */ + priv->ctrlmode &=3D ~cm->mask; + priv->ctrlmode |=3D maskedflags; + + /* CAN_CTRLMODE_FD can only be set when driver supports FD */ + if (priv->ctrlmode & CAN_CTRLMODE_FD) { + dev->mtu =3D CANFD_MTU; + } else { + dev->mtu =3D CAN_MTU; + memset(&priv->fd.data_bittiming, 0, + sizeof(priv->fd.data_bittiming)); + priv->ctrlmode &=3D ~CAN_CTRLMODE_FD_TDC_MASK; + memset(&priv->fd.tdc, 0, sizeof(priv->fd.tdc)); + } + + return 0; +} + static int can_tdc_changelink(struct data_bittiming_params *dbt_params, const struct nlattr *nla, struct netlink_ext_ack *extack) @@ -307,49 +361,7 @@ static int can_changelink(struct net_device *dev, stru= ct nlattr *tb[], /* We need synchronization with dev->stop() */ ASSERT_RTNL(); =20 - if (data[IFLA_CAN_CTRLMODE]) { - struct can_ctrlmode *cm; - u32 ctrlstatic; - u32 maskedflags; - - /* Do not allow changing controller mode while running */ - if (dev->flags & IFF_UP) - return -EBUSY; - cm =3D nla_data(data[IFLA_CAN_CTRLMODE]); - ctrlstatic =3D can_get_static_ctrlmode(priv); - maskedflags =3D cm->flags & cm->mask; - - /* check whether provided bits are allowed to be passed */ - if (maskedflags & ~(priv->ctrlmode_supported | ctrlstatic)) - return -EOPNOTSUPP; - - /* do not check for static fd-non-iso if 'fd' is disabled */ - if (!(maskedflags & CAN_CTRLMODE_FD)) - ctrlstatic &=3D ~CAN_CTRLMODE_FD_NON_ISO; - - /* make sure static options are provided by configuration */ - if ((maskedflags & ctrlstatic) !=3D ctrlstatic) - return -EOPNOTSUPP; - - /* If a top dependency flag is provided, reset all its dependencies */ - if (cm->mask & CAN_CTRLMODE_FD) - priv->ctrlmode &=3D !CAN_CTRLMODE_FD_TDC_MASK; - - /* clear bits to be modified and copy the flag values */ - priv->ctrlmode &=3D ~cm->mask; - priv->ctrlmode |=3D maskedflags; - - /* CAN_CTRLMODE_FD can only be set when driver supports FD */ - if (priv->ctrlmode & CAN_CTRLMODE_FD) { - dev->mtu =3D CANFD_MTU; - } else { - dev->mtu =3D CAN_MTU; - memset(&priv->fd.data_bittiming, 0, - sizeof(priv->fd.data_bittiming)); - priv->ctrlmode &=3D ~CAN_CTRLMODE_FD_TDC_MASK; - memset(&priv->fd.tdc, 0, sizeof(priv->fd.tdc)); - } - } + can_ctrlmode_changelink(dev, data, extack); =20 if (data[IFLA_CAN_BITTIMING]) { struct can_bittiming bt; --=20 2.49.1 From nobody Fri Oct 3 08:47:48 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 743042F4A0B; Wed, 3 Sep 2025 08:52:20 +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=1756889540; cv=none; b=Zq7xg0rUK/0SSjhKY4kr4obqRuI4E7IOzikmJkbEc9V4pe1wHrvpje1qiJ1Q5OSlP8HdPOj5j0np6uIWXoMgL9xFeXJhQGOppAQZPf8cb8Bg79fhcDUQWKoJzrX3J+8wkjoIpO+EwTNk6YjNCTt3IwoAaGtN0q8cISVxzdDL3IA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756889540; c=relaxed/simple; bh=2cE885bZ3ITTXuERma0Uf5Ne4R1XoOxisulxvZnvmb0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=oBXZR3WpNZ7hLj2XlIUHmP0g2sJGMVUVEWX0U+BaBk5u+qLYqXmNirwb0xxao2c42aKkZ9VDzWFXMayXmL216uknc8ffO9To++V+7Mbm0OUaEM8vDE6sLbF34IJ7IWxHJFBCjo/6x3JZDFignfBcmwumEZoCYUGqnCK/iOjhzpQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=b5qqi1s7; 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="b5qqi1s7" Received: by smtp.kernel.org (Postfix) with ESMTPSA id BE3CDC4CEF1; Wed, 3 Sep 2025 08:52:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1756889540; bh=2cE885bZ3ITTXuERma0Uf5Ne4R1XoOxisulxvZnvmb0=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=b5qqi1s7PZSitmNcQ3jrWgV+kaHP8tHTlNCe8eVMnzRAGs1f9FCwSRplxqbeWSOAZ BLRcwq2XR5BmOro1RswJj7TPzFZcYtBKqGjSBy/7mXvMnIJiXOPh3EkHOrWwMBbgJ6 60OriAqr6XhjRal6FIO0xf2shNtw7DAgBVlsvVau1YpbaHz3owAUrAn6wmm9PpHAyz IpOJOKnpYyBPm7SmkMg60O/KTE13jlxT+XLVUuX5rhljd8I30Al3FFx9CFtH7ISzPA dWW0vUR7tgVvDtQEEt8cG3ZBflfLfxBn2wu0ukgnsKuKtBTtieYXLzxL97jPeCDmVZ mdHseOT22BCvA== From: Vincent Mailhol Date: Wed, 03 Sep 2025 17:50:12 +0900 Subject: [PATCH 13/21] 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: <20250903-canxl-netlink-prep-v1-13-904bd6037cd9@kernel.org> References: <20250903-canxl-netlink-prep-v1-0-904bd6037cd9@kernel.org> In-Reply-To: <20250903-canxl-netlink-prep-v1-0-904bd6037cd9@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=2714; i=mailhol@kernel.org; h=from:subject:message-id; bh=2cE885bZ3ITTXuERma0Uf5Ne4R1XoOxisulxvZnvmb0=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBk7GKftU7B+MOlMQ31vS9pWAY6V5Y7eCsWCwZaF+y0Yf jKKaYV0lLIwiHExyIopsiwr5+RW6Cj0Djv01xJmDisTyBAGLk4BmIjhUob/bqUyN1x26V1NffTM zIt1uXwW00ZtoasXL7AdlmKWFNiXyfC/qGErh97G+33ZyimXdLY5BCg0FHhqfU34/KPUod2C6RE TAA== X-Developer-Key: i=mailhol@kernel.org; a=openpgp; fpr=ED8F700574E67F20E574E8E2AB5FEB886DBB99C2 can_tdc_get_size() 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 --- 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 2f6192fc439bc3a7528aea2ad17efd18fce91c2c..fc0d9d4ebc01fa56965a1c0d481= c07bd5fee392b 100644 --- a/drivers/net/can/dev/netlink.c +++ b/drivers/net/can/dev/netlink.c @@ -465,32 +465,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 @@ -534,7 +534,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 Fri Oct 3 08:47:48 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 1EC692F5492; Wed, 3 Sep 2025 08:52:21 +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=1756889542; cv=none; b=ODuIkB04RavYZkiLxvx86N+61FIU/2NOPBnfrT0K3rZzMwaIm5h4yU05nSULyGRu6pFrOf5DvacJ587Zl9QG5C2YuatOj+0u8I29pXF6O353i6k8693Nhb7S3cB46z8OlmOwV3X9JuuGoUJi4ay7mkvBLsUk+F48W+23UL28aXE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756889542; c=relaxed/simple; bh=gEfdU3yBgU6P6DlGIboec2M/W+93yge5Ct1ObsI/Vm0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=sWbQzYeiiZxKWCNVZKEqAPMi8XxqC1EPJJ+r8Z7uTtiIh6mxO/GV9xZKJEyu5HsIg80CKBL0DjN7BXhzUi/LErC2nfuhXsaImmpzGBj2vFgYsQfbZZTzrFCsFlapQOayCzZA2n4LUdcdFQHTP0DfyB1QZwsfDah7sYxaegAe8mM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=p2Hnkwvv; 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="p2Hnkwvv" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 58FAFC4CEF5; Wed, 3 Sep 2025 08:52:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1756889541; bh=gEfdU3yBgU6P6DlGIboec2M/W+93yge5Ct1ObsI/Vm0=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=p2Hnkwvv5txefRfTOr2myeip0uYFwI93Puhm2O+WSnwyihl8wntbGZ9SjVDfS9O0O AlitqKLqTVMqs9AOID+oDrvzsNl/igmg7i0c9fE5wyXocMiAIFE1Yjp1gdwGrhuCHX Si9CGitTSfFsQYqbYULzIWf4b4kOl6MCNlIsNaZ9tiXnH5SI9Ew1LWkJJcZTlZ73g6 coLXxULFMlquVaPdxUt++4ZKmX8HeblgTUa7DRSs9TiIH+wWnEV58GD5pi9n5uI5Iu ZZ8YQZm5T4PG9ABnzZfpimxczNbSJX0ZLxgcSEcHIsUv8k8whKUF5KCDa6qLQubCU+ eJuTJnkn6//hQ== From: Vincent Mailhol Date: Wed, 03 Sep 2025 17:50:13 +0900 Subject: [PATCH 14/21] 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: <20250903-canxl-netlink-prep-v1-14-904bd6037cd9@kernel.org> References: <20250903-canxl-netlink-prep-v1-0-904bd6037cd9@kernel.org> In-Reply-To: <20250903-canxl-netlink-prep-v1-0-904bd6037cd9@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=gEfdU3yBgU6P6DlGIboec2M/W+93yge5Ct1ObsI/Vm0=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBk7GGfGRX18u/DKIot+lftTr/uxpLfYu+Qyl+7Zy/6w+ t8TF4ulHaUsDGJcDLJiiizLyjm5FToKvcMO/bWEmcPKBDKEgYtTACZy8hTDb/ak1U9trGQS/JRP SMdbbXpzl08rVkpewdF3uoOgwkV2bkaGxksvxXa8XFcsneNRuLVa+ODqsrlJvGnpRbLtc15nivD xAgA= 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 fc0d9d4ebc01fa56965a1c0d481c07bd5fee392b..e1ccb65bb555919a99cd9d71fe5= f99399539fde2 100644 --- a/drivers/net/can/dev/netlink.c +++ b/drivers/net/can/dev/netlink.c @@ -497,6 +497,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 */ @@ -518,10 +535,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 */ @@ -530,14 +543,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 Fri Oct 3 08:47:48 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 64ABA2F656F; Wed, 3 Sep 2025 08:52:23 +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=1756889543; cv=none; b=Bxct7eFnCD0nfIzXH4Cnmte03nJCd+rizl66AmwmC//V0Kajt3CXcG8zEH6ZyWuujtC+bFFCjH8KWUNR7nJpSBUoSnvdjcbJpTOzIdOmnHExqQ6f5/o3CI57vPtXny0f6FEluCafpuBD+NzNpvdcXwub5PFhSkPdx5tDu1ppGPk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756889543; c=relaxed/simple; bh=VnK9XwWlQqTcAzjcLUdmaJ0eiYY8B6rEBCKETAxcsC8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=exUVvJn1bM4jaHV6DaI5M7296LUOyzsTTw9d23btRtAFq8HwSbGAn8JU9Htf0RAZ6Tf9oaIHavEZ9qUOf8N/F8vrArXy8DDWEcbZaVEpqxL0VTRwyjpAKlf1Wi6MqdBZpCdZRCL/tY/uW37e13d7cTyHhV0uI4pAIFA/P/EJ/NQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=DjG093ae; 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="DjG093ae" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E7937C4CEF1; Wed, 3 Sep 2025 08:52:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1756889543; bh=VnK9XwWlQqTcAzjcLUdmaJ0eiYY8B6rEBCKETAxcsC8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=DjG093aeLbynDiiMla18PPGn5uF0i5Lh66G0NUHG/9bGeeblXMzNdXBHiGPOuCiha dGpXArz/Fnbg4d0Tg40su2uOpIXQAnLSeEzv1jl43jJEy5k9V076m7kn0Ff5ZQ+WRR GpQc/MN7L4aXDuCqmDFHvB83TaAOXYnmx9LZHpoY1LtODVjt5RPEycJ1MuhFKNOZRq yeh5fthGX+K6lhkEytoKNerz8A3JPqgrtghmJK/1E0/fi1P+mKKajFgrg8LwFrevc9 8aMDZDc7nES6R3or/Y2bB/2t+wz7WeEweXijQUz7LK4loxO6rooCPY9X240fj3E/5z 0CUQ0lewTveRw== From: Vincent Mailhol Date: Wed, 03 Sep 2025 17:50:14 +0900 Subject: [PATCH 15/21] 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: <20250903-canxl-netlink-prep-v1-15-904bd6037cd9@kernel.org> References: <20250903-canxl-netlink-prep-v1-0-904bd6037cd9@kernel.org> In-Reply-To: <20250903-canxl-netlink-prep-v1-0-904bd6037cd9@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=VnK9XwWlQqTcAzjcLUdmaJ0eiYY8B6rEBCKETAxcsC8=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBk7GGf7LrC3ayo4UXLLWV+40v5sutb6e0x7H7FUlMsf0 VrT8rm/o5SFQYyLQVZMkWVZOSe3Qkehd9ihv5Ywc1iZQIYwcHEKwES83jH8L54s+uHITM6pMRPl F6eoKszKcPQ9Ira39jxbwcMr2YKy5xn+8GYzxdZMFzPvOlAQ/PuLz6Jf/aVlnHO3rXGeoZZvvpi TAQA= 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 e1ccb65bb555919a99cd9d71fe5f99399539fde2..c3004c92e55cef72b9d03f7742e= 05fb1404cb1a3 100644 --- a/drivers/net/can/dev/netlink.c +++ b/drivers/net/can/dev/netlink.c @@ -552,6 +552,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; @@ -634,10 +642,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, @@ -652,9 +658,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 Fri Oct 3 08:47:48 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 DCDD52F83D6; Wed, 3 Sep 2025 08:52:24 +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=1756889545; cv=none; b=cEjBEKcQjmYy25YdagqDKAGGxx4odw8xdsvEyAOUziGOfRaHAhi84/Afx51VpMhjBUOKDUAPAGLbaYHUOPlIRxZ9AK/q5Nqlwr0b4UtD8U2XJVZk2hX+4h4wZeeo6l/RK2PtxWSBRchhP1gvNdU8b9pY8AQ4hcQaTd972YQ38Fo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756889545; c=relaxed/simple; bh=fQLITV2DEwk+llmou/UkvpSu3rAnj7qUbF9deEat87I=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=XmqDbXmTwONQC9EyQINRhzufgHQLTOWh1kBRTzhyajbw8sFroOxpXYLZ1KPCMuLLUi0eYSgyz4z6bRVohw3N7CL/FQSAtAsYtWwDoEmR82JNzL/3tbHxDgHvMGfqKBx+DgfaSYQifOiPlGjjIR3fqTwjf9tlRe2mJGqpOi4w53E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Y8KxcZOW; 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="Y8KxcZOW" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8278BC4CEF0; Wed, 3 Sep 2025 08:52:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1756889544; bh=fQLITV2DEwk+llmou/UkvpSu3rAnj7qUbF9deEat87I=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Y8KxcZOWATFMgjMmZehIue5FFptUJNLbm7QNiMZVvEMThWnej2CR7hUWzIuESVLkV gPZJmn5JjSO2RQQx5vN02/fLVfA9LOSrklM6W5hdYaJDM4cn56dwIb3AzjIc2pJ3g9 mUmYl3gjdv/sCWPQQ0+m5l/2+Q/GCHdAl64Zu3BbCWwjgSP4ycnKzKCmVSX91OPMp2 Zg+rcsUWYrWHmm4mWOGRP/ECQJa0u6YG8FyxrZTqd42RyC7+mRdGmP5ekI83ILE7Ge v645TIRDaxM67SWxpEej+145PLYqPwePW9thh5f+g/rNUxtqBoKLqk4kSJY+e4aZsz jNKwEIrRGKrQQ== From: Vincent Mailhol Date: Wed, 03 Sep 2025 17:50:15 +0900 Subject: [PATCH 16/21] 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: <20250903-canxl-netlink-prep-v1-16-904bd6037cd9@kernel.org> References: <20250903-canxl-netlink-prep-v1-0-904bd6037cd9@kernel.org> In-Reply-To: <20250903-canxl-netlink-prep-v1-0-904bd6037cd9@kernel.org> To: Marc Kleine-Budde , Oliver Hartkopp Cc: Vincent Mailhol , =?utf-8?q?St=C3=A9phane_Grosjean?= , Robert Nawrath , Minh Le , Duy Nguyen , linux-can@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2383; i=mailhol@kernel.org; h=from:subject:message-id; bh=fQLITV2DEwk+llmou/UkvpSu3rAnj7qUbF9deEat87I=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBk7GOcZ5LQXcBz/KXfzvYvjW+7gAq74PI/lu2atmvur4 8zXUqWVHaUsDGJcDLJiiizLyjm5FToKvcMO/bWEmcPKBDKEgYtTACay9hTDbxYvs8cltooiC1v/ Tb/W8P7x20rviKUODaw3WrjZFu/8/ILhr0xNnkeMi/TuRkX3vp1tuSvuM857lxo2X6xz0vV/z7x U+QE= X-Developer-Key: i=mailhol@kernel.org; a=openpgp; fpr=ED8F700574E67F20E574E8E2AB5FEB886DBB99C2 Add function can_bittiming_fill_info() to factorise the logic when filling the bittiming constant information for Classical CAN and CAN FD. This function will be reused later on for CAN XL. Signed-off-by: Vincent Mailhol --- drivers/net/can/dev/netlink.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/drivers/net/can/dev/netlink.c b/drivers/net/can/dev/netlink.c index c3004c92e55cef72b9d03f7742e05fb1404cb1a3..cf9bf8eb1ae8e5c6b7910d8c993= 5cad73b78ef40 100644 --- a/drivers/net/can/dev/netlink.c +++ b/drivers/net/can/dev/netlink.c @@ -560,6 +560,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; @@ -645,9 +654,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) || @@ -661,10 +669,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 Fri Oct 3 08:47:48 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 360D42FA0DB; Wed, 3 Sep 2025 08:52:26 +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=1756889547; cv=none; b=mqO6TCdTDQOZYjGMHoG/CzGsBZtpOLIqPeb+LeeWO8U855HkYMO0dbsVaN45+zkQOyARdUod3F1QgXw8CkHaWS4qGO9i7oLarGZ/y2Nct+l6L0BXZt46xmps9dKeR+Ql/3viRJZf0pXKlbBrmKEORBt+FwLAbZOB83NgYhQZlco= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756889547; c=relaxed/simple; bh=WbFhdmHGiJMxSSdaa/G3rt+vK4xfLAmAV1f3xXUfhOs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=f2SpXPFtfQtktrGyEqsNt0vCzfutGgLf2lZm/212m8fpApD3x3vfEkJseNS0men5nzEjHYGPvp/QO3ZdzIdBu7+9auAex05C338FoQcl9tRsxBx7D3mfM80kdoSRaZHz1l2yOLYVGcBwwUv/Xri4Ba8gtzClqoq1pevRjl3DNGE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=haaylu/V; 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="haaylu/V" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1CB9EC4CEF1; Wed, 3 Sep 2025 08:52:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1756889546; bh=WbFhdmHGiJMxSSdaa/G3rt+vK4xfLAmAV1f3xXUfhOs=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=haaylu/VU28sD/QWdBQfc9/mWNZmEtdL8XdTK2e/upmqS8q0C4JdDhxpUeBGXvLEc +Rzo7PT2ZrtdDnDWag4TQx2yLGBacMSJb+WhTu6UcB2Hn7waTjRp/hvhnEGSl6CyBa Yd9shlOvTLeGIbRiT0V3GVxOPPVtNhekhui4koCJfVW2AJ6gmj/xoZSLjPULd/bCT2 MnkAGQeBdgHSGA6maFrPaxClUp5qMf2tAY/AaswCk2DCokxitZf8caZ5+U8bTn4805 K1uH6mRT15Zj1xyOR5NST+6e/fGKmdJhCscUVG10FXtcAsJZqHU7roBOHEDKvXWXaC tji2LPeU9ZXeA== From: Vincent Mailhol Date: Wed, 03 Sep 2025 17:50:16 +0900 Subject: [PATCH 17/21] 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: <20250903-canxl-netlink-prep-v1-17-904bd6037cd9@kernel.org> References: <20250903-canxl-netlink-prep-v1-0-904bd6037cd9@kernel.org> In-Reply-To: <20250903-canxl-netlink-prep-v1-0-904bd6037cd9@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=WbFhdmHGiJMxSSdaa/G3rt+vK4xfLAmAV1f3xXUfhOs=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBk7GBeI/PogrLfp/Pzfd//PZypqOnHV7WONicnbD39mO WTk3ThX31HKwiDGxSArpsiyrJyTW6Gj0Dvs0F9LmDmsTCBDGLg4BWAiR2YwMnydsnRptmkVq07H hKodkuekHaofqcUW7zojG1Ry86vIbHFGhvMXAhbvejTLyNp86oxA2cDS2eZb4rKi9+z167LjPpP cyA4A 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 cf9bf8eb1ae8e5c6b7910d8c9935cad73b78ef40..092031693ce9f55f2c396fc7de8= 336932f6f5516 100644 --- a/drivers/net/can/dev/netlink.c +++ b/drivers/net/can/dev/netlink.c @@ -569,6 +569,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; @@ -679,17 +688,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 Fri Oct 3 08:47:48 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 613FD2ED17D; Wed, 3 Sep 2025 08:52:28 +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=1756889549; cv=none; b=rLjOTgTSWuFDvoJCEC9teQNEcQqEnNu9x+on87MmmMv4E8TuEIwQHzj3O6gXUj/DY+XHOOhXvsZkVF/DA1iGTxkIKwW6ZAiqQOQ6yu381Sk9FZOlIzuQIfJaK4PZuvkkGK30A/sQHNLbv/d7YnqmZevSSk9H1tQSVLJlSbYuTzc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756889549; c=relaxed/simple; bh=zVeTURsHurwai0xPsrdWCl2FwVuQvrc8ga9hcoEveII=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=j98K71SpdUIq7QQqgfPiWEEzRC0nB5uWaltnfPNGXVUggzkSfrzLLcpsWEX/OmZNzmPL0zvbnu2vwo7z5sNe1qJt19kxOT6sxaFynsQ6MMWte6IEDqhduCgl8cPRcaNE36suo4ORhSmWRwr2KYif+VkgcTsj1z1/kyKEWXPWMrI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=AB6b3N/G; 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="AB6b3N/G" Received: by smtp.kernel.org (Postfix) with ESMTPSA id AE4F6C4CEF0; Wed, 3 Sep 2025 08:52:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1756889547; bh=zVeTURsHurwai0xPsrdWCl2FwVuQvrc8ga9hcoEveII=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=AB6b3N/GPZUQZ04F2IKiC+c3TFB4pycz2nh/yZaQui13xoRX2oYm5tc8j7GBeV93v S2224elLJ56w0L9j/FNxgYWzuTSNAjsTy3DJuNS0iuXGAKccq5E1tK9dsSC9qqZkx/ 8rYTo4lkB58hsd1jqpFhhyuPoi+XXeNu+ldXMj7mJ7wDRnWQWlXojUlrTVH3V6q1TM P1UU/rzXoEd8DGcmqO0XSB2eUnScax6qiplSk6tn32RSAptSfwsyWAs5smcKNlnN7B xAp3Qe41iY06c5/glKKQVmbz5Zmj6E6/z3ASZTMhP+STE4sUaZDWiFG+QXq7PvGpRt 9lhG01DGHEA0w== From: Vincent Mailhol Date: Wed, 03 Sep 2025 17:50:17 +0900 Subject: [PATCH 18/21] 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: <20250903-canxl-netlink-prep-v1-18-904bd6037cd9@kernel.org> References: <20250903-canxl-netlink-prep-v1-0-904bd6037cd9@kernel.org> In-Reply-To: <20250903-canxl-netlink-prep-v1-0-904bd6037cd9@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=3285; i=mailhol@kernel.org; h=from:subject:message-id; bh=zVeTURsHurwai0xPsrdWCl2FwVuQvrc8ga9hcoEveII=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBk7GBez+P3b/vYb/yuPw8sKgnJ/qjXnbPpe7nx96YPW7 NsTzrxK6ihlYRDjYpAVU2RZVs7JrdBR6B126K8lzBxWJpAhDFycAjCR95cZ/gr07O/QSamSY160 wmr9ksaFXRIbOLsUP/J67nyZLGyRXMTw35N5vjSTjSdX7WGeHSIJBq/VOk6XTzhyPvyGi4iGQsc lVgA= 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: 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 092031693ce9f55f2c396fc7de8336932f6f5516..2784cacd7adf5e69f24c110e749= a651b188f69f4 100644 --- a/drivers/net/can/dev/netlink.c +++ b/drivers/net/can/dev/netlink.c @@ -578,21 +578,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 { + WARN_ON(1); /* 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; @@ -604,15 +617,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; @@ -700,7 +713,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 Fri Oct 3 08:47:48 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 EDDD82EDD40; Wed, 3 Sep 2025 08:52:29 +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=1756889550; cv=none; b=J3rWZP+zfBn7fPUsmE1pmZ0C3n6OvoN/fSwj/CLRJ7NlT/TqsIWvSJE/Btgu46CUo0nG7Yzhb9JpjxeCUJWzwew2SKG95D1EUHsN5EIPqyw1QpOq8DhDc2yYyhOg8Wn7kK/qNPDKVMZy8kfoco13CzENkQcqNUkmD6l7Jy9y7CA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756889550; c=relaxed/simple; bh=I2ilC3YxDFGOpiam+YoUsNPk2gWcqdKV9hWnR++kZ2k=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Gl2wsfPYt102JAuKfCJAuGfmxSQ974HW8N9IyjUcAtwdOBu9pjwXkyQ/vSsJVv/7w+m8gHVoPjCzXZdwr7nnorvnypA2/7Nxl3rOFQXfIVrQy97/zgbyEGRToTme5jmEMaxC2BzII3t6YS73YwhOJkkoXNzl6Efyx9BPDGdW5Mc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=A+Xx1QOo; 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="A+Xx1QOo" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 49325C4CEF1; Wed, 3 Sep 2025 08:52:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1756889549; bh=I2ilC3YxDFGOpiam+YoUsNPk2gWcqdKV9hWnR++kZ2k=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=A+Xx1QOorO+T5TbWm7IfDwv49C/ZoDIu02crKJssgUhX+QflB/wkDy9iSleK4etgE RT9lg74XTMMPJb60Ss98XeNUHmMs/4B14mQlmXASSsGtd8Mv5ExJ599U9Osd51/DJq Ukn7d8zclPSQf9tuUxIR/86Ih9EDmdauhDT4YCaaMp7GWYXztSO91QTYRLt5ESHB1G iaAxWBF6TS7fWq//etY5uK+5+ckUT7vEjN7LGnpJWNvDAnPJkH+YUZMXwOiQYisQ52 yUpFybufi3yMrPz+b3UiJbvyklLjxiXG3r3NkJG3nY7hsilMyh5mtq9BD4i3IEu4or qaGfqfxN4XTVg== From: Vincent Mailhol Date: Wed, 03 Sep 2025 17:50:18 +0900 Subject: [PATCH 19/21] 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: <20250903-canxl-netlink-prep-v1-19-904bd6037cd9@kernel.org> References: <20250903-canxl-netlink-prep-v1-0-904bd6037cd9@kernel.org> In-Reply-To: <20250903-canxl-netlink-prep-v1-0-904bd6037cd9@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=I2ilC3YxDFGOpiam+YoUsNPk2gWcqdKV9hWnR++kZ2k=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBk7GJd9fOF26p3I9TfPSo7Pe38p6zvHw7q906VS4voDF Iqyfs8z6yhlYRDjYpAVU2RZVs7JrdBR6B126K8lzBxWJpAhDFycAjARo+cM/93dvCxfb1hxaoaI w+yP/t75L+119Cdk/jCu6zJesXdaWCMjw5SAc46dJx0y8++0C/J7zfjW83TndOPN0T+++PgWfGN 5wwQA 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 2784cacd7adf5e69f24c110e749a651b188f69f4..d1c54c7dd333d229f03fc653d61= a21a48f8c8865 100644 --- a/drivers/net/can/dev/netlink.c +++ b/drivers/net/can/dev/netlink.c @@ -334,7 +334,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 Fri Oct 3 08:47:48 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 487D32F656F; Wed, 3 Sep 2025 08:52:31 +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=1756889551; cv=none; b=NAW6MAr6+yU0VbxgJL9bYW+28PreeIooiWmSuRADLg7/oVUo35MSRMpp0Q5ZUpxPCMlu/szBjnORxzrCLRbTfX9ZnB+LJBEk3DwRnhWZIqyr2psLnWFMPnGycRn7ZzzNum+D8u0lCJ7iHkJajwlZumzl8X4hnTZALOOyMmbTjzE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756889551; c=relaxed/simple; bh=6hC3+gNUpUdXFVXOXPAVa6F6CDMtqk3DayLs5ctqINQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=u80ASPkDm5USl4gGN34cC/bxyZqCGRusMuuftm7i34FKjcLHPQpUvyFLSCiSSvhG6PhU/Qsp0F8sM6Vs3nGEMckAV+E2h7cr14xi6DzswM18La6OA4rHz4SUinQq3f3iudJbXfnqhqac3tv72A/P5ASnInoNto7/mk//SJ4RECs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Kv0axl61; 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="Kv0axl61" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D9F79C4CEF8; Wed, 3 Sep 2025 08:52:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1756889551; bh=6hC3+gNUpUdXFVXOXPAVa6F6CDMtqk3DayLs5ctqINQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Kv0axl611T0hvzUS7eHo3I9xQiHObnP7HroriCtRoOQEIHCJy20bg3SGD7unsm/WO tcRyVa0fnLqUMkQ8b8tBkcw+zKByqWhn+CLDl+NRid1zk60WBcVT25dwtRHxn6RTQY NJ3oX2tAr+lEdHBn60oCWEP6F4fvrhMoftDviLtwqUbAInClI6InjlBAHRjQ31ZH8o W4g3UAvsHiKwhbAXpQoC3CWJSBF4OUlkrPr4S/BdbIMvMbTOwD9Di37sVHr080Ka+1 od1cTJVwvW+key4WvxHUlrcHIrMwRTtiBPSDVcy8RI1WaozuNgqEA/+ZvIrFk4xF+L L1VkmJHzrWqTg== From: Vincent Mailhol Date: Wed, 03 Sep 2025 17:50:19 +0900 Subject: [PATCH 20/21] 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: <20250903-canxl-netlink-prep-v1-20-904bd6037cd9@kernel.org> References: <20250903-canxl-netlink-prep-v1-0-904bd6037cd9@kernel.org> In-Reply-To: <20250903-canxl-netlink-prep-v1-0-904bd6037cd9@kernel.org> To: Marc Kleine-Budde , Oliver Hartkopp Cc: Vincent Mailhol , =?utf-8?q?St=C3=A9phane_Grosjean?= , Robert Nawrath , Minh Le , Duy Nguyen , linux-can@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2864; i=mailhol@kernel.org; h=from:subject:message-id; bh=6hC3+gNUpUdXFVXOXPAVa6F6CDMtqk3DayLs5ctqINQ=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBk7GFfM32Y4L0GzP3Tj8TzDyywlJ7ols4WXH60JCHpzp /1OvC5LRykLgxgXg6yYIsuyck5uhY5C77BDfy1h5rAygQxh4OIUgIkUFDIyNL17cfFKykShnUsP +n++JRF71mVZ8Zcpr1ay3BK3m+xcsoWRYclHg7r4pK71hbeO9Wuc+6TQOf1W7Y9FXFPYOKMyy6o D2AA= X-Developer-Key: i=mailhol@kernel.org; a=openpgp; fpr=ED8F700574E67F20E574E8E2AB5FEB886DBB99C2 In an effort to give more human readable messages when errors occur because of conflicting options, it can be useful to convert the CAN control mode flags into text. Add a function which converts the first set CAN control mode into a human readable string. The reason to only convert the first one is to simplify edge cases: imagine that there are several invalid control modes, we would just return the first invalid one to the user, thus not having to handle complex string concatenation. The user can then solve the first problem, call the netlink interface again and see the next issue. People who wish to enumerate all the control modes can still do so by, for example, using this new function in a for_each_set_bit() loop. Signed-off-by: Vincent Mailhol --- drivers/net/can/dev/dev.c | 33 +++++++++++++++++++++++++++++++++ include/linux/can/dev.h | 2 ++ 2 files changed, 35 insertions(+) diff --git a/drivers/net/can/dev/dev.c b/drivers/net/can/dev/dev.c index 3913971125de0ab16b4ad9f36712954141014ddf..d9368ca828fffbda45a19af78e4= f8271acfba6c4 100644 --- a/drivers/net/can/dev/dev.c +++ b/drivers/net/can/dev/dev.c @@ -88,6 +88,39 @@ const char *can_get_state_str(const enum can_state state) } EXPORT_SYMBOL_GPL(can_get_state_str); =20 +const char *can_get_ctrlmode_str(u32 ctrlmode) +{ + switch (ctrlmode & ~(ctrlmode - 1)) { + case 0: + return "none"; + case CAN_CTRLMODE_LOOPBACK: + return "loopback"; + case CAN_CTRLMODE_LISTENONLY: + return "listen-only"; + case CAN_CTRLMODE_3_SAMPLES: + return "triple-sampling"; + case CAN_CTRLMODE_ONE_SHOT: + return "one-shot"; + case CAN_CTRLMODE_BERR_REPORTING: + return "berr-reporting"; + case CAN_CTRLMODE_FD: + return "fd"; + case CAN_CTRLMODE_PRESUME_ACK: + return "presume-ack"; + case CAN_CTRLMODE_FD_NON_ISO: + return "fd-non-iso"; + case CAN_CTRLMODE_CC_LEN8_DLC: + return "cc-len8-dlc"; + case CAN_CTRLMODE_TDC_AUTO: + return "fd-tdc-auto"; + case CAN_CTRLMODE_TDC_MANUAL: + return "fd-tdc-manual"; + default: + return ""; + } +} +EXPORT_SYMBOL_GPL(can_get_ctrlmode_str); + static enum can_state can_state_err_to_state(u16 err) { if (err < CAN_ERROR_WARNING_THRESHOLD) diff --git a/include/linux/can/dev.h b/include/linux/can/dev.h index 55aaadaacf68f940fa1b71f7c438e68b84080292..27690a8bea44d334bf1ac8f779a= e36189e0e1493 100644 --- a/include/linux/can/dev.h +++ b/include/linux/can/dev.h @@ -159,6 +159,8 @@ int can_restart_now(struct net_device *dev); void can_bus_off(struct net_device *dev); =20 const char *can_get_state_str(const enum can_state state); +const char *can_get_ctrlmode_str(u32 ctrlmode); + void can_state_get_by_berr_counter(const struct net_device *dev, const struct can_berr_counter *bec, enum can_state *tx_state, --=20 2.49.1 From nobody Fri Oct 3 08:47:48 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 1CAF92FAC1E; Wed, 3 Sep 2025 08:52:32 +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=1756889553; cv=none; b=OlnybEu6ZSMKa3N86kku5cGbuJ+GK2PNE5yO1GlUcfIe8Xe2hKMq0c2aZSeeJQv3frCFm6mndMO2CbLI1vKAGCDvjfRTiMKkn4auZXaIWWfgpxQJTqnY4M/JY61kQbH+REPJpoVqHpiGHV6KaklaxbyYvaZ8/hGc18Gth+Xtt7o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756889553; c=relaxed/simple; bh=+0t4xaF4YQWKUKq5oT/NXwwt6M4dMUzezfpU6070hs0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ZpBslYEnEgdZ+QJAQ47dNAcH0cNXFRVeax7ggqTb+Pdgh+90ZB2nLb1lHtvgbCdNF0OC1FMdSxIsDAoM0zB4JC57ctuKmvnQWqK9My9+Cv0FQQ70H8TJLA+JUPMRjazGDXZu50btuk/kgh+TqA7AINRRtt7/NMFGUd8OEnbtKFs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Ekjgf4hi; 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="Ekjgf4hi" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 758ABC4CEF5; Wed, 3 Sep 2025 08:52:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1756889552; bh=+0t4xaF4YQWKUKq5oT/NXwwt6M4dMUzezfpU6070hs0=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Ekjgf4hiIitzsM8p8Y3R8SGF+e4hpG+ZFwa5b3TGSYgJuHJFVCKLOhkdVvaOtrs4V RXc9Dem0zcblgutxa+K/8brJvVRafKM/7DqambCp6jXCex/xhXSRFCHWmdK+Yr0nQz kWYhEIVf74+bfOD5J84kICPj3I9sJX84gp/glm5eT5M1IhljYJLLRlYunCuoaP3w5Y c7pbs9AvPZ4mfoxO0+rPh32O6t8LevH6tGd3GIZhYR0og49rohc/djZgdj+JG5WhJA 1eqSaNvOdqrGlFyS0MnqsMorEdF5JCAYI0Cik6ktJ4gi5M1KycZrnueLUF4/YZbrZO 6U0kwaROMfnmw== From: Vincent Mailhol Date: Wed, 03 Sep 2025 17:50:20 +0900 Subject: [PATCH 21/21] 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: <20250903-canxl-netlink-prep-v1-21-904bd6037cd9@kernel.org> References: <20250903-canxl-netlink-prep-v1-0-904bd6037cd9@kernel.org> In-Reply-To: <20250903-canxl-netlink-prep-v1-0-904bd6037cd9@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=6019; i=mailhol@kernel.org; h=from:subject:message-id; bh=+0t4xaF4YQWKUKq5oT/NXwwt6M4dMUzezfpU6070hs0=; b=owGbwMvMwCV2McXO4Xp97WbG02pJDBk7GFdbfbwi9MHBy6Fc4brlibdPZJs7vy85GBNX3MjJ4 +kY1WrXUcrCIMbFICumyLKsnJNboaPQO+zQX0uYOaxMIEMYuDgFYCIBhQz/IzvYuWUNPz/kT1ub k1h7YV/UdMXFl8Ufd9ssXOVgkJPAxcgw4fTCVDaFbLG/6+3f/jjbNeMcc3NG/poOyyMdbJsZcmu YAQ== 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 d1c54c7dd333d229f03fc653d61a21a48f8c8865..f39f6310312aa404e025fb7ff11= e483a3d9f9f20 100644 --- a/drivers/net/can/dev/netlink.c +++ b/drivers/net/can/dev/netlink.c @@ -63,15 +63,23 @@ static int can_validate_tdc(struct nlattr *data_tdc, bool tdc_auto =3D tdc_flags & CAN_CTRLMODE_TDC_AUTO_MASK; int err; =20 - /* CAN_CTRLMODE_TDC_{AUTO,MANUAL} are mutually exclusive */ - if (tdc_auto && tdc_manual) + if (tdc_auto && tdc_manual) { + NL_SET_ERR_MSG(extack, + "TDC manual and auto modes are mutually exclusive"); return -EOPNOTSUPP; + } =20 /* If one of the CAN_CTRLMODE_TDC_* flag is set then TDC * must be set and vice-versa */ - if ((tdc_auto || tdc_manual) !=3D !!data_tdc) + if ((tdc_auto || tdc_manual) && !data_tdc) { + NL_SET_ERR_MSG(extack, "TDC parameters are missing"); return -EOPNOTSUPP; + } + if (!(tdc_auto || tdc_manual) && data_tdc) { + NL_SET_ERR_MSG(extack, "TDC mode (auto or manual) is missing"); + return -EOPNOTSUPP; + } =20 /* If providing TDC parameters, at least TDCO is needed. TDCV * is needed if and only if CAN_CTRLMODE_TDC_MANUAL is set @@ -85,15 +93,23 @@ static int can_validate_tdc(struct nlattr *data_tdc, return err; =20 if (tb_tdc[IFLA_CAN_TDC_TDCV]) { - if (tdc_auto) + if (tdc_auto) { + NL_SET_ERR_MSG(extack, + "TDCV is incompatible with TDC auto mode"); return -EOPNOTSUPP; + } } else { - if (tdc_manual) + if (tdc_manual) { + NL_SET_ERR_MSG(extack, + "TDC manual mode requires TDCV"); return -EOPNOTSUPP; + } } =20 - if (!tb_tdc[IFLA_CAN_TDC_TDCO]) + if (!tb_tdc[IFLA_CAN_TDC_TDCO]) { + NL_SET_ERR_MSG(extack, "TDCO is missing"); return -EOPNOTSUPP; + } } =20 return 0; @@ -104,6 +120,7 @@ static int can_validate_databittiming(struct nlattr *da= ta[], int ifla_can_data_bittiming, u32 flags) { struct nlattr *data_tdc; + const char *type; u32 tdc_flags; bool is_on; int err; @@ -112,18 +129,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 { WARN_ON(1); /* 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); @@ -170,8 +200,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; @@ -181,20 +210,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) @@ -227,8 +264,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); @@ -443,8 +482,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