Commit bb9a242c authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

Merge tag 'linux-can-next-for-6.18-20250924' of...

Merge tag 'linux-can-next-for-6.18-20250924' of git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can-next

Marc Kleine-Budde says:

====================
pull-request: can-next 2025-09-25

this is a pull request of 48 patches for net-next/main, which
supersedes tags/linux-can-next-for-6.18-20250923.

The 1st patch is by Xichao Zhao and converts ns_to_ktime() to
us_to_ktime() in the m_can driver.

Vincent Mailhol contributes 2 patches: Updating the MAINTAINERS and
mailmap files to Vincent's new email address and sorting the includes
in the CAN helper library alphabeticaly.

Stéphane Grosjean's patch modifies all peak CAN drivers and the
mailmap to reflect Stéphane's new email address.

4 patches by Biju Das update the CAN-FD handling in the rcar_canfd
driver.

Followed by 11 patches by Geert Uytterhoeven updating and improving
the rcar_can driver.

Stefan Mätje contributes 2 patches for the esd_usb driver updating the
error messages.

The next 3 patch series are all by Vincent Mailhol: 3 patches to
optimize the size of struct raw_sock and struct uniqframe. 4 patches
which rework the CAN MTU logic as preparation for CAN-XL interfaces.
And finally 20 patches that prepare and refactor the CAN netlink code
for the upcoming CAN-XL support.

* tag 'linux-can-next-for-6.18-20250924' of git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can-next: (48 commits)
  can: netlink: add userland error messages
  can: dev: add can_get_ctrlmode_str()
  can: calc_bittiming: make can_calc_tdco() FD agnostic
  can: netlink: make can_tdc_fill_info() FD agnostic
  can: netlink: add can_bitrate_const_fill_info()
  can: netlink: add can_bittiming_const_fill_info()
  can: netlink: add can_bittiming_fill_info()
  can: netlink: add can_data_bittiming_get_size()
  can: netlink: make can_tdc_get_size() FD agnostic
  can: netlink: add can_ctrlmode_changelink()
  can: netlink: add can_dtb_changelink()
  can: netlink: make can_tdc_changelink() FD agnostic
  can: netlink: remove useless check in can_tdc_changelink()
  can: netlink: refactor CAN_CTRLMODE_TDC_{AUTO,MANUAL} flag reset logic
  can: netlink: add can_validate_databittiming()
  can: netlink: add can_validate_tdc()
  can: netlink: refactor can_validate_bittiming()
  can: netlink: document which symbols are FD specific
  can: dev: make can_get_relative_tdco() FD agnostic and move it to bittiming.h
  can: dev: move struct data_bittiming_params to linux/can/bittiming.h
  ...
====================

Link: https://patch.msgid.link/20250925121332.848157-1-mkl@pengutronix.de


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents ed6cfe86 896d52af
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -741,6 +741,8 @@ Sriram Yagnaraman <sriram.yagnaraman@ericsson.com> <sriram.yagnaraman@est.tech>
Stanislav Fomichev <sdf@fomichev.me> <sdf@google.com>
Stanislav Fomichev <sdf@fomichev.me> <stfomichev@gmail.com>
Stefan Wahren <wahrenst@gmx.net> <stefan.wahren@i2se.com>
Stéphane Grosjean <stephane.grosjean@hms-networks.com> <s.grosjean@peak-system.com>
Stéphane Grosjean <stephane.grosjean@hms-networks.com> <stephane.grosjean@free.fr>
Stéphane Witzmann <stephane.witzmann@ubpmes.univ-bpclermont.fr>
Stephen Hemminger <stephen@networkplumber.org> <shemminger@linux-foundation.org>
Stephen Hemminger <stephen@networkplumber.org> <shemminger@osdl.org>
@@ -817,6 +819,7 @@ Veera Sundaram Sankaran <quic_veeras@quicinc.com> <veeras@codeaurora.org>
Veerabhadrarao Badiganti <quic_vbadigan@quicinc.com> <vbadigan@codeaurora.org>
Venkateswara Naralasetty <quic_vnaralas@quicinc.com> <vnaralas@codeaurora.org>
Vikash Garodia <quic_vgarodia@quicinc.com> <vgarodia@codeaurora.org>
Vincent Mailhol <mailhol@kernel.org> <mailhol.vincent@wanadoo.fr>
Vinod Koul <vkoul@kernel.org> <vinod.koul@intel.com>
Vinod Koul <vkoul@kernel.org> <vinod.koul@linux.intel.com>
Vinod Koul <vkoul@kernel.org> <vkoul@infradead.org>
+2 −2
Original line number Diff line number Diff line
@@ -5415,7 +5415,7 @@ F: net/sched/sch_cake.c
CAN NETWORK DRIVERS
M:	Marc Kleine-Budde <mkl@pengutronix.de>
M:	Vincent Mailhol <mailhol.vincent@wanadoo.fr>
M:	Vincent Mailhol <mailhol@kernel.org>
L:	linux-can@vger.kernel.org
S:	Maintained
W:	https://github.com/linux-can
@@ -9094,7 +9094,7 @@ S: Odd Fixes
F:	drivers/net/ethernet/agere/
ETAS ES58X CAN/USB DRIVER
M:	Vincent Mailhol <mailhol.vincent@wanadoo.fr>
M:	Vincent Mailhol <mailhol@kernel.org>
L:	linux-can@vger.kernel.org
S:	Maintained
F:	Documentation/networking/devlink/etas_es58x.rst
+6 −4
Original line number Diff line number Diff line
@@ -173,13 +173,15 @@ int can_calc_bittiming(const struct net_device *dev, struct can_bittiming *bt,

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)

