Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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

Marc Kleine-Budde says:

====================
pull-request: can-next 2022-06-25

this is a pull request of 22 patches for net-next/master.

The first 2 patches target the xilinx driver. Srinivas Neeli's patch
adds Transmitter Delay Compensation (TDC) support, a patch by me fixes
a typo.

The next patch is by me and fixes a typo in the m_can driver.

Another patch by me allows the configuration of fixed bit rates
without need for do_set_bittiming callback.

The following 7 patches are by Vincent Mailhol and refactor the
can-dev module and Kbuild, de-inline the can_dropped_invalid_skb()
function, which has grown over the time, and drop outgoing skbs if the
controller is in listen only mode.

Max Staudt's patch fixes a reference in the networking/can.rst
documentation.

Vincent Mailhol provides 2 patches with cleanups for the etas_es58x
driver.

Conor Dooley adds bindings for the mpfs-can to the PolarFire SoC dtsi.

Another patch by me allows the configuration of fixed data bit rates
without need for do_set_data_bittiming callback.

The last 5 patches are by Frank Jungclaus. They prepare the esd_usb
driver to add support for the the CAN-USB/3 device in a later series.
====================

Signed-off-by: David S. Miller <davem@davemloft.net>

+616 -436
+45
Documentation/devicetree/bindings/net/can/microchip,mpfs-can.yaml
··· 1 + # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/net/can/microchip,mpfs-can.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: 8 + Microchip PolarFire SoC (MPFS) can controller 9 + 10 + maintainers: 11 + - Conor Dooley <conor.dooley@microchip.com> 12 + 13 + allOf: 14 + - $ref: can-controller.yaml# 15 + 16 + properties: 17 + compatible: 18 + const: microchip,mpfs-can 19 + 20 + reg: 21 + maxItems: 1 22 + 23 + interrupts: 24 + maxItems: 1 25 + 26 + clocks: 27 + maxItems: 1 28 + 29 + required: 30 + - compatible 31 + - reg 32 + - interrupts 33 + - clocks 34 + 35 + additionalProperties: false 36 + 37 + examples: 38 + - | 39 + can@2010c000 { 40 + compatible = "microchip,mpfs-can"; 41 + reg = <0x2010c000 0x1000>; 42 + clocks = <&clkcfg 17>; 43 + interrupt-parent = <&plic>; 44 + interrupts = <56>; 45 + };
+1 -1
Documentation/networking/can.rst
··· 168 168 data has to be performed right after a successful transmission. If 169 169 the CAN network interface is not capable of performing the loopback for 170 170 some reason the SocketCAN core can do this task as a fallback solution. 171 - See :ref:`socketcan-local-loopback1` for details (recommended). 171 + See :ref:`socketcan-local-loopback2` for details (recommended). 172 172 173 173 The loopback functionality is enabled by default to reflect standard 174 174 networking behaviour for CAN applications. Due to some requests from
+7
MAINTAINERS
··· 7420 7420 F: include/linux/errseq.h 7421 7421 F: lib/errseq.c 7422 7422 7423 + ESD CAN/USB DRIVERS 7424 + M: Frank Jungclaus <frank.jungclaus@esd.eu> 7425 + R: socketcan@esd.eu 7426 + L: linux-can@vger.kernel.org 7427 + S: Maintained 7428 + F: drivers/net/can/usb/esd_usb.c 7429 + 7423 7430 ET131X NETWORK DRIVER 7424 7431 M: Mark Einon <mark.einon@gmail.com> 7425 7432 S: Odd Fixes
+18
arch/riscv/boot/dts/microchip/mpfs.dtsi
··· 339 339 status = "disabled"; 340 340 }; 341 341 342 + can0: can@2010c000 { 343 + compatible = "microchip,mpfs-can"; 344 + reg = <0x0 0x2010c000 0x0 0x1000>; 345 + clocks = <&clkcfg CLK_CAN0>; 346 + interrupt-parent = <&plic>; 347 + interrupts = <56>; 348 + status = "disabled"; 349 + }; 350 + 351 + can1: can@2010d000 { 352 + compatible = "microchip,mpfs-can"; 353 + reg = <0x0 0x2010d000 0x0 0x1000>; 354 + clocks = <&clkcfg CLK_CAN1>; 355 + interrupt-parent = <&plic>; 356 + interrupts = <57>; 357 + status = "disabled"; 358 + }; 359 + 342 360 mac0: ethernet@20110000 { 343 361 compatible = "cdns,macb"; 344 362 reg = <0x0 0x20110000 0x0 0x2000>;
+2
drivers/net/Kconfig
··· 499 499 500 500 source "drivers/net/phy/Kconfig" 501 501 502 + source "drivers/net/can/Kconfig" 503 + 502 504 source "drivers/net/mctp/Kconfig" 503 505 504 506 source "drivers/net/mdio/Kconfig"
+46 -9
drivers/net/can/Kconfig
··· 1 1 # SPDX-License-Identifier: GPL-2.0-only 2 - menu "CAN Device Drivers" 2 + 3 + menuconfig CAN_DEV 4 + tristate "CAN Device Drivers" 5 + default y 6 + depends on CAN 7 + help 8 + Controller Area Network (CAN) is serial communications protocol up to 9 + 1Mbit/s for its original release (now known as Classical CAN) and up 10 + to 8Mbit/s for the more recent CAN with Flexible Data-Rate 11 + (CAN-FD). The CAN bus was originally mainly for automotive, but is now 12 + widely used in marine (NMEA2000), industrial, and medical 13 + applications. More information on the CAN network protocol family 14 + PF_CAN is contained in <Documentation/networking/can.rst>. 15 + 16 + This section contains all the CAN(-FD) device drivers including the 17 + virtual ones. If you own such devices or plan to use the virtual CAN 18 + interfaces to develop applications, say Y here. 19 + 20 + To compile as a module, choose M here: the module will be called 21 + can-dev. 22 + 23 + if CAN_DEV 3 24 4 25 config CAN_VCAN 5 26 tristate "Virtual Local CAN Interface (vcan)" ··· 69 48 can be changed by the 'maxdev=xx' module option. This driver can 70 49 also be built as a module. If so, the module will be called slcan. 71 50 72 - config CAN_DEV 73 - tristate "Platform CAN drivers with Netlink support" 51 + config CAN_NETLINK 52 + bool "CAN device drivers with Netlink support" 74 53 default y 75 54 help 76 - Enables the common framework for platform CAN drivers with Netlink 77 - support. This is the standard library for CAN drivers. 78 - If unsure, say Y. 55 + Enables the common framework for CAN device drivers. This is the 56 + standard library and provides features for the Netlink interface such 57 + as bittiming validation, support of CAN error states, device restart 58 + and others. 79 59 80 - if CAN_DEV 60 + The additional features selected by this option will be added to the 61 + can-dev module. 62 + 63 + This is required by all platform and hardware CAN drivers. If you 64 + plan to use such devices or if unsure, say Y. 65 + 66 + if CAN_NETLINK 81 67 82 68 config CAN_CALC_BITTIMING 83 69 bool "CAN bit-timing calculation" ··· 97 69 source clock frequencies. Disabling saves some space, but then the 98 70 bit-timing parameters must be specified directly using the Netlink 99 71 arguments "tq", "prop_seg", "phase_seg1", "phase_seg2" and "sjw". 72 + 73 + The additional features selected by this option will be added to the 74 + can-dev module. 75 + 100 76 If unsure, say Y. 77 + 78 + config CAN_RX_OFFLOAD 79 + bool 101 80 102 81 config CAN_AT91 103 82 tristate "Atmel AT91 onchip CAN controller" ··· 117 82 tristate "Support for Freescale FLEXCAN based chips" 118 83 depends on OF || COLDFIRE || COMPILE_TEST 119 84 depends on HAS_IOMEM 85 + select CAN_RX_OFFLOAD 120 86 help 121 87 Say Y here if you want to support for Freescale FlexCAN. 122 88 ··· 167 131 config CAN_TI_HECC 168 132 depends on ARM 169 133 tristate "TI High End CAN Controller" 134 + select CAN_RX_OFFLOAD 170 135 help 171 136 Driver for TI HECC (High End CAN Controller) module found on many 172 137 TI devices. The device specifications are available from www.ti.com ··· 201 164 source "drivers/net/can/spi/Kconfig" 202 165 source "drivers/net/can/usb/Kconfig" 203 166 204 - endif 167 + endif #CAN_NETLINK 205 168 206 169 config CAN_DEBUG_DEVICES 207 170 bool "CAN devices debugging messages" ··· 211 174 a problem with CAN support and want to see more of what is going 212 175 on. 213 176 214 - endmenu 177 + endif #CAN_DEV
+10 -7
drivers/net/can/dev/Makefile
··· 1 1 # SPDX-License-Identifier: GPL-2.0 2 2 3 - obj-$(CONFIG_CAN_DEV) += can-dev.o 4 - can-dev-y += bittiming.o 5 - can-dev-y += dev.o 6 - can-dev-y += length.o 7 - can-dev-y += netlink.o 8 - can-dev-y += rx-offload.o 9 - can-dev-y += skb.o 3 + obj-$(CONFIG_CAN_DEV) += can-dev.o 4 + 5 + can-dev-y += skb.o 6 + 7 + can-dev-$(CONFIG_CAN_CALC_BITTIMING) += calc_bittiming.o 8 + can-dev-$(CONFIG_CAN_NETLINK) += bittiming.o 9 + can-dev-$(CONFIG_CAN_NETLINK) += dev.o 10 + can-dev-$(CONFIG_CAN_NETLINK) += length.o 11 + can-dev-$(CONFIG_CAN_NETLINK) += netlink.o 12 + can-dev-$(CONFIG_CAN_RX_OFFLOAD) += rx-offload.o
-197
drivers/net/can/dev/bittiming.c
··· 4 4 * Copyright (C) 2008-2009 Wolfgang Grandegger <wg@grandegger.com> 5 5 */ 6 6 7 - #include <linux/units.h> 8 7 #include <linux/can/dev.h> 9 - 10 - #ifdef CONFIG_CAN_CALC_BITTIMING 11 - #define CAN_CALC_MAX_ERROR 50 /* in one-tenth of a percent */ 12 - 13 - /* Bit-timing calculation derived from: 14 - * 15 - * Code based on LinCAN sources and H8S2638 project 16 - * Copyright 2004-2006 Pavel Pisa - DCE FELK CVUT cz 17 - * Copyright 2005 Stanislav Marek 18 - * email: pisa@cmp.felk.cvut.cz 19 - * 20 - * Calculates proper bit-timing parameters for a specified bit-rate 21 - * and sample-point, which can then be used to set the bit-timing 22 - * registers of the CAN controller. You can find more information 23 - * in the header file linux/can/netlink.h. 24 - */ 25 - static int 26 - can_update_sample_point(const struct can_bittiming_const *btc, 27 - const unsigned int sample_point_nominal, const unsigned int tseg, 28 - unsigned int *tseg1_ptr, unsigned int *tseg2_ptr, 29 - unsigned int *sample_point_error_ptr) 30 - { 31 - unsigned int sample_point_error, best_sample_point_error = UINT_MAX; 32 - unsigned int sample_point, best_sample_point = 0; 33 - unsigned int tseg1, tseg2; 34 - int i; 35 - 36 - for (i = 0; i <= 1; i++) { 37 - tseg2 = tseg + CAN_SYNC_SEG - 38 - (sample_point_nominal * (tseg + CAN_SYNC_SEG)) / 39 - 1000 - i; 40 - tseg2 = clamp(tseg2, btc->tseg2_min, btc->tseg2_max); 41 - tseg1 = tseg - tseg2; 42 - if (tseg1 > btc->tseg1_max) { 43 - tseg1 = btc->tseg1_max; 44 - tseg2 = tseg - tseg1; 45 - } 46 - 47 - sample_point = 1000 * (tseg + CAN_SYNC_SEG - tseg2) / 48 - (tseg + CAN_SYNC_SEG); 49 - sample_point_error = abs(sample_point_nominal - sample_point); 50 - 51 - if (sample_point <= sample_point_nominal && 52 - sample_point_error < best_sample_point_error) { 53 - best_sample_point = sample_point; 54 - best_sample_point_error = sample_point_error; 55 - *tseg1_ptr = tseg1; 56 - *tseg2_ptr = tseg2; 57 - } 58 - } 59 - 60 - if (sample_point_error_ptr) 61 - *sample_point_error_ptr = best_sample_point_error; 62 - 63 - return best_sample_point; 64 - } 65 - 66 - int can_calc_bittiming(const struct net_device *dev, struct can_bittiming *bt, 67 - const struct can_bittiming_const *btc) 68 - { 69 - struct can_priv *priv = netdev_priv(dev); 70 - unsigned int bitrate; /* current bitrate */ 71 - unsigned int bitrate_error; /* difference between current and nominal value */ 72 - unsigned int best_bitrate_error = UINT_MAX; 73 - unsigned int sample_point_error; /* difference between current and nominal value */ 74 - unsigned int best_sample_point_error = UINT_MAX; 75 - unsigned int sample_point_nominal; /* nominal sample point */ 76 - unsigned int best_tseg = 0; /* current best value for tseg */ 77 - unsigned int best_brp = 0; /* current best value for brp */ 78 - unsigned int brp, tsegall, tseg, tseg1 = 0, tseg2 = 0; 79 - u64 v64; 80 - 81 - /* Use CiA recommended sample points */ 82 - if (bt->sample_point) { 83 - sample_point_nominal = bt->sample_point; 84 - } else { 85 - if (bt->bitrate > 800 * KILO /* BPS */) 86 - sample_point_nominal = 750; 87 - else if (bt->bitrate > 500 * KILO /* BPS */) 88 - sample_point_nominal = 800; 89 - else 90 - sample_point_nominal = 875; 91 - } 92 - 93 - /* tseg even = round down, odd = round up */ 94 - for (tseg = (btc->tseg1_max + btc->tseg2_max) * 2 + 1; 95 - tseg >= (btc->tseg1_min + btc->tseg2_min) * 2; tseg--) { 96 - tsegall = CAN_SYNC_SEG + tseg / 2; 97 - 98 - /* Compute all possible tseg choices (tseg=tseg1+tseg2) */ 99 - brp = priv->clock.freq / (tsegall * bt->bitrate) + tseg % 2; 100 - 101 - /* choose brp step which is possible in system */ 102 - brp = (brp / btc->brp_inc) * btc->brp_inc; 103 - if (brp < btc->brp_min || brp > btc->brp_max) 104 - continue; 105 - 106 - bitrate = priv->clock.freq / (brp * tsegall); 107 - bitrate_error = abs(bt->bitrate - bitrate); 108 - 109 - /* tseg brp biterror */ 110 - if (bitrate_error > best_bitrate_error) 111 - continue; 112 - 113 - /* reset sample point error if we have a better bitrate */ 114 - if (bitrate_error < best_bitrate_error) 115 - best_sample_point_error = UINT_MAX; 116 - 117 - can_update_sample_point(btc, sample_point_nominal, tseg / 2, 118 - &tseg1, &tseg2, &sample_point_error); 119 - if (sample_point_error >= best_sample_point_error) 120 - continue; 121 - 122 - best_sample_point_error = sample_point_error; 123 - best_bitrate_error = bitrate_error; 124 - best_tseg = tseg / 2; 125 - best_brp = brp; 126 - 127 - if (bitrate_error == 0 && sample_point_error == 0) 128 - break; 129 - } 130 - 131 - if (best_bitrate_error) { 132 - /* Error in one-tenth of a percent */ 133 - v64 = (u64)best_bitrate_error * 1000; 134 - do_div(v64, bt->bitrate); 135 - bitrate_error = (u32)v64; 136 - if (bitrate_error > CAN_CALC_MAX_ERROR) { 137 - netdev_err(dev, 138 - "bitrate error %d.%d%% too high\n", 139 - bitrate_error / 10, bitrate_error % 10); 140 - return -EDOM; 141 - } 142 - netdev_warn(dev, "bitrate error %d.%d%%\n", 143 - bitrate_error / 10, bitrate_error % 10); 144 - } 145 - 146 - /* real sample point */ 147 - bt->sample_point = can_update_sample_point(btc, sample_point_nominal, 148 - best_tseg, &tseg1, &tseg2, 149 - NULL); 150 - 151 - v64 = (u64)best_brp * 1000 * 1000 * 1000; 152 - do_div(v64, priv->clock.freq); 153 - bt->tq = (u32)v64; 154 - bt->prop_seg = tseg1 / 2; 155 - bt->phase_seg1 = tseg1 - bt->prop_seg; 156 - bt->phase_seg2 = tseg2; 157 - 158 - /* check for sjw user settings */ 159 - if (!bt->sjw || !btc->sjw_max) { 160 - bt->sjw = 1; 161 - } else { 162 - /* bt->sjw is at least 1 -> sanitize upper bound to sjw_max */ 163 - if (bt->sjw > btc->sjw_max) 164 - bt->sjw = btc->sjw_max; 165 - /* bt->sjw must not be higher than tseg2 */ 166 - if (tseg2 < bt->sjw) 167 - bt->sjw = tseg2; 168 - } 169 - 170 - bt->brp = best_brp; 171 - 172 - /* real bitrate */ 173 - bt->bitrate = priv->clock.freq / 174 - (bt->brp * (CAN_SYNC_SEG + tseg1 + tseg2)); 175 - 176 - return 0; 177 - } 178 - 179 - void can_calc_tdco(struct can_tdc *tdc, const struct can_tdc_const *tdc_const, 180 - const struct can_bittiming *dbt, 181 - u32 *ctrlmode, u32 ctrlmode_supported) 182 - 183 - { 184 - if (!tdc_const || !(ctrlmode_supported & CAN_CTRLMODE_TDC_AUTO)) 185 - return; 186 - 187 - *ctrlmode &= ~CAN_CTRLMODE_TDC_MASK; 188 - 189 - /* As specified in ISO 11898-1 section 11.3.3 "Transmitter 190 - * delay compensation" (TDC) is only applicable if data BRP is 191 - * one or two. 192 - */ 193 - if (dbt->brp == 1 || dbt->brp == 2) { 194 - /* Sample point in clock periods */ 195 - u32 sample_point_in_tc = (CAN_SYNC_SEG + dbt->prop_seg + 196 - dbt->phase_seg1) * dbt->brp; 197 - 198 - if (sample_point_in_tc < tdc_const->tdco_min) 199 - return; 200 - tdc->tdco = min(sample_point_in_tc, tdc_const->tdco_max); 201 - *ctrlmode |= CAN_CTRLMODE_TDC_AUTO; 202 - } 203 - } 204 - #endif /* CONFIG_CAN_CALC_BITTIMING */ 205 8 206 9 /* Checks the validity of the specified bit-timing parameters prop_seg, 207 10 * phase_seg1, phase_seg2 and sjw and tries to determine the bitrate
+202
drivers/net/can/dev/calc_bittiming.c
··· 1 + // SPDX-License-Identifier: GPL-2.0-only 2 + /* Copyright (C) 2005 Marc Kleine-Budde, Pengutronix 3 + * Copyright (C) 2006 Andrey Volkov, Varma Electronics 4 + * Copyright (C) 2008-2009 Wolfgang Grandegger <wg@grandegger.com> 5 + */ 6 + 7 + #include <linux/units.h> 8 + #include <linux/can/dev.h> 9 + 10 + #define CAN_CALC_MAX_ERROR 50 /* in one-tenth of a percent */ 11 + 12 + /* Bit-timing calculation derived from: 13 + * 14 + * Code based on LinCAN sources and H8S2638 project 15 + * Copyright 2004-2006 Pavel Pisa - DCE FELK CVUT cz 16 + * Copyright 2005 Stanislav Marek 17 + * email: pisa@cmp.felk.cvut.cz 18 + * 19 + * Calculates proper bit-timing parameters for a specified bit-rate 20 + * and sample-point, which can then be used to set the bit-timing 21 + * registers of the CAN controller. You can find more information 22 + * in the header file linux/can/netlink.h. 23 + */ 24 + static int 25 + can_update_sample_point(const struct can_bittiming_const *btc, 26 + const unsigned int sample_point_nominal, const unsigned int tseg, 27 + unsigned int *tseg1_ptr, unsigned int *tseg2_ptr, 28 + unsigned int *sample_point_error_ptr) 29 + { 30 + unsigned int sample_point_error, best_sample_point_error = UINT_MAX; 31 + unsigned int sample_point, best_sample_point = 0; 32 + unsigned int tseg1, tseg2; 33 + int i; 34 + 35 + for (i = 0; i <= 1; i++) { 36 + tseg2 = tseg + CAN_SYNC_SEG - 37 + (sample_point_nominal * (tseg + CAN_SYNC_SEG)) / 38 + 1000 - i; 39 + tseg2 = clamp(tseg2, btc->tseg2_min, btc->tseg2_max); 40 + tseg1 = tseg - tseg2; 41 + if (tseg1 > btc->tseg1_max) { 42 + tseg1 = btc->tseg1_max; 43 + tseg2 = tseg - tseg1; 44 + } 45 + 46 + sample_point = 1000 * (tseg + CAN_SYNC_SEG - tseg2) / 47 + (tseg + CAN_SYNC_SEG); 48 + sample_point_error = abs(sample_point_nominal - sample_point); 49 + 50 + if (sample_point <= sample_point_nominal && 51 + sample_point_error < best_sample_point_error) { 52 + best_sample_point = sample_point; 53 + best_sample_point_error = sample_point_error; 54 + *tseg1_ptr = tseg1; 55 + *tseg2_ptr = tseg2; 56 + } 57 + } 58 + 59 + if (sample_point_error_ptr) 60 + *sample_point_error_ptr = best_sample_point_error; 61 + 62 + return best_sample_point; 63 + } 64 + 65 + int can_calc_bittiming(const struct net_device *dev, struct can_bittiming *bt, 66 + const struct can_bittiming_const *btc) 67 + { 68 + struct can_priv *priv = netdev_priv(dev); 69 + unsigned int bitrate; /* current bitrate */ 70 + unsigned int bitrate_error; /* difference between current and nominal value */ 71 + unsigned int best_bitrate_error = UINT_MAX; 72 + unsigned int sample_point_error; /* difference between current and nominal value */ 73 + unsigned int best_sample_point_error = UINT_MAX; 74 + unsigned int sample_point_nominal; /* nominal sample point */ 75 + unsigned int best_tseg = 0; /* current best value for tseg */ 76 + unsigned int best_brp = 0; /* current best value for brp */ 77 + unsigned int brp, tsegall, tseg, tseg1 = 0, tseg2 = 0; 78 + u64 v64; 79 + 80 + /* Use CiA recommended sample points */ 81 + if (bt->sample_point) { 82 + sample_point_nominal = bt->sample_point; 83 + } else { 84 + if (bt->bitrate > 800 * KILO /* BPS */) 85 + sample_point_nominal = 750; 86 + else if (bt->bitrate > 500 * KILO /* BPS */) 87 + sample_point_nominal = 800; 88 + else 89 + sample_point_nominal = 875; 90 + } 91 + 92 + /* tseg even = round down, odd = round up */ 93 + for (tseg = (btc->tseg1_max + btc->tseg2_max) * 2 + 1; 94 + tseg >= (btc->tseg1_min + btc->tseg2_min) * 2; tseg--) { 95 + tsegall = CAN_SYNC_SEG + tseg / 2; 96 + 97 + /* Compute all possible tseg choices (tseg=tseg1+tseg2) */ 98 + brp = priv->clock.freq / (tsegall * bt->bitrate) + tseg % 2; 99 + 100 + /* choose brp step which is possible in system */ 101 + brp = (brp / btc->brp_inc) * btc->brp_inc; 102 + if (brp < btc->brp_min || brp > btc->brp_max) 103 + continue; 104 + 105 + bitrate = priv->clock.freq / (brp * tsegall); 106 + bitrate_error = abs(bt->bitrate - bitrate); 107 + 108 + /* tseg brp biterror */ 109 + if (bitrate_error > best_bitrate_error) 110 + continue; 111 + 112 + /* reset sample point error if we have a better bitrate */ 113 + if (bitrate_error < best_bitrate_error) 114 + best_sample_point_error = UINT_MAX; 115 + 116 + can_update_sample_point(btc, sample_point_nominal, tseg / 2, 117 + &tseg1, &tseg2, &sample_point_error); 118 + if (sample_point_error >= best_sample_point_error) 119 + continue; 120 + 121 + best_sample_point_error = sample_point_error; 122 + best_bitrate_error = bitrate_error; 123 + best_tseg = tseg / 2; 124 + best_brp = brp; 125 + 126 + if (bitrate_error == 0 && sample_point_error == 0) 127 + break; 128 + } 129 + 130 + if (best_bitrate_error) { 131 + /* Error in one-tenth of a percent */ 132 + v64 = (u64)best_bitrate_error * 1000; 133 + do_div(v64, bt->bitrate); 134 + bitrate_error = (u32)v64; 135 + if (bitrate_error > CAN_CALC_MAX_ERROR) { 136 + netdev_err(dev, 137 + "bitrate error %d.%d%% too high\n", 138 + bitrate_error / 10, bitrate_error % 10); 139 + return -EDOM; 140 + } 141 + netdev_warn(dev, "bitrate error %d.%d%%\n", 142 + bitrate_error / 10, bitrate_error % 10); 143 + } 144 + 145 + /* real sample point */ 146 + bt->sample_point = can_update_sample_point(btc, sample_point_nominal, 147 + best_tseg, &tseg1, &tseg2, 148 + NULL); 149 + 150 + v64 = (u64)best_brp * 1000 * 1000 * 1000; 151 + do_div(v64, priv->clock.freq); 152 + bt->tq = (u32)v64; 153 + bt->prop_seg = tseg1 / 2; 154 + bt->phase_seg1 = tseg1 - bt->prop_seg; 155 + bt->phase_seg2 = tseg2; 156 + 157 + /* check for sjw user settings */ 158 + if (!bt->sjw || !btc->sjw_max) { 159 + bt->sjw = 1; 160 + } else { 161 + /* bt->sjw is at least 1 -> sanitize upper bound to sjw_max */ 162 + if (bt->sjw > btc->sjw_max) 163 + bt->sjw = btc->sjw_max; 164 + /* bt->sjw must not be higher than tseg2 */ 165 + if (tseg2 < bt->sjw) 166 + bt->sjw = tseg2; 167 + } 168 + 169 + bt->brp = best_brp; 170 + 171 + /* real bitrate */ 172 + bt->bitrate = priv->clock.freq / 173 + (bt->brp * (CAN_SYNC_SEG + tseg1 + tseg2)); 174 + 175 + return 0; 176 + } 177 + 178 + void can_calc_tdco(struct can_tdc *tdc, const struct can_tdc_const *tdc_const, 179 + const struct can_bittiming *dbt, 180 + u32 *ctrlmode, u32 ctrlmode_supported) 181 + 182 + { 183 + if (!tdc_const || !(ctrlmode_supported & CAN_CTRLMODE_TDC_AUTO)) 184 + return; 185 + 186 + *ctrlmode &= ~CAN_CTRLMODE_TDC_MASK; 187 + 188 + /* As specified in ISO 11898-1 section 11.3.3 "Transmitter 189 + * delay compensation" (TDC) is only applicable if data BRP is 190 + * one or two. 191 + */ 192 + if (dbt->brp == 1 || dbt->brp == 2) { 193 + /* Sample point in clock periods */ 194 + u32 sample_point_in_tc = (CAN_SYNC_SEG + dbt->prop_seg + 195 + dbt->phase_seg1) * dbt->brp; 196 + 197 + if (sample_point_in_tc < tdc_const->tdco_min) 198 + return; 199 + tdc->tdco = min(sample_point_in_tc, tdc_const->tdco_max); 200 + *ctrlmode |= CAN_CTRLMODE_TDC_AUTO; 201 + } 202 + }
+1 -8
drivers/net/can/dev/dev.c
··· 4 4 * Copyright (C) 2008-2009 Wolfgang Grandegger <wg@grandegger.com> 5 5 */ 6 6 7 - #include <linux/module.h> 8 7 #include <linux/kernel.h> 9 8 #include <linux/slab.h> 10 9 #include <linux/netdevice.h> ··· 15 16 #include <linux/can/skb.h> 16 17 #include <linux/gpio/consumer.h> 17 18 #include <linux/of.h> 18 - 19 - #define MOD_DESC "CAN device driver interface" 20 - 21 - MODULE_DESCRIPTION(MOD_DESC); 22 - MODULE_LICENSE("GPL v2"); 23 - MODULE_AUTHOR("Wolfgang Grandegger <wg@grandegger.com>"); 24 19 25 20 static void can_update_state_error_stats(struct net_device *dev, 26 21 enum can_state new_state) ··· 506 513 507 514 err = can_netlink_register(); 508 515 if (!err) 509 - pr_info(MOD_DESC "\n"); 516 + pr_info("CAN device driver interface\n"); 510 517 511 518 return err; 512 519 }
+4 -2
drivers/net/can/dev/netlink.c
··· 176 176 * directly via do_set_bitrate(). Bail out if neither 177 177 * is given. 178 178 */ 179 - if (!priv->bittiming_const && !priv->do_set_bittiming) 179 + if (!priv->bittiming_const && !priv->do_set_bittiming && 180 + !priv->bitrate_const) 180 181 return -EOPNOTSUPP; 181 182 182 183 memcpy(&bt, nla_data(data[IFLA_CAN_BITTIMING]), sizeof(bt)); ··· 279 278 * directly via do_set_bitrate(). Bail out if neither 280 279 * is given. 281 280 */ 282 - if (!priv->data_bittiming_const && !priv->do_set_data_bittiming) 281 + if (!priv->data_bittiming_const && !priv->do_set_data_bittiming && 282 + !priv->data_bitrate_const) 283 283 return -EOPNOTSUPP; 284 284 285 285 memcpy(&dbt, nla_data(data[IFLA_CAN_DATA_BITTIMING]),
+72
drivers/net/can/dev/skb.c
··· 5 5 */ 6 6 7 7 #include <linux/can/dev.h> 8 + #include <linux/can/netlink.h> 9 + #include <linux/module.h> 10 + 11 + #define MOD_DESC "CAN device driver interface" 12 + 13 + MODULE_DESCRIPTION(MOD_DESC); 14 + MODULE_LICENSE("GPL v2"); 15 + MODULE_AUTHOR("Wolfgang Grandegger <wg@grandegger.com>"); 8 16 9 17 /* Local echo of CAN messages 10 18 * ··· 260 252 return skb; 261 253 } 262 254 EXPORT_SYMBOL_GPL(alloc_can_err_skb); 255 + 256 + /* Check for outgoing skbs that have not been created by the CAN subsystem */ 257 + static bool can_skb_headroom_valid(struct net_device *dev, struct sk_buff *skb) 258 + { 259 + /* af_packet creates a headroom of HH_DATA_MOD bytes which is fine */ 260 + if (WARN_ON_ONCE(skb_headroom(skb) < sizeof(struct can_skb_priv))) 261 + return false; 262 + 263 + /* af_packet does not apply CAN skb specific settings */ 264 + if (skb->ip_summed == CHECKSUM_NONE) { 265 + /* init headroom */ 266 + can_skb_prv(skb)->ifindex = dev->ifindex; 267 + can_skb_prv(skb)->skbcnt = 0; 268 + 269 + skb->ip_summed = CHECKSUM_UNNECESSARY; 270 + 271 + /* perform proper loopback on capable devices */ 272 + if (dev->flags & IFF_ECHO) 273 + skb->pkt_type = PACKET_LOOPBACK; 274 + else 275 + skb->pkt_type = PACKET_HOST; 276 + 277 + skb_reset_mac_header(skb); 278 + skb_reset_network_header(skb); 279 + skb_reset_transport_header(skb); 280 + } 281 + 282 + return true; 283 + } 284 + 285 + /* Drop a given socketbuffer if it does not contain a valid CAN frame. */ 286 + bool can_dropped_invalid_skb(struct net_device *dev, struct sk_buff *skb) 287 + { 288 + const struct canfd_frame *cfd = (struct canfd_frame *)skb->data; 289 + struct can_priv *priv = netdev_priv(dev); 290 + 291 + if (skb->protocol == htons(ETH_P_CAN)) { 292 + if (unlikely(skb->len != CAN_MTU || 293 + cfd->len > CAN_MAX_DLEN)) 294 + goto inval_skb; 295 + } else if (skb->protocol == htons(ETH_P_CANFD)) { 296 + if (unlikely(skb->len != CANFD_MTU || 297 + cfd->len > CANFD_MAX_DLEN)) 298 + goto inval_skb; 299 + } else { 300 + goto inval_skb; 301 + } 302 + 303 + if (!can_skb_headroom_valid(dev, skb)) { 304 + goto inval_skb; 305 + } else if (priv->ctrlmode & CAN_CTRLMODE_LISTENONLY) { 306 + netdev_info_once(dev, 307 + "interface in listen only mode, dropping skb\n"); 308 + goto inval_skb; 309 + } 310 + 311 + return false; 312 + 313 + inval_skb: 314 + kfree_skb(skb); 315 + dev->stats.tx_dropped++; 316 + return true; 317 + } 318 + EXPORT_SYMBOL_GPL(can_dropped_invalid_skb);
+1
drivers/net/can/m_can/Kconfig
··· 1 1 # SPDX-License-Identifier: GPL-2.0-only 2 2 menuconfig CAN_M_CAN 3 3 tristate "Bosch M_CAN support" 4 + select CAN_RX_OFFLOAD 4 5 help 5 6 Say Y here if you want support for Bosch M_CAN controller framework. 6 7 This is common support for devices that embed the Bosch M_CAN IP.
+2 -2
drivers/net/can/m_can/m_can.c
··· 1348 1348 /* set bittiming params */ 1349 1349 m_can_set_bittiming(dev); 1350 1350 1351 - /* enable internal timestamp generation, with a prescalar of 16. The 1352 - * prescalar is applied to the nominal bit timing 1351 + /* enable internal timestamp generation, with a prescaler of 16. The 1352 + * prescaler is applied to the nominal bit timing 1353 1353 */ 1354 1354 m_can_write(cdev, M_CAN_TSCC, FIELD_PREP(TSCC_TCP_MASK, 0xf)); 1355 1355
+1
drivers/net/can/spi/mcp251xfd/Kconfig
··· 2 2 3 3 config CAN_MCP251XFD 4 4 tristate "Microchip MCP251xFD SPI CAN controllers" 5 + select CAN_RX_OFFLOAD 5 6 select REGMAP 6 7 select WANT_DEV_COREDUMP 7 8 help
+11 -4
drivers/net/can/usb/Kconfig
··· 14 14 This driver is for the one channel CPC-USB/ARM7 CAN/USB interface 15 15 from EMS Dr. Thomas Wuensche (http://www.ems-wuensche.de). 16 16 17 - config CAN_ESD_USB2 18 - tristate "ESD USB/2 CAN/USB interface" 17 + config CAN_ESD_USB 18 + tristate "esd electronics gmbh CAN/USB interfaces" 19 19 help 20 - This driver supports the CAN-USB/2 interface 21 - from esd electronic system design gmbh (http://www.esd.eu). 20 + This driver adds supports for several CAN/USB interfaces 21 + from esd electronics gmbh (https://www.esd.eu). 22 + 23 + The drivers supports the following devices: 24 + - esd CAN-USB/2 25 + - esd CAN-USB/Micro 26 + 27 + To compile this driver as a module, choose M here: the module 28 + will be called esd_usb. 22 29 23 30 config CAN_ETAS_ES58X 24 31 tristate "ETAS ES58X CAN/USB interfaces"
+1 -1
drivers/net/can/usb/Makefile
··· 5 5 6 6 obj-$(CONFIG_CAN_8DEV_USB) += usb_8dev.o 7 7 obj-$(CONFIG_CAN_EMS_USB) += ems_usb.o 8 - obj-$(CONFIG_CAN_ESD_USB2) += esd_usb2.o 8 + obj-$(CONFIG_CAN_ESD_USB) += esd_usb.o 9 9 obj-$(CONFIG_CAN_ETAS_ES58X) += etas_es58x/ 10 10 obj-$(CONFIG_CAN_GS_USB) += gs_usb.o 11 11 obj-$(CONFIG_CAN_KVASER_USB) += kvaser_usb/
+121 -129
drivers/net/can/usb/esd_usb2.c drivers/net/can/usb/esd_usb.c
··· 1 1 // SPDX-License-Identifier: GPL-2.0-only 2 2 /* 3 - * CAN driver for esd CAN-USB/2 and CAN-USB/Micro 3 + * CAN driver for esd electronics gmbh CAN-USB/2 and CAN-USB/Micro 4 4 * 5 - * Copyright (C) 2010-2012 Matthias Fuchs <matthias.fuchs@esd.eu>, esd gmbh 5 + * Copyright (C) 2010-2012 esd electronic system design gmbh, Matthias Fuchs <socketcan@esd.eu> 6 + * Copyright (C) 2022 esd electronics gmbh, Frank Jungclaus <frank.jungclaus@esd.eu> 6 7 */ 7 8 #include <linux/signal.h> 8 9 #include <linux/slab.h> ··· 15 14 #include <linux/can/dev.h> 16 15 #include <linux/can/error.h> 17 16 18 - MODULE_AUTHOR("Matthias Fuchs <matthias.fuchs@esd.eu>"); 19 - MODULE_DESCRIPTION("CAN driver for esd CAN-USB/2 and CAN-USB/Micro interfaces"); 17 + MODULE_AUTHOR("Matthias Fuchs <socketcan@esd.eu>"); 18 + MODULE_AUTHOR("Frank Jungclaus <frank.jungclaus@esd.eu>"); 19 + MODULE_DESCRIPTION("CAN driver for esd electronics gmbh CAN-USB/2 and CAN-USB/Micro interfaces"); 20 20 MODULE_LICENSE("GPL v2"); 21 21 22 - /* Define these values to match your devices */ 22 + /* USB vendor and product ID */ 23 23 #define USB_ESDGMBH_VENDOR_ID 0x0ab4 24 24 #define USB_CANUSB2_PRODUCT_ID 0x0010 25 25 #define USB_CANUSBM_PRODUCT_ID 0x0011 26 26 27 + /* CAN controller clock frequencies */ 27 28 #define ESD_USB2_CAN_CLOCK 60000000 28 29 #define ESD_USBM_CAN_CLOCK 36000000 29 - #define ESD_USB2_MAX_NETS 2 30 30 31 - /* USB2 commands */ 31 + /* Maximum number of CAN nets */ 32 + #define ESD_USB_MAX_NETS 2 33 + 34 + /* USB commands */ 32 35 #define CMD_VERSION 1 /* also used for VERSION_REPLY */ 33 36 #define CMD_CAN_RX 2 /* device to host only */ 34 37 #define CMD_CAN_TX 3 /* also used for TX_DONE */ ··· 48 43 #define ESD_EVENT 0x40000000 49 44 #define ESD_IDMASK 0x1fffffff 50 45 51 - /* esd CAN event ids used by this driver */ 52 - #define ESD_EV_CAN_ERROR_EXT 2 46 + /* esd CAN event ids */ 47 + #define ESD_EV_CAN_ERROR_EXT 2 /* CAN controller specific diagnostic data */ 53 48 54 49 /* baudrate message flags */ 55 - #define ESD_USB2_UBR 0x80000000 56 - #define ESD_USB2_LOM 0x40000000 57 - #define ESD_USB2_NO_BAUDRATE 0x7fffffff 50 + #define ESD_USB_UBR 0x80000000 51 + #define ESD_USB_LOM 0x40000000 52 + #define ESD_USB_NO_BAUDRATE 0x7fffffff 53 + 54 + /* bit timing CAN-USB/2 */ 58 55 #define ESD_USB2_TSEG1_MIN 1 59 56 #define ESD_USB2_TSEG1_MAX 16 60 57 #define ESD_USB2_TSEG1_SHIFT 16 ··· 75 68 #define ESD_ID_ENABLE 0x80 76 69 #define ESD_MAX_ID_SEGMENT 64 77 70 78 - /* SJA1000 ECC register (emulated by usb2 firmware) */ 71 + /* SJA1000 ECC register (emulated by usb firmware) */ 79 72 #define SJA1000_ECC_SEG 0x1F 80 73 #define SJA1000_ECC_DIR 0x20 81 74 #define SJA1000_ECC_ERR 0x06 ··· 165 158 }; 166 159 167 160 /* Main message type used between library and application */ 168 - struct __attribute__ ((packed)) esd_usb2_msg { 161 + struct __packed esd_usb_msg { 169 162 union { 170 163 struct header_msg hdr; 171 164 struct version_msg version; ··· 178 171 } msg; 179 172 }; 180 173 181 - static struct usb_device_id esd_usb2_table[] = { 174 + static struct usb_device_id esd_usb_table[] = { 182 175 {USB_DEVICE(USB_ESDGMBH_VENDOR_ID, USB_CANUSB2_PRODUCT_ID)}, 183 176 {USB_DEVICE(USB_ESDGMBH_VENDOR_ID, USB_CANUSBM_PRODUCT_ID)}, 184 177 {} 185 178 }; 186 - MODULE_DEVICE_TABLE(usb, esd_usb2_table); 179 + MODULE_DEVICE_TABLE(usb, esd_usb_table); 187 180 188 - struct esd_usb2_net_priv; 181 + struct esd_usb_net_priv; 189 182 190 183 struct esd_tx_urb_context { 191 - struct esd_usb2_net_priv *priv; 184 + struct esd_usb_net_priv *priv; 192 185 u32 echo_index; 193 186 }; 194 187 195 - struct esd_usb2 { 188 + struct esd_usb { 196 189 struct usb_device *udev; 197 - struct esd_usb2_net_priv *nets[ESD_USB2_MAX_NETS]; 190 + struct esd_usb_net_priv *nets[ESD_USB_MAX_NETS]; 198 191 199 192 struct usb_anchor rx_submitted; 200 193 ··· 205 198 dma_addr_t rxbuf_dma[MAX_RX_URBS]; 206 199 }; 207 200 208 - struct esd_usb2_net_priv { 201 + struct esd_usb_net_priv { 209 202 struct can_priv can; /* must be the first member */ 210 203 211 204 atomic_t active_tx_jobs; 212 205 struct usb_anchor tx_submitted; 213 206 struct esd_tx_urb_context tx_contexts[MAX_TX_URBS]; 214 207 215 - struct esd_usb2 *usb2; 208 + struct esd_usb *usb; 216 209 struct net_device *netdev; 217 210 int index; 218 211 u8 old_state; 219 212 struct can_berr_counter bec; 220 213 }; 221 214 222 - static void esd_usb2_rx_event(struct esd_usb2_net_priv *priv, 223 - struct esd_usb2_msg *msg) 215 + static void esd_usb_rx_event(struct esd_usb_net_priv *priv, 216 + struct esd_usb_msg *msg) 224 217 { 225 218 struct net_device_stats *stats = &priv->netdev->stats; 226 219 struct can_frame *cf; ··· 303 296 } 304 297 } 305 298 306 - static void esd_usb2_rx_can_msg(struct esd_usb2_net_priv *priv, 307 - struct esd_usb2_msg *msg) 299 + static void esd_usb_rx_can_msg(struct esd_usb_net_priv *priv, 300 + struct esd_usb_msg *msg) 308 301 { 309 302 struct net_device_stats *stats = &priv->netdev->stats; 310 303 struct can_frame *cf; ··· 318 311 id = le32_to_cpu(msg->msg.rx.id); 319 312 320 313 if (id & ESD_EVENT) { 321 - esd_usb2_rx_event(priv, msg); 314 + esd_usb_rx_event(priv, msg); 322 315 } else { 323 316 skb = alloc_can_skb(priv->netdev, &cf); 324 317 if (skb == NULL) { ··· 345 338 346 339 netif_rx(skb); 347 340 } 348 - 349 - return; 350 341 } 351 342 352 - static void esd_usb2_tx_done_msg(struct esd_usb2_net_priv *priv, 353 - struct esd_usb2_msg *msg) 343 + static void esd_usb_tx_done_msg(struct esd_usb_net_priv *priv, 344 + struct esd_usb_msg *msg) 354 345 { 355 346 struct net_device_stats *stats = &priv->netdev->stats; 356 347 struct net_device *netdev = priv->netdev; ··· 375 370 netif_wake_queue(netdev); 376 371 } 377 372 378 - static void esd_usb2_read_bulk_callback(struct urb *urb) 373 + static void esd_usb_read_bulk_callback(struct urb *urb) 379 374 { 380 - struct esd_usb2 *dev = urb->context; 375 + struct esd_usb *dev = urb->context; 381 376 int retval; 382 377 int pos = 0; 383 378 int i; ··· 399 394 } 400 395 401 396 while (pos < urb->actual_length) { 402 - struct esd_usb2_msg *msg; 397 + struct esd_usb_msg *msg; 403 398 404 - msg = (struct esd_usb2_msg *)(urb->transfer_buffer + pos); 399 + msg = (struct esd_usb_msg *)(urb->transfer_buffer + pos); 405 400 406 401 switch (msg->msg.hdr.cmd) { 407 402 case CMD_CAN_RX: ··· 410 405 break; 411 406 } 412 407 413 - esd_usb2_rx_can_msg(dev->nets[msg->msg.rx.net], msg); 408 + esd_usb_rx_can_msg(dev->nets[msg->msg.rx.net], msg); 414 409 break; 415 410 416 411 case CMD_CAN_TX: ··· 419 414 break; 420 415 } 421 416 422 - esd_usb2_tx_done_msg(dev->nets[msg->msg.txdone.net], 423 - msg); 417 + esd_usb_tx_done_msg(dev->nets[msg->msg.txdone.net], 418 + msg); 424 419 break; 425 420 } 426 421 ··· 435 430 resubmit_urb: 436 431 usb_fill_bulk_urb(urb, dev->udev, usb_rcvbulkpipe(dev->udev, 1), 437 432 urb->transfer_buffer, RX_BUFFER_SIZE, 438 - esd_usb2_read_bulk_callback, dev); 433 + esd_usb_read_bulk_callback, dev); 439 434 440 435 retval = usb_submit_urb(urb, GFP_ATOMIC); 441 436 if (retval == -ENODEV) { ··· 447 442 dev_err(dev->udev->dev.parent, 448 443 "failed resubmitting read bulk urb: %d\n", retval); 449 444 } 450 - 451 - return; 452 445 } 453 446 454 - /* 455 - * callback for bulk IN urb 456 - */ 457 - static void esd_usb2_write_bulk_callback(struct urb *urb) 447 + /* callback for bulk IN urb */ 448 + static void esd_usb_write_bulk_callback(struct urb *urb) 458 449 { 459 450 struct esd_tx_urb_context *context = urb->context; 460 - struct esd_usb2_net_priv *priv; 451 + struct esd_usb_net_priv *priv; 461 452 struct net_device *netdev; 462 - size_t size = sizeof(struct esd_usb2_msg); 453 + size_t size = sizeof(struct esd_usb_msg); 463 454 464 455 WARN_ON(!context); 465 456 ··· 479 478 struct device_attribute *attr, char *buf) 480 479 { 481 480 struct usb_interface *intf = to_usb_interface(d); 482 - struct esd_usb2 *dev = usb_get_intfdata(intf); 481 + struct esd_usb *dev = usb_get_intfdata(intf); 483 482 484 483 return sprintf(buf, "%d.%d.%d\n", 485 484 (dev->version >> 12) & 0xf, ··· 492 491 struct device_attribute *attr, char *buf) 493 492 { 494 493 struct usb_interface *intf = to_usb_interface(d); 495 - struct esd_usb2 *dev = usb_get_intfdata(intf); 494 + struct esd_usb *dev = usb_get_intfdata(intf); 496 495 497 496 return sprintf(buf, "%d.%d.%d\n", 498 497 (dev->version >> 28) & 0xf, ··· 505 504 struct device_attribute *attr, char *buf) 506 505 { 507 506 struct usb_interface *intf = to_usb_interface(d); 508 - struct esd_usb2 *dev = usb_get_intfdata(intf); 507 + struct esd_usb *dev = usb_get_intfdata(intf); 509 508 510 509 return sprintf(buf, "%d", dev->net_count); 511 510 } 512 511 static DEVICE_ATTR_RO(nets); 513 512 514 - static int esd_usb2_send_msg(struct esd_usb2 *dev, struct esd_usb2_msg *msg) 513 + static int esd_usb_send_msg(struct esd_usb *dev, struct esd_usb_msg *msg) 515 514 { 516 515 int actual_length; 517 516 ··· 523 522 1000); 524 523 } 525 524 526 - static int esd_usb2_wait_msg(struct esd_usb2 *dev, 527 - struct esd_usb2_msg *msg) 525 + static int esd_usb_wait_msg(struct esd_usb *dev, 526 + struct esd_usb_msg *msg) 528 527 { 529 528 int actual_length; 530 529 ··· 536 535 1000); 537 536 } 538 537 539 - static int esd_usb2_setup_rx_urbs(struct esd_usb2 *dev) 538 + static int esd_usb_setup_rx_urbs(struct esd_usb *dev) 540 539 { 541 540 int i, err = 0; 542 541 ··· 569 568 usb_fill_bulk_urb(urb, dev->udev, 570 569 usb_rcvbulkpipe(dev->udev, 1), 571 570 buf, RX_BUFFER_SIZE, 572 - esd_usb2_read_bulk_callback, dev); 571 + esd_usb_read_bulk_callback, dev); 573 572 urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; 574 573 usb_anchor_urb(urb, &dev->rx_submitted); 575 574 ··· 607 606 return 0; 608 607 } 609 608 610 - /* 611 - * Start interface 612 - */ 613 - static int esd_usb2_start(struct esd_usb2_net_priv *priv) 609 + /* Start interface */ 610 + static int esd_usb_start(struct esd_usb_net_priv *priv) 614 611 { 615 - struct esd_usb2 *dev = priv->usb2; 612 + struct esd_usb *dev = priv->usb; 616 613 struct net_device *netdev = priv->netdev; 617 - struct esd_usb2_msg *msg; 614 + struct esd_usb_msg *msg; 618 615 int err, i; 619 616 620 617 msg = kmalloc(sizeof(*msg), GFP_KERNEL); ··· 621 622 goto out; 622 623 } 623 624 624 - /* 625 - * Enable all IDs 625 + /* Enable all IDs 626 626 * The IDADD message takes up to 64 32 bit bitmasks (2048 bits). 627 627 * Each bit represents one 11 bit CAN identifier. A set bit 628 628 * enables reception of the corresponding CAN identifier. A cleared ··· 642 644 /* enable 29bit extended IDs */ 643 645 msg->msg.filter.mask[ESD_MAX_ID_SEGMENT] = cpu_to_le32(0x00000001); 644 646 645 - err = esd_usb2_send_msg(dev, msg); 647 + err = esd_usb_send_msg(dev, msg); 646 648 if (err) 647 649 goto out; 648 650 649 - err = esd_usb2_setup_rx_urbs(dev); 651 + err = esd_usb_setup_rx_urbs(dev); 650 652 if (err) 651 653 goto out; 652 654 ··· 662 664 return err; 663 665 } 664 666 665 - static void unlink_all_urbs(struct esd_usb2 *dev) 667 + static void unlink_all_urbs(struct esd_usb *dev) 666 668 { 667 - struct esd_usb2_net_priv *priv; 669 + struct esd_usb_net_priv *priv; 668 670 int i, j; 669 671 670 672 usb_kill_anchored_urbs(&dev->rx_submitted); ··· 685 687 } 686 688 } 687 689 688 - static int esd_usb2_open(struct net_device *netdev) 690 + static int esd_usb_open(struct net_device *netdev) 689 691 { 690 - struct esd_usb2_net_priv *priv = netdev_priv(netdev); 692 + struct esd_usb_net_priv *priv = netdev_priv(netdev); 691 693 int err; 692 694 693 695 /* common open */ ··· 696 698 return err; 697 699 698 700 /* finally start device */ 699 - err = esd_usb2_start(priv); 701 + err = esd_usb_start(priv); 700 702 if (err) { 701 703 netdev_warn(netdev, "couldn't start device: %d\n", err); 702 704 close_candev(netdev); ··· 708 710 return 0; 709 711 } 710 712 711 - static netdev_tx_t esd_usb2_start_xmit(struct sk_buff *skb, 713 + static netdev_tx_t esd_usb_start_xmit(struct sk_buff *skb, 712 714 struct net_device *netdev) 713 715 { 714 - struct esd_usb2_net_priv *priv = netdev_priv(netdev); 715 - struct esd_usb2 *dev = priv->usb2; 716 + struct esd_usb_net_priv *priv = netdev_priv(netdev); 717 + struct esd_usb *dev = priv->usb; 716 718 struct esd_tx_urb_context *context = NULL; 717 719 struct net_device_stats *stats = &netdev->stats; 718 720 struct can_frame *cf = (struct can_frame *)skb->data; 719 - struct esd_usb2_msg *msg; 721 + struct esd_usb_msg *msg; 720 722 struct urb *urb; 721 723 u8 *buf; 722 724 int i, err; 723 725 int ret = NETDEV_TX_OK; 724 - size_t size = sizeof(struct esd_usb2_msg); 726 + size_t size = sizeof(struct esd_usb_msg); 725 727 726 728 if (can_dropped_invalid_skb(netdev, skb)) 727 729 return NETDEV_TX_OK; ··· 743 745 goto nobufmem; 744 746 } 745 747 746 - msg = (struct esd_usb2_msg *)buf; 748 + msg = (struct esd_usb_msg *)buf; 747 749 748 750 msg->msg.hdr.len = 3; /* minimal length */ 749 751 msg->msg.hdr.cmd = CMD_CAN_TX; ··· 769 771 } 770 772 } 771 773 772 - /* 773 - * This may never happen. 774 - */ 774 + /* This may never happen */ 775 775 if (!context) { 776 776 netdev_warn(netdev, "couldn't find free context\n"); 777 777 ret = NETDEV_TX_BUSY; ··· 784 788 785 789 usb_fill_bulk_urb(urb, dev->udev, usb_sndbulkpipe(dev->udev, 2), buf, 786 790 msg->msg.hdr.len << 2, 787 - esd_usb2_write_bulk_callback, context); 791 + esd_usb_write_bulk_callback, context); 788 792 789 793 urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; 790 794 ··· 817 821 818 822 netif_trans_update(netdev); 819 823 820 - /* 821 - * Release our reference to this URB, the USB core will eventually free 824 + /* Release our reference to this URB, the USB core will eventually free 822 825 * it entirely. 823 826 */ 824 827 usb_free_urb(urb); ··· 834 839 return ret; 835 840 } 836 841 837 - static int esd_usb2_close(struct net_device *netdev) 842 + static int esd_usb_close(struct net_device *netdev) 838 843 { 839 - struct esd_usb2_net_priv *priv = netdev_priv(netdev); 840 - struct esd_usb2_msg *msg; 844 + struct esd_usb_net_priv *priv = netdev_priv(netdev); 845 + struct esd_usb_msg *msg; 841 846 int i; 842 847 843 848 msg = kmalloc(sizeof(*msg), GFP_KERNEL); 844 849 if (!msg) 845 850 return -ENOMEM; 846 851 847 - /* Disable all IDs (see esd_usb2_start()) */ 852 + /* Disable all IDs (see esd_usb_start()) */ 848 853 msg->msg.hdr.cmd = CMD_IDADD; 849 854 msg->msg.hdr.len = 2 + ESD_MAX_ID_SEGMENT; 850 855 msg->msg.filter.net = priv->index; 851 856 msg->msg.filter.option = ESD_ID_ENABLE; /* start with segment 0 */ 852 857 for (i = 0; i <= ESD_MAX_ID_SEGMENT; i++) 853 858 msg->msg.filter.mask[i] = 0; 854 - if (esd_usb2_send_msg(priv->usb2, msg) < 0) 859 + if (esd_usb_send_msg(priv->usb, msg) < 0) 855 860 netdev_err(netdev, "sending idadd message failed\n"); 856 861 857 862 /* set CAN controller to reset mode */ ··· 859 864 msg->msg.hdr.cmd = CMD_SETBAUD; 860 865 msg->msg.setbaud.net = priv->index; 861 866 msg->msg.setbaud.rsvd = 0; 862 - msg->msg.setbaud.baud = cpu_to_le32(ESD_USB2_NO_BAUDRATE); 863 - if (esd_usb2_send_msg(priv->usb2, msg) < 0) 867 + msg->msg.setbaud.baud = cpu_to_le32(ESD_USB_NO_BAUDRATE); 868 + if (esd_usb_send_msg(priv->usb, msg) < 0) 864 869 netdev_err(netdev, "sending setbaud message failed\n"); 865 870 866 871 priv->can.state = CAN_STATE_STOPPED; ··· 874 879 return 0; 875 880 } 876 881 877 - static const struct net_device_ops esd_usb2_netdev_ops = { 878 - .ndo_open = esd_usb2_open, 879 - .ndo_stop = esd_usb2_close, 880 - .ndo_start_xmit = esd_usb2_start_xmit, 882 + static const struct net_device_ops esd_usb_netdev_ops = { 883 + .ndo_open = esd_usb_open, 884 + .ndo_stop = esd_usb_close, 885 + .ndo_start_xmit = esd_usb_start_xmit, 881 886 .ndo_change_mtu = can_change_mtu, 882 887 }; 883 888 ··· 895 900 896 901 static int esd_usb2_set_bittiming(struct net_device *netdev) 897 902 { 898 - struct esd_usb2_net_priv *priv = netdev_priv(netdev); 903 + struct esd_usb_net_priv *priv = netdev_priv(netdev); 899 904 struct can_bittiming *bt = &priv->can.bittiming; 900 - struct esd_usb2_msg *msg; 905 + struct esd_usb_msg *msg; 901 906 int err; 902 907 u32 canbtr; 903 908 int sjw_shift; 904 909 905 - canbtr = ESD_USB2_UBR; 910 + canbtr = ESD_USB_UBR; 906 911 if (priv->can.ctrlmode & CAN_CTRLMODE_LISTENONLY) 907 - canbtr |= ESD_USB2_LOM; 912 + canbtr |= ESD_USB_LOM; 908 913 909 914 canbtr |= (bt->brp - 1) & (ESD_USB2_BRP_MAX - 1); 910 915 911 - if (le16_to_cpu(priv->usb2->udev->descriptor.idProduct) == 916 + if (le16_to_cpu(priv->usb->udev->descriptor.idProduct) == 912 917 USB_CANUSBM_PRODUCT_ID) 913 918 sjw_shift = ESD_USBM_SJW_SHIFT; 914 919 else ··· 936 941 937 942 netdev_info(netdev, "setting BTR=%#x\n", canbtr); 938 943 939 - err = esd_usb2_send_msg(priv->usb2, msg); 944 + err = esd_usb_send_msg(priv->usb, msg); 940 945 941 946 kfree(msg); 942 947 return err; 943 948 } 944 949 945 - static int esd_usb2_get_berr_counter(const struct net_device *netdev, 946 - struct can_berr_counter *bec) 950 + static int esd_usb_get_berr_counter(const struct net_device *netdev, 951 + struct can_berr_counter *bec) 947 952 { 948 - struct esd_usb2_net_priv *priv = netdev_priv(netdev); 953 + struct esd_usb_net_priv *priv = netdev_priv(netdev); 949 954 950 955 bec->txerr = priv->bec.txerr; 951 956 bec->rxerr = priv->bec.rxerr; ··· 953 958 return 0; 954 959 } 955 960 956 - static int esd_usb2_set_mode(struct net_device *netdev, enum can_mode mode) 961 + static int esd_usb_set_mode(struct net_device *netdev, enum can_mode mode) 957 962 { 958 963 switch (mode) { 959 964 case CAN_MODE_START: ··· 967 972 return 0; 968 973 } 969 974 970 - static int esd_usb2_probe_one_net(struct usb_interface *intf, int index) 975 + static int esd_usb_probe_one_net(struct usb_interface *intf, int index) 971 976 { 972 - struct esd_usb2 *dev = usb_get_intfdata(intf); 977 + struct esd_usb *dev = usb_get_intfdata(intf); 973 978 struct net_device *netdev; 974 - struct esd_usb2_net_priv *priv; 979 + struct esd_usb_net_priv *priv; 975 980 int err = 0; 976 981 int i; 977 982 ··· 990 995 for (i = 0; i < MAX_TX_URBS; i++) 991 996 priv->tx_contexts[i].echo_index = MAX_TX_URBS; 992 997 993 - priv->usb2 = dev; 998 + priv->usb = dev; 994 999 priv->netdev = netdev; 995 1000 priv->index = index; 996 1001 ··· 1008 1013 1009 1014 priv->can.bittiming_const = &esd_usb2_bittiming_const; 1010 1015 priv->can.do_set_bittiming = esd_usb2_set_bittiming; 1011 - priv->can.do_set_mode = esd_usb2_set_mode; 1012 - priv->can.do_get_berr_counter = esd_usb2_get_berr_counter; 1016 + priv->can.do_set_mode = esd_usb_set_mode; 1017 + priv->can.do_get_berr_counter = esd_usb_get_berr_counter; 1013 1018 1014 1019 netdev->flags |= IFF_ECHO; /* we support local echo */ 1015 1020 1016 - netdev->netdev_ops = &esd_usb2_netdev_ops; 1021 + netdev->netdev_ops = &esd_usb_netdev_ops; 1017 1022 1018 1023 SET_NETDEV_DEV(netdev, &intf->dev); 1019 1024 netdev->dev_id = index; ··· 1033 1038 return err; 1034 1039 } 1035 1040 1036 - /* 1037 - * probe function for new USB2 devices 1041 + /* probe function for new USB devices 1038 1042 * 1039 1043 * check version information and number of available 1040 1044 * CAN interfaces 1041 1045 */ 1042 - static int esd_usb2_probe(struct usb_interface *intf, 1046 + static int esd_usb_probe(struct usb_interface *intf, 1043 1047 const struct usb_device_id *id) 1044 1048 { 1045 - struct esd_usb2 *dev; 1046 - struct esd_usb2_msg *msg; 1049 + struct esd_usb *dev; 1050 + struct esd_usb_msg *msg; 1047 1051 int i, err; 1048 1052 1049 1053 dev = kzalloc(sizeof(*dev), GFP_KERNEL); ··· 1070 1076 msg->msg.version.flags = 0; 1071 1077 msg->msg.version.drv_version = 0; 1072 1078 1073 - err = esd_usb2_send_msg(dev, msg); 1079 + err = esd_usb_send_msg(dev, msg); 1074 1080 if (err < 0) { 1075 1081 dev_err(&intf->dev, "sending version message failed\n"); 1076 1082 goto free_msg; 1077 1083 } 1078 1084 1079 - err = esd_usb2_wait_msg(dev, msg); 1085 + err = esd_usb_wait_msg(dev, msg); 1080 1086 if (err < 0) { 1081 1087 dev_err(&intf->dev, "no version message answer\n"); 1082 1088 goto free_msg; ··· 1099 1105 1100 1106 /* do per device probing */ 1101 1107 for (i = 0; i < dev->net_count; i++) 1102 - esd_usb2_probe_one_net(intf, i); 1108 + esd_usb_probe_one_net(intf, i); 1103 1109 1104 1110 free_msg: 1105 1111 kfree(msg); ··· 1109 1115 return err; 1110 1116 } 1111 1117 1112 - /* 1113 - * called by the usb core when the device is removed from the system 1114 - */ 1115 - static void esd_usb2_disconnect(struct usb_interface *intf) 1118 + /* called by the usb core when the device is removed from the system */ 1119 + static void esd_usb_disconnect(struct usb_interface *intf) 1116 1120 { 1117 - struct esd_usb2 *dev = usb_get_intfdata(intf); 1121 + struct esd_usb *dev = usb_get_intfdata(intf); 1118 1122 struct net_device *netdev; 1119 1123 int i; 1120 1124 ··· 1136 1144 } 1137 1145 1138 1146 /* usb specific object needed to register this driver with the usb subsystem */ 1139 - static struct usb_driver esd_usb2_driver = { 1140 - .name = "esd_usb2", 1141 - .probe = esd_usb2_probe, 1142 - .disconnect = esd_usb2_disconnect, 1143 - .id_table = esd_usb2_table, 1147 + static struct usb_driver esd_usb_driver = { 1148 + .name = "esd_usb", 1149 + .probe = esd_usb_probe, 1150 + .disconnect = esd_usb_disconnect, 1151 + .id_table = esd_usb_table, 1144 1152 }; 1145 1153 1146 - module_usb_driver(esd_usb2_driver); 1154 + module_usb_driver(esd_usb_driver);
+2 -3
drivers/net/can/usb/etas_es58x/es58x_core.c
··· 1707 1707 { 1708 1708 const struct device *dev = es58x_dev->dev; 1709 1709 const struct es58x_parameters *param = es58x_dev->param; 1710 - size_t rx_buf_len = es58x_dev->rx_max_packet_size; 1710 + u16 rx_buf_len = usb_maxpacket(es58x_dev->udev, es58x_dev->rx_pipe); 1711 1711 struct urb *urb; 1712 1712 u8 *buf; 1713 1713 int i; ··· 1739 1739 dev_err(dev, "%s: Could not setup any rx URBs\n", __func__); 1740 1740 return ret; 1741 1741 } 1742 - dev_dbg(dev, "%s: Allocated %d rx URBs each of size %zu\n", 1742 + dev_dbg(dev, "%s: Allocated %d rx URBs each of size %u\n", 1743 1743 __func__, i, rx_buf_len); 1744 1744 1745 1745 return ret; ··· 2223 2223 ep_in->bEndpointAddress); 2224 2224 es58x_dev->tx_pipe = usb_sndbulkpipe(es58x_dev->udev, 2225 2225 ep_out->bEndpointAddress); 2226 - es58x_dev->rx_max_packet_size = le16_to_cpu(ep_in->wMaxPacketSize); 2227 2226 2228 2227 return es58x_dev; 2229 2228 }
+2 -4
drivers/net/can/usb/etas_es58x/es58x_core.h
··· 380 380 * @timestamps: a temporary buffer to store the time stamps before 381 381 * feeding them to es58x_can_get_echo_skb(). Can only be used 382 382 * in RX branches. 383 - * @rx_max_packet_size: Maximum length of bulk-in URB. 384 383 * @num_can_ch: Number of CAN channel (i.e. number of elements of @netdev). 385 384 * @opened_channel_cnt: number of channels opened. Free of race 386 385 * conditions because its two users (net_device_ops:ndo_open() ··· 400 401 const struct es58x_parameters *param; 401 402 const struct es58x_operators *ops; 402 403 403 - int rx_pipe; 404 - int tx_pipe; 404 + unsigned int rx_pipe; 405 + unsigned int tx_pipe; 405 406 406 407 struct usb_anchor rx_urbs; 407 408 struct usb_anchor tx_urbs_busy; ··· 413 414 414 415 u64 timestamps[ES58X_ECHO_BULK_MAX]; 415 416 416 - u16 rx_max_packet_size; 417 417 u8 num_can_ch; 418 418 u8 opened_channel_cnt; 419 419
+64 -8
drivers/net/can/xilinx_can.c
··· 1 1 // SPDX-License-Identifier: GPL-2.0-or-later 2 2 /* Xilinx CAN device driver 3 3 * 4 - * Copyright (C) 2012 - 2014 Xilinx, Inc. 4 + * Copyright (C) 2012 - 2022 Xilinx, Inc. 5 5 * Copyright (C) 2009 PetaLogix. All rights reserved. 6 6 * Copyright (C) 2017 - 2018 Sandvik Mining and Construction Oy 7 7 * ··· 9 9 * This driver is developed for Axi CAN IP and for Zynq CANPS Controller. 10 10 */ 11 11 12 + #include <linux/bitfield.h> 12 13 #include <linux/clk.h> 13 14 #include <linux/errno.h> 14 15 #include <linux/init.h> ··· 51 50 52 51 /* only on CAN FD cores */ 53 52 XCAN_F_BRPR_OFFSET = 0x088, /* Data Phase Baud Rate 54 - * Prescalar 53 + * Prescaler 55 54 */ 56 55 XCAN_F_BTR_OFFSET = 0x08C, /* Data Phase Bit Timing */ 57 56 XCAN_TRR_OFFSET = 0x0090, /* TX Buffer Ready Request */ ··· 87 86 #define XCAN_MSR_LBACK_MASK 0x00000002 /* Loop back mode select */ 88 87 #define XCAN_MSR_SLEEP_MASK 0x00000001 /* Sleep mode select */ 89 88 #define XCAN_BRPR_BRP_MASK 0x000000FF /* Baud rate prescaler */ 89 + #define XCAN_BRPR_TDCO_MASK GENMASK(12, 8) /* TDCO */ 90 + #define XCAN_2_BRPR_TDCO_MASK GENMASK(13, 8) /* TDCO for CANFD 2.0 */ 90 91 #define XCAN_BTR_SJW_MASK 0x00000180 /* Synchronous jump width */ 91 92 #define XCAN_BTR_TS2_MASK 0x00000070 /* Time segment 2 */ 92 93 #define XCAN_BTR_TS1_MASK 0x0000000F /* Time segment 1 */ ··· 102 99 #define XCAN_ESR_STER_MASK 0x00000004 /* Stuff error */ 103 100 #define XCAN_ESR_FMER_MASK 0x00000002 /* Form error */ 104 101 #define XCAN_ESR_CRCER_MASK 0x00000001 /* CRC error */ 102 + #define XCAN_SR_TDCV_MASK GENMASK(22, 16) /* TDCV Value */ 105 103 #define XCAN_SR_TXFLL_MASK 0x00000400 /* TX FIFO is full */ 106 104 #define XCAN_SR_ESTAT_MASK 0x00000180 /* Error status */ 107 105 #define XCAN_SR_ERRWRN_MASK 0x00000040 /* Error warning */ ··· 136 132 #define XCAN_DLCR_BRS_MASK 0x04000000 /* BRS Mask in DLC */ 137 133 138 134 /* CAN register bit shift - XCAN_<REG>_<BIT>_SHIFT */ 135 + #define XCAN_BRPR_TDC_ENABLE BIT(16) /* Transmitter Delay Compensation (TDC) Enable */ 139 136 #define XCAN_BTR_SJW_SHIFT 7 /* Synchronous jump width */ 140 137 #define XCAN_BTR_TS2_SHIFT 4 /* Time segment 2 */ 141 138 #define XCAN_BTR_SJW_SHIFT_CANFD 16 /* Synchronous jump width */ ··· 281 276 .brp_inc = 1, 282 277 }; 283 278 279 + /* Transmission Delay Compensation constants for CANFD 1.0 */ 280 + static const struct can_tdc_const xcan_tdc_const_canfd = { 281 + .tdcv_min = 0, 282 + .tdcv_max = 0, /* Manual mode not supported. */ 283 + .tdco_min = 0, 284 + .tdco_max = 32, 285 + .tdcf_min = 0, /* Filter window not supported */ 286 + .tdcf_max = 0, 287 + }; 288 + 289 + /* Transmission Delay Compensation constants for CANFD 2.0 */ 290 + static const struct can_tdc_const xcan_tdc_const_canfd2 = { 291 + .tdcv_min = 0, 292 + .tdcv_max = 0, /* Manual mode not supported. */ 293 + .tdco_min = 0, 294 + .tdco_max = 64, 295 + .tdcf_min = 0, /* Filter window not supported */ 296 + .tdcf_max = 0, 297 + }; 298 + 284 299 /** 285 300 * xcan_write_reg_le - Write a value to the device register little endian 286 301 * @priv: Driver private data structure ··· 430 405 return -EPERM; 431 406 } 432 407 433 - /* Setting Baud Rate prescalar value in BRPR Register */ 408 + /* Setting Baud Rate prescaler value in BRPR Register */ 434 409 btr0 = (bt->brp - 1); 435 410 436 411 /* Setting Time Segment 1 in BTR Register */ ··· 447 422 448 423 if (priv->devtype.cantype == XAXI_CANFD || 449 424 priv->devtype.cantype == XAXI_CANFD_2_0) { 450 - /* Setting Baud Rate prescalar value in F_BRPR Register */ 425 + /* Setting Baud Rate prescaler value in F_BRPR Register */ 451 426 btr0 = dbt->brp - 1; 427 + if (can_tdc_is_enabled(&priv->can)) { 428 + if (priv->devtype.cantype == XAXI_CANFD) 429 + btr0 |= FIELD_PREP(XCAN_BRPR_TDCO_MASK, priv->can.tdc.tdco) | 430 + XCAN_BRPR_TDC_ENABLE; 431 + else 432 + btr0 |= FIELD_PREP(XCAN_2_BRPR_TDCO_MASK, priv->can.tdc.tdco) | 433 + XCAN_BRPR_TDC_ENABLE; 434 + } 452 435 453 436 /* Setting Time Segment 1 in BTR Register */ 454 437 btr1 = dbt->prop_seg + dbt->phase_seg1 - 1; ··· 1516 1483 return 0; 1517 1484 } 1518 1485 1486 + /** 1487 + * xcan_get_auto_tdcv - Get Transmitter Delay Compensation Value 1488 + * @ndev: Pointer to net_device structure 1489 + * @tdcv: Pointer to TDCV value 1490 + * 1491 + * Return: 0 on success 1492 + */ 1493 + static int xcan_get_auto_tdcv(const struct net_device *ndev, u32 *tdcv) 1494 + { 1495 + struct xcan_priv *priv = netdev_priv(ndev); 1496 + 1497 + *tdcv = FIELD_GET(XCAN_SR_TDCV_MASK, priv->read_reg(priv, XCAN_SR_OFFSET)); 1498 + 1499 + return 0; 1500 + } 1501 + 1519 1502 static const struct net_device_ops xcan_netdev_ops = { 1520 1503 .ndo_open = xcan_open, 1521 1504 .ndo_stop = xcan_close, ··· 1784 1735 priv->can.ctrlmode_supported = CAN_CTRLMODE_LOOPBACK | 1785 1736 CAN_CTRLMODE_BERR_REPORTING; 1786 1737 1787 - if (devtype->cantype == XAXI_CANFD) 1738 + if (devtype->cantype == XAXI_CANFD) { 1788 1739 priv->can.data_bittiming_const = 1789 1740 &xcan_data_bittiming_const_canfd; 1741 + priv->can.tdc_const = &xcan_tdc_const_canfd; 1742 + } 1790 1743 1791 - if (devtype->cantype == XAXI_CANFD_2_0) 1744 + if (devtype->cantype == XAXI_CANFD_2_0) { 1792 1745 priv->can.data_bittiming_const = 1793 1746 &xcan_data_bittiming_const_canfd2; 1747 + priv->can.tdc_const = &xcan_tdc_const_canfd2; 1748 + } 1794 1749 1795 1750 if (devtype->cantype == XAXI_CANFD || 1796 - devtype->cantype == XAXI_CANFD_2_0) 1797 - priv->can.ctrlmode_supported |= CAN_CTRLMODE_FD; 1751 + devtype->cantype == XAXI_CANFD_2_0) { 1752 + priv->can.ctrlmode_supported |= CAN_CTRLMODE_FD | 1753 + CAN_CTRLMODE_TDC_AUTO; 1754 + priv->can.do_get_auto_tdcv = xcan_get_auto_tdcv; 1755 + } 1798 1756 1799 1757 priv->reg_base = addr; 1800 1758 priv->tx_max = tx_max;
+1 -58
include/linux/can/skb.h
··· 31 31 struct canfd_frame **cfd); 32 32 struct sk_buff *alloc_can_err_skb(struct net_device *dev, 33 33 struct can_frame **cf); 34 + bool can_dropped_invalid_skb(struct net_device *dev, struct sk_buff *skb); 34 35 35 36 /* 36 37 * The struct can_skb_priv is used to transport additional information along ··· 95 94 can_skb_set_owner(nskb, skb->sk); 96 95 consume_skb(skb); 97 96 return nskb; 98 - } 99 - 100 - /* Check for outgoing skbs that have not been created by the CAN subsystem */ 101 - static inline bool can_skb_headroom_valid(struct net_device *dev, 102 - struct sk_buff *skb) 103 - { 104 - /* af_packet creates a headroom of HH_DATA_MOD bytes which is fine */ 105 - if (WARN_ON_ONCE(skb_headroom(skb) < sizeof(struct can_skb_priv))) 106 - return false; 107 - 108 - /* af_packet does not apply CAN skb specific settings */ 109 - if (skb->ip_summed == CHECKSUM_NONE) { 110 - /* init headroom */ 111 - can_skb_prv(skb)->ifindex = dev->ifindex; 112 - can_skb_prv(skb)->skbcnt = 0; 113 - 114 - skb->ip_summed = CHECKSUM_UNNECESSARY; 115 - 116 - /* perform proper loopback on capable devices */ 117 - if (dev->flags & IFF_ECHO) 118 - skb->pkt_type = PACKET_LOOPBACK; 119 - else 120 - skb->pkt_type = PACKET_HOST; 121 - 122 - skb_reset_mac_header(skb); 123 - skb_reset_network_header(skb); 124 - skb_reset_transport_header(skb); 125 - } 126 - 127 - return true; 128 - } 129 - 130 - /* Drop a given socketbuffer if it does not contain a valid CAN frame. */ 131 - static inline bool can_dropped_invalid_skb(struct net_device *dev, 132 - struct sk_buff *skb) 133 - { 134 - const struct canfd_frame *cfd = (struct canfd_frame *)skb->data; 135 - 136 - if (skb->protocol == htons(ETH_P_CAN)) { 137 - if (unlikely(skb->len != CAN_MTU || 138 - cfd->len > CAN_MAX_DLEN)) 139 - goto inval_skb; 140 - } else if (skb->protocol == htons(ETH_P_CANFD)) { 141 - if (unlikely(skb->len != CANFD_MTU || 142 - cfd->len > CANFD_MAX_DLEN)) 143 - goto inval_skb; 144 - } else 145 - goto inval_skb; 146 - 147 - if (!can_skb_headroom_valid(dev, skb)) 148 - goto inval_skb; 149 - 150 - return false; 151 - 152 - inval_skb: 153 - kfree_skb(skb); 154 - dev->stats.tx_dropped++; 155 - return true; 156 97 } 157 98 158 99 static inline bool can_is_canfd_skb(const struct sk_buff *skb)
+2 -3
net/can/Kconfig
··· 15 15 PF_CAN is contained in <Documentation/networking/can.rst>. 16 16 17 17 If you want CAN support you should say Y here and also to the 18 - specific driver for your controller(s) below. 18 + specific driver for your controller(s) under the Network device 19 + support section. 19 20 20 21 if CAN 21 22 ··· 69 68 ISO 15765-2:2016 for 'classic' CAN and CAN FD frame types. 70 69 If you want to perform automotive vehicle diagnostic services (UDS), 71 70 say 'y'. 72 - 73 - source "drivers/net/can/Kconfig" 74 71 75 72 endif