{
	if (!tdc_const || !(ctrlmode_supported & CAN_CTRLMODE_TDC_AUTO))
	u32 tdc_auto = tdc_mask & CAN_CTRLMODE_TDC_AUTO_MASK;

	if (!tdc_const || !(ctrlmode_supported & tdc_auto))
		return;

	*ctrlmode &= ~CAN_CTRLMODE_FD_TDC_MASK;
	*ctrlmode &= ~tdc_mask;

	/* 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 can_tdc_const *tdc_const,
		if (sample_point_in_tc < tdc_const->tdco_min)
			return;
		tdc->tdco = min(sample_point_in_tc, tdc_const->tdco_max);
		*ctrlmode |= CAN_CTRLMODE_TDC_AUTO;
		*ctrlmode |= tdc_auto;
	}
}
+75 −5
Original line number Diff line number Diff line
@@ -4,17 +4,17 @@
 * Copyright (C) 2008-2009 Wolfgang Grandegger <wg@grandegger.com>
 */

#include <linux/kernel.h>
#include <linux/slab.h>
#include <linux/netdevice.h>
#include <linux/if_arp.h>
#include <linux/workqueue.h>
#include <linux/can.h>
#include <linux/can/can-ml.h>
#include <linux/can/dev.h>
#include <linux/can/skb.h>
#include <linux/gpio/consumer.h>
#include <linux/if_arp.h>
#include <linux/kernel.h>
#include <linux/netdevice.h>
#include <linux/of.h>
#include <linux/slab.h>
#include <linux/workqueue.h>

static void can_update_state_error_stats(struct net_device *dev,
					 enum can_state new_state)
@@ -88,6 +88,39 @@ const char *can_get_state_str(const enum can_state state)
}
EXPORT_SYMBOL_GPL(can_get_state_str);

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 "<unknown>";
	}
}
EXPORT_SYMBOL_GPL(can_get_ctrlmode_str);

static enum can_state can_state_err_to_state(u16 err)
{
	if (err < CAN_ERROR_WARNING_THRESHOLD)
@@ -240,6 +273,8 @@ void can_setup(struct net_device *dev)
{
	dev->type = ARPHRD_CAN;
	dev->mtu = CAN_MTU;
	dev->min_mtu = CAN_MTU;
	dev->max_mtu = CAN_MTU;
	dev->hard_header_len = 0;
	dev->addr_len = 0;
	dev->tx_queue_len = 10;
@@ -309,6 +344,21 @@ void free_candev(struct net_device *dev)
}
EXPORT_SYMBOL_GPL(free_candev);

void can_set_default_mtu(struct net_device *dev)
{
	struct can_priv *priv = netdev_priv(dev);

	if (priv->ctrlmode & CAN_CTRLMODE_FD) {
		dev->mtu = CANFD_MTU;
		dev->min_mtu = CANFD_MTU;
		dev->max_mtu = CANFD_MTU;
	} else {
		dev->mtu = CAN_MTU;
		dev->min_mtu = CAN_MTU;
		dev->max_mtu = CAN_MTU;
	}
}

/* changing MTU and control mode for CAN/CANFD devices */
int can_change_mtu(struct net_device *dev, int new_mtu)
{
@@ -347,6 +397,26 @@ int can_change_mtu(struct net_device *dev, int new_mtu)
}
EXPORT_SYMBOL_GPL(can_change_mtu);

/* helper to define static CAN controller features at device creation time */
int can_set_static_ctrlmode(struct net_device *dev, u32 static_mode)
{
	struct can_priv *priv = netdev_priv(dev);

	/* alloc_candev() succeeded => netdev_priv() is valid at this point */
	if (priv->ctrlmode_supported & static_mode) {
		netdev_warn(dev,
			    "Controller features can not be supported and static at the same time\n");
		return -EINVAL;
	}
	priv->ctrlmode = static_mode;

	/* override MTU which was set by default in can_setup()? */
	can_set_default_mtu(dev);

	return 0;
}
EXPORT_SYMBOL_GPL(can_set_static_ctrlmode);

/* generic implementation of netdev_ops::ndo_eth_ioctl for CAN devices
 * supporting hardware timestamps
 */
+373 −219

File changed.

Preview size limit exceeded, changes collapsed.

Loading