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-6.1-20220915' of git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can-next

Marc Kleine-Budde says:

====================
Sept. 15, 2022, 8:19 a.m. UTC
Hello Jakub, hello David,

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

the first 2 patches are by me and fix a typo in the rx-offload helper
and the flexcan driver.

Christophe JAILLET's patch cleans up the error handling in
rcar_canfd driver's probe function.

Kenneth Lee's patch converts the kvaser_usb driver from kcalloc() to
kzalloc().

Biju Das contributes 2 patches to the sja1000 driver which update the
DT bindings and support for the RZ/N1 SJA1000 CAN controller.

Jinpeng Cui provides 2 patches that remove redundant variables from
the sja1000 and kvaser_pciefd driver.

2 patches by John Whittington and me add hardware timestamp support to
the gs_usb driver.

Gustavo A. R. Silva's patch converts the etas_es58x driver to make use
of DECLARE_FLEX_ARRAY().

Krzysztof Kozlowski's patch cleans up the sja1000 DT bindings.

Dario Binacchi fixes his invalid email in the flexcan driver
documentation.

Ziyang Xuan contributes 2 patches that clean up the CAN RAW protocol.

Yang Yingliang's patch switches the flexcan driver to dev_err_probe().

The last 7 patches are by Oliver Hartkopp and add support for the next
generation of the CAN protocol: CAN with eXtended data Length (CAN XL).
====================

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

+618 -221
+5 -1
Documentation/devicetree/bindings/net/can/nxp,sja1000.yaml
··· 30 30 clocks: 31 31 maxItems: 1 32 32 33 + power-domains: 34 + maxItems: 1 35 + 33 36 reg-io-width: 34 - $ref: /schemas/types.yaml#/definitions/uint32 35 37 description: I/O register width (in bytes) implemented by this device 36 38 default: 1 37 39 enum: [ 1, 2, 4 ] ··· 107 105 then: 108 106 required: 109 107 - clocks 108 + - power-domains 110 109 111 110 unevaluatedProperties: false 112 111 ··· 132 129 reg-io-width = <4>; 133 130 interrupts = <GIC_SPI 95 IRQ_TYPE_LEVEL_HIGH>; 134 131 clocks = <&sysctrl R9A06G032_HCLK_CAN0>; 132 + power-domains = <&sysctrl>; 135 133 };
+1 -1
Documentation/networking/device_drivers/can/freescale/flexcan.rst
··· 5 5 ============================= 6 6 7 7 Authors: Marc Kleine-Budde <mkl@pengutronix.de>, 8 - Dario Binacchi <dario.binacchi@amarula.solutions.com> 8 + Dario Binacchi <dario.binacchi@amarulasolutions.com> 9 9 10 10 On/off RTR frames reception 11 11 ===========================
-1
drivers/net/can/ctucanfd/ctucanfd_base.c
··· 657 657 cf->can_id = (idw >> 18) & CAN_SFF_MASK; 658 658 659 659 /* BRS, ESI, RTR Flags */ 660 - cf->flags = 0; 661 660 if (FIELD_GET(REG_FRAME_FORMAT_W_FDF, ffw)) { 662 661 if (FIELD_GET(REG_FRAME_FORMAT_W_BRS, ffw)) 663 662 cf->flags |= CANFD_BRS;
+2 -2
drivers/net/can/dev/rx-offload.c
··· 247 247 struct net_device *dev = offload->dev; 248 248 struct net_device_stats *stats = &dev->stats; 249 249 struct sk_buff *skb; 250 - u8 len; 250 + unsigned int len; 251 251 int err; 252 252 253 253 skb = __can_get_echo_skb(dev, idx, &len, frame_len_ptr); ··· 329 329 { 330 330 offload->dev = dev; 331 331 332 - /* Limit queue len to 4x the weight (rounted to next power of two) */ 332 + /* Limit queue len to 4x the weight (rounded to next power of two) */ 333 333 offload->skb_queue_len_max = 2 << fls(weight); 334 334 offload->skb_queue_len_max *= 4; 335 335 skb_queue_head_init(&offload->skb_queue);
+79 -34
drivers/net/can/dev/skb.c
··· 91 91 EXPORT_SYMBOL_GPL(can_put_echo_skb); 92 92 93 93 struct sk_buff * 94 - __can_get_echo_skb(struct net_device *dev, unsigned int idx, u8 *len_ptr, 95 - unsigned int *frame_len_ptr) 94 + __can_get_echo_skb(struct net_device *dev, unsigned int idx, 95 + unsigned int *len_ptr, unsigned int *frame_len_ptr) 96 96 { 97 97 struct can_priv *priv = netdev_priv(dev); 98 98 ··· 108 108 */ 109 109 struct sk_buff *skb = priv->echo_skb[idx]; 110 110 struct can_skb_priv *can_skb_priv = can_skb_prv(skb); 111 - struct canfd_frame *cf = (struct canfd_frame *)skb->data; 112 111 113 112 if (skb_shinfo(skb)->tx_flags & SKBTX_IN_PROGRESS) 114 113 skb_tstamp_tx(skb, skb_hwtstamps(skb)); 115 114 116 115 /* get the real payload length for netdev statistics */ 117 - if (cf->can_id & CAN_RTR_FLAG) 118 - *len_ptr = 0; 119 - else 120 - *len_ptr = cf->len; 116 + *len_ptr = can_skb_get_data_len(skb); 121 117 122 118 if (frame_len_ptr) 123 119 *frame_len_ptr = can_skb_priv->frame_len; ··· 143 147 unsigned int *frame_len_ptr) 144 148 { 145 149 struct sk_buff *skb; 146 - u8 len; 150 + unsigned int len; 147 151 148 152 skb = __can_get_echo_skb(dev, idx, &len, frame_len_ptr); 149 153 if (!skb) ··· 187 191 } 188 192 EXPORT_SYMBOL_GPL(can_free_echo_skb); 189 193 194 + /* fill common values for CAN sk_buffs */ 195 + static void init_can_skb_reserve(struct sk_buff *skb) 196 + { 197 + skb->pkt_type = PACKET_BROADCAST; 198 + skb->ip_summed = CHECKSUM_UNNECESSARY; 199 + 200 + skb_reset_mac_header(skb); 201 + skb_reset_network_header(skb); 202 + skb_reset_transport_header(skb); 203 + 204 + can_skb_reserve(skb); 205 + can_skb_prv(skb)->skbcnt = 0; 206 + } 207 + 190 208 struct sk_buff *alloc_can_skb(struct net_device *dev, struct can_frame **cf) 191 209 { 192 210 struct sk_buff *skb; ··· 214 204 } 215 205 216 206 skb->protocol = htons(ETH_P_CAN); 217 - skb->pkt_type = PACKET_BROADCAST; 218 - skb->ip_summed = CHECKSUM_UNNECESSARY; 219 - 220 - skb_reset_mac_header(skb); 221 - skb_reset_network_header(skb); 222 - skb_reset_transport_header(skb); 223 - 224 - can_skb_reserve(skb); 207 + init_can_skb_reserve(skb); 225 208 can_skb_prv(skb)->ifindex = dev->ifindex; 226 - can_skb_prv(skb)->skbcnt = 0; 227 209 228 210 *cf = skb_put_zero(skb, sizeof(struct can_frame)); 229 211 ··· 237 235 } 238 236 239 237 skb->protocol = htons(ETH_P_CANFD); 240 - skb->pkt_type = PACKET_BROADCAST; 241 - skb->ip_summed = CHECKSUM_UNNECESSARY; 242 - 243 - skb_reset_mac_header(skb); 244 - skb_reset_network_header(skb); 245 - skb_reset_transport_header(skb); 246 - 247 - can_skb_reserve(skb); 238 + init_can_skb_reserve(skb); 248 239 can_skb_prv(skb)->ifindex = dev->ifindex; 249 - can_skb_prv(skb)->skbcnt = 0; 250 240 251 241 *cfd = skb_put_zero(skb, sizeof(struct canfd_frame)); 242 + 243 + /* set CAN FD flag by default */ 244 + (*cfd)->flags = CANFD_FDF; 252 245 253 246 return skb; 254 247 } 255 248 EXPORT_SYMBOL_GPL(alloc_canfd_skb); 249 + 250 + struct sk_buff *alloc_canxl_skb(struct net_device *dev, 251 + struct canxl_frame **cxl, 252 + unsigned int data_len) 253 + { 254 + struct sk_buff *skb; 255 + 256 + if (data_len < CANXL_MIN_DLEN || data_len > CANXL_MAX_DLEN) 257 + goto out_error; 258 + 259 + skb = netdev_alloc_skb(dev, sizeof(struct can_skb_priv) + 260 + CANXL_HDR_SIZE + data_len); 261 + if (unlikely(!skb)) 262 + goto out_error; 263 + 264 + skb->protocol = htons(ETH_P_CANXL); 265 + init_can_skb_reserve(skb); 266 + can_skb_prv(skb)->ifindex = dev->ifindex; 267 + 268 + *cxl = skb_put_zero(skb, CANXL_HDR_SIZE + data_len); 269 + 270 + /* set CAN XL flag and length information by default */ 271 + (*cxl)->flags = CANXL_XLF; 272 + (*cxl)->len = data_len; 273 + 274 + return skb; 275 + 276 + out_error: 277 + *cxl = NULL; 278 + 279 + return NULL; 280 + } 281 + EXPORT_SYMBOL_GPL(alloc_canxl_skb); 256 282 257 283 struct sk_buff *alloc_can_err_skb(struct net_device *dev, struct can_frame **cf) 258 284 { ··· 321 291 skb_reset_mac_header(skb); 322 292 skb_reset_network_header(skb); 323 293 skb_reset_transport_header(skb); 294 + 295 + /* set CANFD_FDF flag for CAN FD frames */ 296 + if (can_is_canfd_skb(skb)) { 297 + struct canfd_frame *cfd; 298 + 299 + cfd = (struct canfd_frame *)skb->data; 300 + cfd->flags |= CANFD_FDF; 301 + } 324 302 } 325 303 326 304 return true; ··· 337 299 /* Drop a given socketbuffer if it does not contain a valid CAN frame. */ 338 300 bool can_dropped_invalid_skb(struct net_device *dev, struct sk_buff *skb) 339 301 { 340 - const struct canfd_frame *cfd = (struct canfd_frame *)skb->data; 341 302 struct can_priv *priv = netdev_priv(dev); 342 303 343 - if (skb->protocol == htons(ETH_P_CAN)) { 344 - if (unlikely(skb->len != CAN_MTU || 345 - cfd->len > CAN_MAX_DLEN)) 304 + switch (ntohs(skb->protocol)) { 305 + case ETH_P_CAN: 306 + if (!can_is_can_skb(skb)) 346 307 goto inval_skb; 347 - } else if (skb->protocol == htons(ETH_P_CANFD)) { 348 - if (unlikely(skb->len != CANFD_MTU || 349 - cfd->len > CANFD_MAX_DLEN)) 308 + break; 309 + 310 + case ETH_P_CANFD: 311 + if (!can_is_canfd_skb(skb)) 350 312 goto inval_skb; 351 - } else { 313 + break; 314 + 315 + case ETH_P_CANXL: 316 + if (!can_is_canxl_skb(skb)) 317 + goto inval_skb; 318 + break; 319 + 320 + default: 352 321 goto inval_skb; 353 322 } 354 323
+29 -30
drivers/net/can/flexcan/flexcan-core.c
··· 295 295 static const struct flexcan_devtype_data fsl_mcf5441x_devtype_data = { 296 296 .quirks = FLEXCAN_QUIRK_BROKEN_PERR_STATE | 297 297 FLEXCAN_QUIRK_NR_IRQ_3 | FLEXCAN_QUIRK_NR_MB_16 | 298 - FLEXCAN_QUIRK_SUPPPORT_RX_MAILBOX | 299 - FLEXCAN_QUIRK_SUPPPORT_RX_FIFO, 298 + FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX | 299 + FLEXCAN_QUIRK_SUPPORT_RX_FIFO, 300 300 }; 301 301 302 302 static const struct flexcan_devtype_data fsl_p1010_devtype_data = { 303 303 .quirks = FLEXCAN_QUIRK_BROKEN_WERR_STATE | 304 304 FLEXCAN_QUIRK_BROKEN_PERR_STATE | 305 305 FLEXCAN_QUIRK_DEFAULT_BIG_ENDIAN | 306 - FLEXCAN_QUIRK_SUPPPORT_RX_MAILBOX | 307 - FLEXCAN_QUIRK_SUPPPORT_RX_FIFO, 306 + FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX | 307 + FLEXCAN_QUIRK_SUPPORT_RX_FIFO, 308 308 }; 309 309 310 310 static const struct flexcan_devtype_data fsl_imx25_devtype_data = { 311 311 .quirks = FLEXCAN_QUIRK_BROKEN_WERR_STATE | 312 312 FLEXCAN_QUIRK_BROKEN_PERR_STATE | 313 - FLEXCAN_QUIRK_SUPPPORT_RX_MAILBOX | 314 - FLEXCAN_QUIRK_SUPPPORT_RX_FIFO, 313 + FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX | 314 + FLEXCAN_QUIRK_SUPPORT_RX_FIFO, 315 315 }; 316 316 317 317 static const struct flexcan_devtype_data fsl_imx28_devtype_data = { 318 318 .quirks = FLEXCAN_QUIRK_BROKEN_PERR_STATE | 319 - FLEXCAN_QUIRK_SUPPPORT_RX_MAILBOX | 320 - FLEXCAN_QUIRK_SUPPPORT_RX_FIFO, 319 + FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX | 320 + FLEXCAN_QUIRK_SUPPORT_RX_FIFO, 321 321 }; 322 322 323 323 static const struct flexcan_devtype_data fsl_imx6q_devtype_data = { 324 324 .quirks = FLEXCAN_QUIRK_DISABLE_RXFG | FLEXCAN_QUIRK_ENABLE_EACEN_RRS | 325 325 FLEXCAN_QUIRK_USE_RX_MAILBOX | FLEXCAN_QUIRK_BROKEN_PERR_STATE | 326 326 FLEXCAN_QUIRK_SETUP_STOP_MODE_GPR | 327 - FLEXCAN_QUIRK_SUPPPORT_RX_MAILBOX | 328 - FLEXCAN_QUIRK_SUPPPORT_RX_MAILBOX_RTR, 327 + FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX | 328 + FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX_RTR, 329 329 }; 330 330 331 331 static const struct flexcan_devtype_data fsl_imx8qm_devtype_data = { 332 332 .quirks = FLEXCAN_QUIRK_DISABLE_RXFG | FLEXCAN_QUIRK_ENABLE_EACEN_RRS | 333 333 FLEXCAN_QUIRK_USE_RX_MAILBOX | FLEXCAN_QUIRK_BROKEN_PERR_STATE | 334 334 FLEXCAN_QUIRK_SUPPORT_FD | FLEXCAN_QUIRK_SETUP_STOP_MODE_SCFW | 335 - FLEXCAN_QUIRK_SUPPPORT_RX_MAILBOX | 336 - FLEXCAN_QUIRK_SUPPPORT_RX_MAILBOX_RTR, 335 + FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX | 336 + FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX_RTR, 337 337 }; 338 338 339 339 static struct flexcan_devtype_data fsl_imx8mp_devtype_data = { ··· 341 341 FLEXCAN_QUIRK_DISABLE_MECR | FLEXCAN_QUIRK_USE_RX_MAILBOX | 342 342 FLEXCAN_QUIRK_BROKEN_PERR_STATE | FLEXCAN_QUIRK_SETUP_STOP_MODE_GPR | 343 343 FLEXCAN_QUIRK_SUPPORT_FD | FLEXCAN_QUIRK_SUPPORT_ECC | 344 - FLEXCAN_QUIRK_SUPPPORT_RX_MAILBOX | 345 - FLEXCAN_QUIRK_SUPPPORT_RX_MAILBOX_RTR, 344 + FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX | 345 + FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX_RTR, 346 346 }; 347 347 348 348 static const struct flexcan_devtype_data fsl_vf610_devtype_data = { 349 349 .quirks = FLEXCAN_QUIRK_DISABLE_RXFG | FLEXCAN_QUIRK_ENABLE_EACEN_RRS | 350 350 FLEXCAN_QUIRK_DISABLE_MECR | FLEXCAN_QUIRK_USE_RX_MAILBOX | 351 351 FLEXCAN_QUIRK_BROKEN_PERR_STATE | FLEXCAN_QUIRK_SUPPORT_ECC | 352 - FLEXCAN_QUIRK_SUPPPORT_RX_MAILBOX | 353 - FLEXCAN_QUIRK_SUPPPORT_RX_MAILBOX_RTR, 352 + FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX | 353 + FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX_RTR, 354 354 }; 355 355 356 356 static const struct flexcan_devtype_data fsl_ls1021a_r2_devtype_data = { 357 357 .quirks = FLEXCAN_QUIRK_DISABLE_RXFG | FLEXCAN_QUIRK_ENABLE_EACEN_RRS | 358 358 FLEXCAN_QUIRK_BROKEN_PERR_STATE | FLEXCAN_QUIRK_USE_RX_MAILBOX | 359 - FLEXCAN_QUIRK_SUPPPORT_RX_MAILBOX | 360 - FLEXCAN_QUIRK_SUPPPORT_RX_MAILBOX_RTR, 359 + FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX | 360 + FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX_RTR, 361 361 }; 362 362 363 363 static const struct flexcan_devtype_data fsl_lx2160a_r1_devtype_data = { ··· 365 365 FLEXCAN_QUIRK_DISABLE_MECR | FLEXCAN_QUIRK_BROKEN_PERR_STATE | 366 366 FLEXCAN_QUIRK_USE_RX_MAILBOX | FLEXCAN_QUIRK_SUPPORT_FD | 367 367 FLEXCAN_QUIRK_SUPPORT_ECC | 368 - FLEXCAN_QUIRK_SUPPPORT_RX_MAILBOX | 369 - FLEXCAN_QUIRK_SUPPPORT_RX_MAILBOX_RTR, 368 + FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX | 369 + FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX_RTR, 370 370 }; 371 371 372 372 static const struct can_bittiming_const flexcan_bittiming_const = { ··· 2085 2085 if ((devtype_data->quirks & FLEXCAN_QUIRK_SUPPORT_FD) && 2086 2086 !((devtype_data->quirks & 2087 2087 (FLEXCAN_QUIRK_USE_RX_MAILBOX | 2088 - FLEXCAN_QUIRK_SUPPPORT_RX_MAILBOX | 2089 - FLEXCAN_QUIRK_SUPPPORT_RX_MAILBOX_RTR | 2090 - FLEXCAN_QUIRK_SUPPPORT_RX_FIFO)) == 2088 + FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX | 2089 + FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX_RTR | 2090 + FLEXCAN_QUIRK_SUPPORT_RX_FIFO)) == 2091 2091 (FLEXCAN_QUIRK_USE_RX_MAILBOX | 2092 - FLEXCAN_QUIRK_SUPPPORT_RX_MAILBOX | 2093 - FLEXCAN_QUIRK_SUPPPORT_RX_MAILBOX_RTR))) { 2092 + FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX | 2093 + FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX_RTR))) { 2094 2094 dev_err(&pdev->dev, "CAN-FD mode doesn't work in RX-FIFO mode!\n"); 2095 2095 return -EINVAL; 2096 2096 } 2097 2097 2098 2098 if ((devtype_data->quirks & 2099 - (FLEXCAN_QUIRK_SUPPPORT_RX_MAILBOX | 2100 - FLEXCAN_QUIRK_SUPPPORT_RX_MAILBOX_RTR)) == 2101 - FLEXCAN_QUIRK_SUPPPORT_RX_MAILBOX_RTR) { 2099 + (FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX | 2100 + FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX_RTR)) == 2101 + FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX_RTR) { 2102 2102 dev_err(&pdev->dev, 2103 2103 "Quirks (0x%08x) inconsistent: RX_MAILBOX_RX supported but not RX_MAILBOX\n", 2104 2104 devtype_data->quirks); ··· 2177 2177 2178 2178 err = flexcan_setup_stop_mode(pdev); 2179 2179 if (err < 0) { 2180 - if (err != -EPROBE_DEFER) 2181 - dev_err(&pdev->dev, "setup stop mode failed\n"); 2180 + dev_err_probe(&pdev->dev, err, "setup stop mode failed\n"); 2182 2181 goto failed_setup_stop_mode; 2183 2182 } 2184 2183
+10 -10
drivers/net/can/flexcan/flexcan.h
··· 63 63 /* Setup 16 mailboxes */ 64 64 #define FLEXCAN_QUIRK_NR_MB_16 BIT(13) 65 65 /* Device supports RX via mailboxes */ 66 - #define FLEXCAN_QUIRK_SUPPPORT_RX_MAILBOX BIT(14) 66 + #define FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX BIT(14) 67 67 /* Device supports RTR reception via mailboxes */ 68 - #define FLEXCAN_QUIRK_SUPPPORT_RX_MAILBOX_RTR BIT(15) 68 + #define FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX_RTR BIT(15) 69 69 /* Device supports RX via FIFO */ 70 - #define FLEXCAN_QUIRK_SUPPPORT_RX_FIFO BIT(16) 70 + #define FLEXCAN_QUIRK_SUPPORT_RX_FIFO BIT(16) 71 71 72 72 struct flexcan_devtype_data { 73 73 u32 quirks; /* quirks needed for different IP cores */ ··· 121 121 { 122 122 const u32 quirks = priv->devtype_data.quirks; 123 123 124 - return quirks & FLEXCAN_QUIRK_SUPPPORT_RX_MAILBOX; 124 + return quirks & FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX; 125 125 } 126 126 127 127 static inline bool ··· 129 129 { 130 130 const u32 quirks = priv->devtype_data.quirks; 131 131 132 - return (quirks & (FLEXCAN_QUIRK_SUPPPORT_RX_MAILBOX | 133 - FLEXCAN_QUIRK_SUPPPORT_RX_MAILBOX_RTR)) == 134 - (FLEXCAN_QUIRK_SUPPPORT_RX_MAILBOX | 135 - FLEXCAN_QUIRK_SUPPPORT_RX_MAILBOX_RTR); 132 + return (quirks & (FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX | 133 + FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX_RTR)) == 134 + (FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX | 135 + FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX_RTR); 136 136 } 137 137 138 138 static inline bool ··· 140 140 { 141 141 const u32 quirks = priv->devtype_data.quirks; 142 142 143 - return quirks & FLEXCAN_QUIRK_SUPPPORT_RX_FIFO; 143 + return quirks & FLEXCAN_QUIRK_SUPPORT_RX_FIFO; 144 144 } 145 145 146 146 static inline bool ··· 149 149 const u32 quirks = priv->devtype_data.quirks; 150 150 151 151 if (quirks & FLEXCAN_QUIRK_USE_RX_MAILBOX) { 152 - if (quirks & FLEXCAN_QUIRK_SUPPPORT_RX_MAILBOX_RTR) 152 + if (quirks & FLEXCAN_QUIRK_SUPPORT_RX_MAILBOX_RTR) 153 153 return true; 154 154 } else { 155 155 /* RX-FIFO is always RTR capable */
+2 -5
drivers/net/can/kvaser_pciefd.c
··· 329 329 static int kvaser_pciefd_spi_wait_loop(struct kvaser_pciefd *pcie, int msk) 330 330 { 331 331 u32 res; 332 - int ret; 333 332 334 - ret = readl_poll_timeout(pcie->reg_base + KVASER_PCIEFD_SPI_STATUS_REG, 335 - res, res & msk, 0, 10); 336 - 337 - return ret; 333 + return readl_poll_timeout(pcie->reg_base + KVASER_PCIEFD_SPI_STATUS_REG, 334 + res, res & msk, 0, 10); 338 335 } 339 336 340 337 static int kvaser_pciefd_spi_cmd(struct kvaser_pciefd *pcie, const u8 *tx,
+10 -16
drivers/net/can/rcar/rcar_canfd.c
··· 1880 1880 1881 1881 /* Global controller context */ 1882 1882 gpriv = devm_kzalloc(&pdev->dev, sizeof(*gpriv), GFP_KERNEL); 1883 - if (!gpriv) { 1884 - err = -ENOMEM; 1885 - goto fail_dev; 1886 - } 1883 + if (!gpriv) 1884 + return -ENOMEM; 1885 + 1887 1886 gpriv->pdev = pdev; 1888 1887 gpriv->channels_mask = channels_mask; 1889 1888 gpriv->fdmode = fdmode; ··· 1903 1904 1904 1905 /* Peripheral clock */ 1905 1906 gpriv->clkp = devm_clk_get(&pdev->dev, "fck"); 1906 - if (IS_ERR(gpriv->clkp)) { 1907 - err = PTR_ERR(gpriv->clkp); 1908 - dev_err(&pdev->dev, "cannot get peripheral clock, error %d\n", 1909 - err); 1910 - goto fail_dev; 1911 - } 1907 + if (IS_ERR(gpriv->clkp)) 1908 + return dev_err_probe(&pdev->dev, PTR_ERR(gpriv->clkp), 1909 + "cannot get peripheral clock\n"); 1912 1910 1913 1911 /* fCAN clock: Pick External clock. If not available fallback to 1914 1912 * CANFD clock ··· 1913 1917 gpriv->can_clk = devm_clk_get(&pdev->dev, "can_clk"); 1914 1918 if (IS_ERR(gpriv->can_clk) || (clk_get_rate(gpriv->can_clk) == 0)) { 1915 1919 gpriv->can_clk = devm_clk_get(&pdev->dev, "canfd"); 1916 - if (IS_ERR(gpriv->can_clk)) { 1917 - err = PTR_ERR(gpriv->can_clk); 1918 - dev_err(&pdev->dev, 1919 - "cannot get canfd clock, error %d\n", err); 1920 - goto fail_dev; 1921 - } 1920 + if (IS_ERR(gpriv->can_clk)) 1921 + return dev_err_probe(&pdev->dev, PTR_ERR(gpriv->can_clk), 1922 + "cannot get canfd clock\n"); 1923 + 1922 1924 gpriv->fcan = RCANFD_CANFDCLK; 1923 1925 1924 1926 } else {
+1 -5
drivers/net/can/sja1000/sja1000.c
··· 661 661 662 662 int register_sja1000dev(struct net_device *dev) 663 663 { 664 - int ret; 665 - 666 664 if (!sja1000_probe_chip(dev)) 667 665 return -ENODEV; 668 666 ··· 671 673 set_reset_mode(dev); 672 674 chipset_init(dev); 673 675 674 - ret = register_candev(dev); 675 - 676 - return ret; 676 + return register_candev(dev); 677 677 } 678 678 EXPORT_SYMBOL_GPL(register_sja1000dev); 679 679
+33 -5
drivers/net/can/sja1000/sja1000_platform.c
··· 14 14 #include <linux/irq.h> 15 15 #include <linux/can/dev.h> 16 16 #include <linux/can/platform/sja1000.h> 17 + #include <linux/clk.h> 17 18 #include <linux/io.h> 18 19 #include <linux/of.h> 19 20 #include <linux/of_device.h> ··· 104 103 spin_lock_init(&tp->io_lock); 105 104 } 106 105 106 + static void sp_rzn1_init(struct sja1000_priv *priv, struct device_node *of) 107 + { 108 + priv->flags = SJA1000_QUIRK_NO_CDR_REG; 109 + } 110 + 107 111 static void sp_populate(struct sja1000_priv *priv, 108 112 struct sja1000_platform_data *pdata, 109 113 unsigned long resource_mem_flags) ··· 159 153 priv->write_reg = sp_write_reg8; 160 154 } 161 155 162 - err = of_property_read_u32(of, "nxp,external-clock-frequency", &prop); 163 - if (!err) 164 - priv->can.clock.freq = prop / 2; 165 - else 166 - priv->can.clock.freq = SP_CAN_CLOCK; /* default */ 156 + if (!priv->can.clock.freq) { 157 + err = of_property_read_u32(of, "nxp,external-clock-frequency", &prop); 158 + if (!err) 159 + priv->can.clock.freq = prop / 2; 160 + else 161 + priv->can.clock.freq = SP_CAN_CLOCK; /* default */ 162 + } 167 163 168 164 err = of_property_read_u32(of, "nxp,tx-output-mode", &prop); 169 165 if (!err) ··· 200 192 .init = sp_technologic_init, 201 193 }; 202 194 195 + static struct sja1000_of_data renesas_data = { 196 + .init = sp_rzn1_init, 197 + }; 198 + 203 199 static const struct of_device_id sp_of_table[] = { 204 200 { .compatible = "nxp,sja1000", .data = NULL, }, 201 + { .compatible = "renesas,rzn1-sja1000", .data = &renesas_data, }, 205 202 { .compatible = "technologic,sja1000", .data = &technologic_data, }, 206 203 { /* sentinel */ }, 207 204 }; ··· 223 210 struct device_node *of = pdev->dev.of_node; 224 211 const struct sja1000_of_data *of_data = NULL; 225 212 size_t priv_sz = 0; 213 + struct clk *clk; 226 214 227 215 pdata = dev_get_platdata(&pdev->dev); 228 216 if (!pdata && !of) { ··· 248 234 irq = platform_get_irq(pdev, 0); 249 235 if (irq < 0) 250 236 return irq; 237 + 238 + clk = devm_clk_get_optional_enabled(&pdev->dev, NULL); 239 + if (IS_ERR(clk)) 240 + return dev_err_probe(&pdev->dev, PTR_ERR(clk), 241 + "CAN clk operation failed"); 251 242 } else { 252 243 res_irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0); 253 244 if (!res_irq) ··· 281 262 priv->reg_base = addr; 282 263 283 264 if (of) { 265 + if (clk) { 266 + priv->can.clock.freq = clk_get_rate(clk) / 2; 267 + if (!priv->can.clock.freq) { 268 + err = -EINVAL; 269 + dev_err(&pdev->dev, "Zero CAN clk rate"); 270 + goto exit_free; 271 + } 272 + } 273 + 284 274 sp_populate_of(priv, of); 285 275 286 276 if (of_data && of_data->init)
+1 -1
drivers/net/can/usb/etas_es58x/es58x_core.h
··· 222 222 u8 cmd_type; 223 223 u8 cmd_id; 224 224 } __packed; 225 - u8 raw_cmd[0]; 225 + DECLARE_FLEX_ARRAY(u8, raw_cmd); 226 226 }; 227 227 228 228 /**
+197 -18
drivers/net/can/usb/gs_usb.c
··· 10 10 */ 11 11 12 12 #include <linux/bitfield.h> 13 + #include <linux/clocksource.h> 13 14 #include <linux/ethtool.h> 14 15 #include <linux/init.h> 15 16 #include <linux/module.h> 16 17 #include <linux/netdevice.h> 17 18 #include <linux/signal.h> 19 + #include <linux/timecounter.h> 20 + #include <linux/units.h> 18 21 #include <linux/usb.h> 22 + #include <linux/workqueue.h> 19 23 20 24 #include <linux/can.h> 21 25 #include <linux/can/dev.h> 22 26 #include <linux/can/error.h> 23 27 24 28 /* Device specific constants */ 25 - #define USB_GSUSB_1_VENDOR_ID 0x1d50 26 - #define USB_GSUSB_1_PRODUCT_ID 0x606f 29 + #define USB_GS_USB_1_VENDOR_ID 0x1d50 30 + #define USB_GS_USB_1_PRODUCT_ID 0x606f 27 31 28 32 #define USB_CANDLELIGHT_VENDOR_ID 0x1209 29 33 #define USB_CANDLELIGHT_PRODUCT_ID 0x2323 ··· 38 34 #define USB_ABE_CANDEBUGGER_FD_VENDOR_ID 0x16d0 39 35 #define USB_ABE_CANDEBUGGER_FD_PRODUCT_ID 0x10b8 40 36 41 - #define GSUSB_ENDPOINT_IN 1 42 - #define GSUSB_ENDPOINT_OUT 2 37 + #define GS_USB_ENDPOINT_IN 1 38 + #define GS_USB_ENDPOINT_OUT 2 39 + 40 + /* Timestamp 32 bit timer runs at 1 MHz (1 µs tick). Worker accounts 41 + * for timer overflow (will be after ~71 minutes) 42 + */ 43 + #define GS_USB_TIMESTAMP_TIMER_HZ (1 * HZ_PER_MHZ) 44 + #define GS_USB_TIMESTAMP_WORK_DELAY_SEC 1800 45 + static_assert(GS_USB_TIMESTAMP_WORK_DELAY_SEC < 46 + CYCLECOUNTER_MASK(32) / GS_USB_TIMESTAMP_TIMER_HZ / 2); 43 47 44 48 /* Device specific constants */ 45 49 enum gs_usb_breq { ··· 211 199 u8 data[8]; 212 200 } __packed; 213 201 202 + struct classic_can_ts { 203 + u8 data[8]; 204 + __le32 timestamp_us; 205 + } __packed; 206 + 214 207 struct classic_can_quirk { 215 208 u8 data[8]; 216 209 u8 quirk; ··· 223 206 224 207 struct canfd { 225 208 u8 data[64]; 209 + } __packed; 210 + 211 + struct canfd_ts { 212 + u8 data[64]; 213 + __le32 timestamp_us; 226 214 } __packed; 227 215 228 216 struct canfd_quirk { ··· 246 224 247 225 union { 248 226 DECLARE_FLEX_ARRAY(struct classic_can, classic_can); 227 + DECLARE_FLEX_ARRAY(struct classic_can_ts, classic_can_ts); 249 228 DECLARE_FLEX_ARRAY(struct classic_can_quirk, classic_can_quirk); 250 229 DECLARE_FLEX_ARRAY(struct canfd, canfd); 230 + DECLARE_FLEX_ARRAY(struct canfd_ts, canfd_ts); 251 231 DECLARE_FLEX_ARRAY(struct canfd_quirk, canfd_quirk); 252 232 }; 253 233 } __packed; ··· 282 258 283 259 struct can_bittiming_const bt_const, data_bt_const; 284 260 unsigned int channel; /* channel number */ 261 + 262 + /* time counter for hardware timestamps */ 263 + struct cyclecounter cc; 264 + struct timecounter tc; 265 + struct delayed_work timestamp; 285 266 286 267 u32 feature; 287 268 unsigned int hf_size_tx; ··· 380 351 return rc; 381 352 } 382 353 354 + static inline int gs_usb_get_timestamp(const struct gs_can *dev, 355 + u32 *timestamp_p) 356 + { 357 + __le32 timestamp; 358 + int rc; 359 + 360 + rc = usb_control_msg_recv(interface_to_usbdev(dev->iface), 361 + usb_sndctrlpipe(interface_to_usbdev(dev->iface), 0), 362 + GS_USB_BREQ_TIMESTAMP, 363 + USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_INTERFACE, 364 + dev->channel, 0, 365 + &timestamp, sizeof(timestamp), 366 + USB_CTRL_GET_TIMEOUT, 367 + GFP_KERNEL); 368 + if (rc) 369 + return rc; 370 + 371 + *timestamp_p = le32_to_cpu(timestamp); 372 + 373 + return 0; 374 + } 375 + 376 + static u64 gs_usb_timestamp_read(const struct cyclecounter *cc) 377 + { 378 + const struct gs_can *dev; 379 + u32 timestamp = 0; 380 + int err; 381 + 382 + dev = container_of(cc, struct gs_can, cc); 383 + err = gs_usb_get_timestamp(dev, &timestamp); 384 + if (err) 385 + netdev_err(dev->netdev, 386 + "Error %d while reading timestamp. HW timestamps may be inaccurate.", 387 + err); 388 + 389 + return timestamp; 390 + } 391 + 392 + static void gs_usb_timestamp_work(struct work_struct *work) 393 + { 394 + struct delayed_work *delayed_work = to_delayed_work(work); 395 + struct gs_can *dev; 396 + 397 + dev = container_of(delayed_work, struct gs_can, timestamp); 398 + timecounter_read(&dev->tc); 399 + 400 + schedule_delayed_work(&dev->timestamp, 401 + GS_USB_TIMESTAMP_WORK_DELAY_SEC * HZ); 402 + } 403 + 404 + static void gs_usb_skb_set_timestamp(const struct gs_can *dev, 405 + struct sk_buff *skb, u32 timestamp) 406 + { 407 + struct skb_shared_hwtstamps *hwtstamps = skb_hwtstamps(skb); 408 + u64 ns; 409 + 410 + ns = timecounter_cyc2time(&dev->tc, timestamp); 411 + hwtstamps->hwtstamp = ns_to_ktime(ns); 412 + } 413 + 414 + static void gs_usb_timestamp_init(struct gs_can *dev) 415 + { 416 + struct cyclecounter *cc = &dev->cc; 417 + 418 + cc->read = gs_usb_timestamp_read; 419 + cc->mask = CYCLECOUNTER_MASK(32); 420 + cc->shift = 32 - bits_per(NSEC_PER_SEC / GS_USB_TIMESTAMP_TIMER_HZ); 421 + cc->mult = clocksource_hz2mult(GS_USB_TIMESTAMP_TIMER_HZ, cc->shift); 422 + 423 + timecounter_init(&dev->tc, &dev->cc, ktime_get_real_ns()); 424 + 425 + INIT_DELAYED_WORK(&dev->timestamp, gs_usb_timestamp_work); 426 + schedule_delayed_work(&dev->timestamp, 427 + GS_USB_TIMESTAMP_WORK_DELAY_SEC * HZ); 428 + } 429 + 430 + static void gs_usb_timestamp_stop(struct gs_can *dev) 431 + { 432 + cancel_delayed_work_sync(&dev->timestamp); 433 + } 434 + 383 435 static void gs_update_state(struct gs_can *dev, struct can_frame *cf) 384 436 { 385 437 struct can_device_stats *can_stats = &dev->can.can_stats; ··· 484 374 dev->can.state = CAN_STATE_ERROR_ACTIVE; 485 375 } 486 376 } 377 + } 378 + 379 + static void gs_usb_set_timestamp(const struct gs_can *dev, struct sk_buff *skb, 380 + const struct gs_host_frame *hf) 381 + { 382 + u32 timestamp; 383 + 384 + if (!(dev->feature & GS_CAN_FEATURE_HW_TIMESTAMP)) 385 + return; 386 + 387 + if (hf->flags & GS_CAN_FLAG_FD) 388 + timestamp = le32_to_cpu(hf->canfd_ts->timestamp_us); 389 + else 390 + timestamp = le32_to_cpu(hf->classic_can_ts->timestamp_us); 391 + 392 + gs_usb_skb_set_timestamp(dev, skb, timestamp); 393 + 394 + return; 487 395 } 488 396 489 397 static void gs_usb_receive_bulk_callback(struct urb *urb) ··· 571 443 gs_update_state(dev, cf); 572 444 } 573 445 446 + gs_usb_set_timestamp(dev, skb, hf); 447 + 574 448 netdev->stats.rx_packets++; 575 449 netdev->stats.rx_bytes += hf->can_dlc; 576 450 ··· 594 464 hf->echo_id); 595 465 goto resubmit_urb; 596 466 } 467 + 468 + skb = dev->can.echo_skb[hf->echo_id]; 469 + gs_usb_set_timestamp(dev, skb, hf); 597 470 598 471 netdev->stats.tx_packets++; 599 472 netdev->stats.tx_bytes += can_get_echo_skb(netdev, hf->echo_id, ··· 624 491 625 492 resubmit_urb: 626 493 usb_fill_bulk_urb(urb, usbcan->udev, 627 - usb_rcvbulkpipe(usbcan->udev, GSUSB_ENDPOINT_IN), 494 + usb_rcvbulkpipe(usbcan->udev, GS_USB_ENDPOINT_IN), 628 495 hf, dev->parent->hf_size_rx, 629 496 gs_usb_receive_bulk_callback, usbcan); 630 497 ··· 792 659 } 793 660 794 661 usb_fill_bulk_urb(urb, dev->udev, 795 - usb_sndbulkpipe(dev->udev, GSUSB_ENDPOINT_OUT), 662 + usb_sndbulkpipe(dev->udev, GS_USB_ENDPOINT_OUT), 796 663 hf, dev->hf_size_tx, 797 664 gs_usb_xmit_callback, txc); 798 665 ··· 902 769 usb_fill_bulk_urb(urb, 903 770 dev->udev, 904 771 usb_rcvbulkpipe(dev->udev, 905 - GSUSB_ENDPOINT_IN), 772 + GS_USB_ENDPOINT_IN), 906 773 buf, 907 774 dev->parent->hf_size_rx, 908 775 gs_usb_receive_bulk_callback, parent); ··· 956 823 if (ctrlmode & CAN_CTRLMODE_3_SAMPLES) 957 824 flags |= GS_CAN_MODE_TRIPLE_SAMPLE; 958 825 826 + /* if hardware supports timestamps, enable it */ 827 + if (dev->feature & GS_CAN_FEATURE_HW_TIMESTAMP) 828 + flags |= GS_CAN_MODE_HW_TIMESTAMP; 829 + 959 830 /* finally start device */ 960 831 dm->mode = cpu_to_le32(GS_CAN_MODE_START); 961 832 dm->flags = cpu_to_le32(flags); ··· 976 839 } 977 840 978 841 kfree(dm); 842 + 843 + /* start polling timestamp */ 844 + if (dev->feature & GS_CAN_FEATURE_HW_TIMESTAMP) 845 + gs_usb_timestamp_init(dev); 979 846 980 847 dev->can.state = CAN_STATE_ERROR_ACTIVE; 981 848 ··· 998 857 unsigned int i; 999 858 1000 859 netif_stop_queue(netdev); 860 + 861 + /* stop polling timestamp */ 862 + if (dev->feature & GS_CAN_FEATURE_HW_TIMESTAMP) 863 + gs_usb_timestamp_stop(dev); 1001 864 1002 865 /* Stop polling */ 1003 866 parent->active_channels--; ··· 1035 890 return 0; 1036 891 } 1037 892 893 + static int gs_can_eth_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd) 894 + { 895 + const struct gs_can *dev = netdev_priv(netdev); 896 + 897 + if (dev->feature & GS_CAN_FEATURE_HW_TIMESTAMP) 898 + return can_eth_ioctl_hwts(netdev, ifr, cmd); 899 + 900 + return -EOPNOTSUPP; 901 + } 902 + 1038 903 static const struct net_device_ops gs_usb_netdev_ops = { 1039 904 .ndo_open = gs_can_open, 1040 905 .ndo_stop = gs_can_close, 1041 906 .ndo_start_xmit = gs_can_start_xmit, 1042 907 .ndo_change_mtu = can_change_mtu, 908 + .ndo_eth_ioctl = gs_can_eth_ioctl, 1043 909 }; 1044 910 1045 911 static int gs_usb_set_identify(struct net_device *netdev, bool do_identify) ··· 1100 944 return rc; 1101 945 } 1102 946 947 + static int gs_usb_get_ts_info(struct net_device *netdev, 948 + struct ethtool_ts_info *info) 949 + { 950 + struct gs_can *dev = netdev_priv(netdev); 951 + 952 + /* report if device supports HW timestamps */ 953 + if (dev->feature & GS_CAN_FEATURE_HW_TIMESTAMP) 954 + return can_ethtool_op_get_ts_info_hwts(netdev, info); 955 + 956 + return ethtool_op_get_ts_info(netdev, info); 957 + } 958 + 1103 959 static const struct ethtool_ops gs_usb_ethtool_ops = { 1104 960 .set_phys_id = gs_usb_set_phys_id, 1105 - .get_ts_info = ethtool_op_get_ts_info, 961 + .get_ts_info = gs_usb_get_ts_info, 1106 962 }; 1107 963 1108 964 static struct gs_can *gs_make_candev(unsigned int channel, ··· 1231 1063 * GS_CAN_FEATURE_QUIRK_BREQ_CANTACT_PRO to workaround this 1232 1064 * issue. 1233 1065 */ 1234 - if (dev->udev->descriptor.idVendor == cpu_to_le16(USB_GSUSB_1_VENDOR_ID) && 1235 - dev->udev->descriptor.idProduct == cpu_to_le16(USB_GSUSB_1_PRODUCT_ID) && 1066 + if (dev->udev->descriptor.idVendor == cpu_to_le16(USB_GS_USB_1_VENDOR_ID) && 1067 + dev->udev->descriptor.idProduct == cpu_to_le16(USB_GS_USB_1_PRODUCT_ID) && 1236 1068 dev->udev->manufacturer && dev->udev->product && 1237 1069 !strcmp(dev->udev->manufacturer, "LinkLayer Labs") && 1238 1070 !strcmp(dev->udev->product, "CANtact Pro") && ··· 1370 1202 } 1371 1203 1372 1204 init_usb_anchor(&dev->rx_submitted); 1373 - /* default to classic CAN, switch to CAN-FD if at least one of 1374 - * our channels support CAN-FD. 1375 - */ 1376 - dev->hf_size_rx = struct_size(hf, classic_can, 1); 1377 1205 1378 1206 usb_set_intfdata(intf, dev); 1379 1207 dev->udev = udev; 1380 1208 1381 1209 for (i = 0; i < icount; i++) { 1210 + unsigned int hf_size_rx = 0; 1211 + 1382 1212 dev->canch[i] = gs_make_candev(i, intf, dconf); 1383 1213 if (IS_ERR_OR_NULL(dev->canch[i])) { 1384 1214 /* save error code to return later */ ··· 1394 1228 } 1395 1229 dev->canch[i]->parent = dev; 1396 1230 1397 - if (dev->canch[i]->can.ctrlmode_supported & CAN_CTRLMODE_FD) 1398 - dev->hf_size_rx = struct_size(hf, canfd, 1); 1231 + /* set RX packet size based on FD and if hardware 1232 + * timestamps are supported. 1233 + */ 1234 + if (dev->canch[i]->can.ctrlmode_supported & CAN_CTRLMODE_FD) { 1235 + if (dev->canch[i]->feature & GS_CAN_FEATURE_HW_TIMESTAMP) 1236 + hf_size_rx = struct_size(hf, canfd_ts, 1); 1237 + else 1238 + hf_size_rx = struct_size(hf, canfd, 1); 1239 + } else { 1240 + if (dev->canch[i]->feature & GS_CAN_FEATURE_HW_TIMESTAMP) 1241 + hf_size_rx = struct_size(hf, classic_can_ts, 1); 1242 + else 1243 + hf_size_rx = struct_size(hf, classic_can, 1); 1244 + } 1245 + dev->hf_size_rx = max(dev->hf_size_rx, hf_size_rx); 1399 1246 } 1400 1247 1401 1248 kfree(dconf); ··· 1437 1258 } 1438 1259 1439 1260 static const struct usb_device_id gs_usb_table[] = { 1440 - { USB_DEVICE_INTERFACE_NUMBER(USB_GSUSB_1_VENDOR_ID, 1441 - USB_GSUSB_1_PRODUCT_ID, 0) }, 1261 + { USB_DEVICE_INTERFACE_NUMBER(USB_GS_USB_1_VENDOR_ID, 1262 + USB_GS_USB_1_PRODUCT_ID, 0) }, 1442 1263 { USB_DEVICE_INTERFACE_NUMBER(USB_CANDLELIGHT_VENDOR_ID, 1443 1264 USB_CANDLELIGHT_PRODUCT_ID, 0) }, 1444 1265 { USB_DEVICE_INTERFACE_NUMBER(USB_CES_CANEXT_FD_VENDOR_ID,
+10 -10
drivers/net/can/usb/kvaser_usb/kvaser_usb_hydra.c
··· 534 534 struct kvaser_cmd *cmd; 535 535 int err; 536 536 537 - cmd = kcalloc(1, sizeof(struct kvaser_cmd), GFP_KERNEL); 537 + cmd = kzalloc(sizeof(*cmd), GFP_KERNEL); 538 538 if (!cmd) 539 539 return -ENOMEM; 540 540 ··· 573 573 struct kvaser_usb *dev = priv->dev; 574 574 int err; 575 575 576 - cmd = kcalloc(1, sizeof(struct kvaser_cmd), GFP_ATOMIC); 576 + cmd = kzalloc(sizeof(*cmd), GFP_ATOMIC); 577 577 if (!cmd) 578 578 return -ENOMEM; 579 579 ··· 694 694 struct kvaser_cmd *cmd; 695 695 int err; 696 696 697 - cmd = kcalloc(1, sizeof(struct kvaser_cmd), GFP_KERNEL); 697 + cmd = kzalloc(sizeof(*cmd), GFP_KERNEL); 698 698 if (!cmd) 699 699 return -ENOMEM; 700 700 ··· 735 735 int err; 736 736 int i; 737 737 738 - cmd = kcalloc(1, sizeof(struct kvaser_cmd), GFP_KERNEL); 738 + cmd = kzalloc(sizeof(*cmd), GFP_KERNEL); 739 739 if (!cmd) 740 740 return -ENOMEM; 741 741 ··· 1394 1394 u32 kcan_id; 1395 1395 u32 kcan_header; 1396 1396 1397 - cmd = kcalloc(1, sizeof(struct kvaser_cmd_ext), GFP_ATOMIC); 1397 + cmd = kzalloc(sizeof(*cmd), GFP_ATOMIC); 1398 1398 if (!cmd) 1399 1399 return NULL; 1400 1400 ··· 1468 1468 u32 flags; 1469 1469 u32 id; 1470 1470 1471 - cmd = kcalloc(1, sizeof(struct kvaser_cmd), GFP_ATOMIC); 1471 + cmd = kzalloc(sizeof(*cmd), GFP_ATOMIC); 1472 1472 if (!cmd) 1473 1473 return NULL; 1474 1474 ··· 1533 1533 int sjw = bt->sjw; 1534 1534 int err; 1535 1535 1536 - cmd = kcalloc(1, sizeof(struct kvaser_cmd), GFP_KERNEL); 1536 + cmd = kzalloc(sizeof(*cmd), GFP_KERNEL); 1537 1537 if (!cmd) 1538 1538 return -ENOMEM; 1539 1539 ··· 1567 1567 int sjw = dbt->sjw; 1568 1568 int err; 1569 1569 1570 - cmd = kcalloc(1, sizeof(struct kvaser_cmd), GFP_KERNEL); 1570 + cmd = kzalloc(sizeof(*cmd), GFP_KERNEL); 1571 1571 if (!cmd) 1572 1572 return -ENOMEM; 1573 1573 ··· 1711 1711 u32 flags; 1712 1712 struct kvaser_usb_dev_card_data *card_data = &dev->card_data; 1713 1713 1714 - cmd = kcalloc(1, sizeof(struct kvaser_cmd), GFP_KERNEL); 1714 + cmd = kzalloc(sizeof(*cmd), GFP_KERNEL); 1715 1715 if (!cmd) 1716 1716 return -ENOMEM; 1717 1717 ··· 1851 1851 return -EINVAL; 1852 1852 } 1853 1853 1854 - cmd = kcalloc(1, sizeof(struct kvaser_cmd), GFP_KERNEL); 1854 + cmd = kzalloc(sizeof(*cmd), GFP_KERNEL); 1855 1855 if (!cmd) 1856 1856 return -ENOMEM; 1857 1857
+6 -6
drivers/net/can/vcan.c
··· 71 71 72 72 static void vcan_rx(struct sk_buff *skb, struct net_device *dev) 73 73 { 74 - struct canfd_frame *cfd = (struct canfd_frame *)skb->data; 75 74 struct net_device_stats *stats = &dev->stats; 76 75 77 76 stats->rx_packets++; 78 - stats->rx_bytes += cfd->len; 77 + stats->rx_bytes += can_skb_get_data_len(skb); 79 78 80 79 skb->pkt_type = PACKET_BROADCAST; 81 80 skb->dev = dev; ··· 85 86 86 87 static netdev_tx_t vcan_tx(struct sk_buff *skb, struct net_device *dev) 87 88 { 88 - struct canfd_frame *cfd = (struct canfd_frame *)skb->data; 89 89 struct net_device_stats *stats = &dev->stats; 90 - int loop, len; 90 + unsigned int len; 91 + int loop; 91 92 92 93 if (can_dropped_invalid_skb(dev, skb)) 93 94 return NETDEV_TX_OK; 94 95 95 - len = cfd->can_id & CAN_RTR_FLAG ? 0 : cfd->len; 96 + len = can_skb_get_data_len(skb); 96 97 stats->tx_packets++; 97 98 stats->tx_bytes += len; 98 99 ··· 136 137 if (dev->flags & IFF_UP) 137 138 return -EBUSY; 138 139 139 - if (new_mtu != CAN_MTU && new_mtu != CANFD_MTU) 140 + if (new_mtu != CAN_MTU && new_mtu != CANFD_MTU && 141 + !can_is_canxl_dev_mtu(new_mtu)) 140 142 return -EINVAL; 141 143 142 144 dev->mtu = new_mtu;
+4 -4
drivers/net/can/vxcan.c
··· 38 38 { 39 39 struct vxcan_priv *priv = netdev_priv(dev); 40 40 struct net_device *peer; 41 - struct canfd_frame *cfd = (struct canfd_frame *)oskb->data; 42 41 struct net_device_stats *peerstats, *srcstats = &dev->stats; 43 42 struct sk_buff *skb; 44 - u8 len; 43 + unsigned int len; 45 44 46 45 if (can_dropped_invalid_skb(dev, oskb)) 47 46 return NETDEV_TX_OK; ··· 69 70 skb->dev = peer; 70 71 skb->ip_summed = CHECKSUM_UNNECESSARY; 71 72 72 - len = cfd->can_id & CAN_RTR_FLAG ? 0 : cfd->len; 73 + len = can_skb_get_data_len(skb); 73 74 if (netif_rx(skb) == NET_RX_SUCCESS) { 74 75 srcstats->tx_packets++; 75 76 srcstats->tx_bytes += len; ··· 131 132 if (dev->flags & IFF_UP) 132 133 return -EBUSY; 133 134 134 - if (new_mtu != CAN_MTU && new_mtu != CANFD_MTU) 135 + if (new_mtu != CAN_MTU && new_mtu != CANFD_MTU && 136 + !can_is_canxl_dev_mtu(new_mtu)) 135 137 return -EINVAL; 136 138 137 139 dev->mtu = new_mtu;
+5
include/linux/can/dev.h
··· 147 147 return priv->ctrlmode & ~priv->ctrlmode_supported; 148 148 } 149 149 150 + static inline bool can_is_canxl_dev_mtu(unsigned int mtu) 151 + { 152 + return (mtu >= CANXL_MIN_MTU && mtu <= CANXL_MAX_MTU); 153 + } 154 + 150 155 void can_setup(struct net_device *dev); 151 156 152 157 struct net_device *alloc_candev_mqs(int sizeof_priv, unsigned int echo_skb_max,
+55 -2
include/linux/can/skb.h
··· 20 20 int can_put_echo_skb(struct sk_buff *skb, struct net_device *dev, 21 21 unsigned int idx, unsigned int frame_len); 22 22 struct sk_buff *__can_get_echo_skb(struct net_device *dev, unsigned int idx, 23 - u8 *len_ptr, unsigned int *frame_len_ptr); 23 + unsigned int *len_ptr, 24 + unsigned int *frame_len_ptr); 24 25 unsigned int __must_check can_get_echo_skb(struct net_device *dev, 25 26 unsigned int idx, 26 27 unsigned int *frame_len_ptr); ··· 30 29 struct sk_buff *alloc_can_skb(struct net_device *dev, struct can_frame **cf); 31 30 struct sk_buff *alloc_canfd_skb(struct net_device *dev, 32 31 struct canfd_frame **cfd); 32 + struct sk_buff *alloc_canxl_skb(struct net_device *dev, 33 + struct canxl_frame **cxl, 34 + unsigned int data_len); 33 35 struct sk_buff *alloc_can_err_skb(struct net_device *dev, 34 36 struct can_frame **cf); 35 37 bool can_dropped_invalid_skb(struct net_device *dev, struct sk_buff *skb); ··· 101 97 return nskb; 102 98 } 103 99 100 + static inline bool can_is_can_skb(const struct sk_buff *skb) 101 + { 102 + struct can_frame *cf = (struct can_frame *)skb->data; 103 + 104 + /* the CAN specific type of skb is identified by its data length */ 105 + return (skb->len == CAN_MTU && cf->len <= CAN_MAX_DLEN); 106 + } 107 + 104 108 static inline bool can_is_canfd_skb(const struct sk_buff *skb) 105 109 { 110 + struct canfd_frame *cfd = (struct canfd_frame *)skb->data; 111 + 106 112 /* the CAN specific type of skb is identified by its data length */ 107 - return skb->len == CANFD_MTU; 113 + return (skb->len == CANFD_MTU && cfd->len <= CANFD_MAX_DLEN); 114 + } 115 + 116 + static inline bool can_is_canxl_skb(const struct sk_buff *skb) 117 + { 118 + const struct canxl_frame *cxl = (struct canxl_frame *)skb->data; 119 + 120 + if (skb->len < CANXL_HDR_SIZE + CANXL_MIN_DLEN || skb->len > CANXL_MTU) 121 + return false; 122 + 123 + /* this also checks valid CAN XL data length boundaries */ 124 + if (skb->len != CANXL_HDR_SIZE + cxl->len) 125 + return false; 126 + 127 + return cxl->flags & CANXL_XLF; 128 + } 129 + 130 + /* get length element value from can[|fd|xl]_frame structure */ 131 + static inline unsigned int can_skb_get_len_val(struct sk_buff *skb) 132 + { 133 + const struct canxl_frame *cxl = (struct canxl_frame *)skb->data; 134 + const struct canfd_frame *cfd = (struct canfd_frame *)skb->data; 135 + 136 + if (can_is_canxl_skb(skb)) 137 + return cxl->len; 138 + 139 + return cfd->len; 140 + } 141 + 142 + /* get needed data length inside CAN frame for all frame types (RTR aware) */ 143 + static inline unsigned int can_skb_get_data_len(struct sk_buff *skb) 144 + { 145 + unsigned int len = can_skb_get_len_val(skb); 146 + const struct can_frame *cf = (struct can_frame *)skb->data; 147 + 148 + /* RTR frames have an actual length of zero */ 149 + if (can_is_can_skb(skb) && cf->can_id & CAN_RTR_FLAG) 150 + return 0; 151 + 152 + return len; 108 153 } 109 154 110 155 #endif /* !_CAN_SKB_H */
+53 -2
include/uapi/linux/can.h
··· 48 48 49 49 #include <linux/types.h> 50 50 #include <linux/socket.h> 51 + #include <linux/stddef.h> /* for offsetof */ 51 52 52 53 /* controller area network (CAN) kernel definitions */ 53 54 ··· 61 60 #define CAN_SFF_MASK 0x000007FFU /* standard frame format (SFF) */ 62 61 #define CAN_EFF_MASK 0x1FFFFFFFU /* extended frame format (EFF) */ 63 62 #define CAN_ERR_MASK 0x1FFFFFFFU /* omit EFF, RTR, ERR flags */ 63 + #define CANXL_PRIO_MASK CAN_SFF_MASK /* 11 bit priority mask */ 64 64 65 65 /* 66 66 * Controller Area Network Identifier structure ··· 75 73 76 74 #define CAN_SFF_ID_BITS 11 77 75 #define CAN_EFF_ID_BITS 29 76 + #define CANXL_PRIO_BITS CAN_SFF_ID_BITS 78 77 79 78 /* 80 79 * Controller Area Network Error Message Frame Mask structure ··· 93 90 /* CAN FD payload length and DLC definitions according to ISO 11898-7 */ 94 91 #define CANFD_MAX_DLC 15 95 92 #define CANFD_MAX_DLEN 64 93 + 94 + /* 95 + * CAN XL payload length and DLC definitions according to ISO 11898-1 96 + * CAN XL DLC ranges from 0 .. 2047 => data length from 1 .. 2048 byte 97 + */ 98 + #define CANXL_MIN_DLC 0 99 + #define CANXL_MAX_DLC 2047 100 + #define CANXL_MAX_DLC_MASK 0x07FF 101 + #define CANXL_MIN_DLEN 1 102 + #define CANXL_MAX_DLEN 2048 96 103 97 104 /** 98 105 * struct can_frame - Classical CAN frame structure (aka CAN 2.0B) ··· 154 141 * When this is done the former differentiation via CAN_MTU / CANFD_MTU gets 155 142 * lost. CANFD_FDF allows programmers to mark CAN FD frames in the case of 156 143 * using struct canfd_frame for mixed CAN / CAN FD content (dual use). 157 - * N.B. the Kernel APIs do NOT provide mixed CAN / CAN FD content inside of 158 - * struct canfd_frame therefore the CANFD_FDF flag is disregarded by Linux. 144 + * Since the introduction of CAN XL the CANFD_FDF flag is set in all CAN FD 145 + * frame structures provided by the CAN subsystem of the Linux kernel. 159 146 */ 160 147 #define CANFD_BRS 0x01 /* bit rate switch (second bitrate for payload data) */ 161 148 #define CANFD_ESI 0x02 /* error state indicator of the transmitting node */ ··· 179 166 __u8 data[CANFD_MAX_DLEN] __attribute__((aligned(8))); 180 167 }; 181 168 169 + /* 170 + * defined bits for canxl_frame.flags 171 + * 172 + * The canxl_frame.flags element contains two bits CANXL_XLF and CANXL_SEC 173 + * and shares the relative position of the struct can[fd]_frame.len element. 174 + * The CANXL_XLF bit ALWAYS needs to be set to indicate a valid CAN XL frame. 175 + * As a side effect setting this bit intentionally breaks the length checks 176 + * for Classical CAN and CAN FD frames. 177 + * 178 + * Undefined bits in canxl_frame.flags are reserved and shall be set to zero. 179 + */ 180 + #define CANXL_XLF 0x80 /* mandatory CAN XL frame flag (must always be set!) */ 181 + #define CANXL_SEC 0x01 /* Simple Extended Content (security/segmentation) */ 182 + 183 + /** 184 + * struct canxl_frame - CAN with e'X'tended frame 'L'ength frame structure 185 + * @prio: 11 bit arbitration priority with zero'ed CAN_*_FLAG flags 186 + * @flags: additional flags for CAN XL 187 + * @sdt: SDU (service data unit) type 188 + * @len: frame payload length in byte (CANXL_MIN_DLEN .. CANXL_MAX_DLEN) 189 + * @af: acceptance field 190 + * @data: CAN XL frame payload (CANXL_MIN_DLEN .. CANXL_MAX_DLEN byte) 191 + * 192 + * @prio shares the same position as @can_id from struct can[fd]_frame. 193 + */ 194 + struct canxl_frame { 195 + canid_t prio; /* 11 bit priority for arbitration (canid_t) */ 196 + __u8 flags; /* additional flags for CAN XL */ 197 + __u8 sdt; /* SDU (service data unit) type */ 198 + __u16 len; /* frame payload length in byte */ 199 + __u32 af; /* acceptance field */ 200 + __u8 data[CANXL_MAX_DLEN]; 201 + }; 202 + 182 203 #define CAN_MTU (sizeof(struct can_frame)) 183 204 #define CANFD_MTU (sizeof(struct canfd_frame)) 205 + #define CANXL_MTU (sizeof(struct canxl_frame)) 206 + #define CANXL_HDR_SIZE (offsetof(struct canxl_frame, data)) 207 + #define CANXL_MIN_MTU (CANXL_HDR_SIZE + 64) 208 + #define CANXL_MAX_MTU CANXL_MTU 184 209 185 210 /* particular protocols of the protocol family PF_CAN */ 186 211 #define CAN_RAW 1 /* RAW sockets */
+1
include/uapi/linux/can/raw.h
··· 62 62 CAN_RAW_RECV_OWN_MSGS, /* receive my own msgs (default:off) */ 63 63 CAN_RAW_FD_FRAMES, /* allow CAN FD frames (default:off) */ 64 64 CAN_RAW_JOIN_FILTERS, /* all filters must match to trigger */ 65 + CAN_RAW_XL_FRAMES, /* allow CAN XL frames (default:off) */ 65 66 }; 66 67 67 68 #endif /* !_UAPI_CAN_RAW_H */
+1
include/uapi/linux/if_ether.h
··· 138 138 #define ETH_P_LOCALTALK 0x0009 /* Localtalk pseudo type */ 139 139 #define ETH_P_CAN 0x000C /* CAN: Controller Area Network */ 140 140 #define ETH_P_CANFD 0x000D /* CANFD: CAN flexible data rate*/ 141 + #define ETH_P_CANXL 0x000E /* CANXL: eXtended frame Length */ 141 142 #define ETH_P_PPPTALK 0x0010 /* Dummy type for Atalk over PPP*/ 142 143 #define ETH_P_TR_802_2 0x0011 /* 802.2 frames */ 143 144 #define ETH_P_MOBITEX 0x0015 /* Mobitex (kaz@cafe.net) */
+37 -39
net/can/af_can.c
··· 199 199 int can_send(struct sk_buff *skb, int loop) 200 200 { 201 201 struct sk_buff *newskb = NULL; 202 - struct canfd_frame *cfd = (struct canfd_frame *)skb->data; 203 202 struct can_pkg_stats *pkg_stats = dev_net(skb->dev)->can.pkg_stats; 204 203 int err = -EINVAL; 205 204 206 - if (skb->len == CAN_MTU) { 205 + if (can_is_canxl_skb(skb)) { 206 + skb->protocol = htons(ETH_P_CANXL); 207 + } else if (can_is_can_skb(skb)) { 207 208 skb->protocol = htons(ETH_P_CAN); 208 - if (unlikely(cfd->len > CAN_MAX_DLEN)) 209 - goto inval_skb; 210 - } else if (skb->len == CANFD_MTU) { 209 + } else if (can_is_canfd_skb(skb)) { 210 + struct canfd_frame *cfd = (struct canfd_frame *)skb->data; 211 + 211 212 skb->protocol = htons(ETH_P_CANFD); 212 - if (unlikely(cfd->len > CANFD_MAX_DLEN)) 213 - goto inval_skb; 213 + 214 + /* set CAN FD flag for CAN FD frames by default */ 215 + cfd->flags |= CANFD_FDF; 214 216 } else { 215 217 goto inval_skb; 216 218 } 217 219 218 - /* Make sure the CAN frame can pass the selected CAN netdevice. 219 - * As structs can_frame and canfd_frame are similar, we can provide 220 - * CAN FD frames to legacy CAN drivers as long as the length is <= 8 221 - */ 222 - if (unlikely(skb->len > skb->dev->mtu && cfd->len > CAN_MAX_DLEN)) { 220 + /* Make sure the CAN frame can pass the selected CAN netdevice. */ 221 + if (unlikely(skb->len > skb->dev->mtu)) { 223 222 err = -EMSGSIZE; 224 223 goto inval_skb; 225 224 } ··· 677 678 static int can_rcv(struct sk_buff *skb, struct net_device *dev, 678 679 struct packet_type *pt, struct net_device *orig_dev) 679 680 { 680 - struct canfd_frame *cfd = (struct canfd_frame *)skb->data; 681 - 682 - if (unlikely(dev->type != ARPHRD_CAN || skb->len != CAN_MTU)) { 681 + if (unlikely(dev->type != ARPHRD_CAN || (!can_is_can_skb(skb)))) { 683 682 pr_warn_once("PF_CAN: dropped non conform CAN skbuff: dev type %d, len %d\n", 684 683 dev->type, skb->len); 685 - goto free_skb; 686 - } 687 684 688 - /* This check is made separately since cfd->len would be uninitialized if skb->len = 0. */ 689 - if (unlikely(cfd->len > CAN_MAX_DLEN)) { 690 - pr_warn_once("PF_CAN: dropped non conform CAN skbuff: dev type %d, len %d, datalen %d\n", 691 - dev->type, skb->len, cfd->len); 692 - goto free_skb; 685 + kfree_skb(skb); 686 + return NET_RX_DROP; 693 687 } 694 688 695 689 can_receive(skb, dev); 696 690 return NET_RX_SUCCESS; 697 - 698 - free_skb: 699 - kfree_skb(skb); 700 - return NET_RX_DROP; 701 691 } 702 692 703 693 static int canfd_rcv(struct sk_buff *skb, struct net_device *dev, 704 694 struct packet_type *pt, struct net_device *orig_dev) 705 695 { 706 - struct canfd_frame *cfd = (struct canfd_frame *)skb->data; 707 - 708 - if (unlikely(dev->type != ARPHRD_CAN || skb->len != CANFD_MTU)) { 696 + if (unlikely(dev->type != ARPHRD_CAN || (!can_is_canfd_skb(skb)))) { 709 697 pr_warn_once("PF_CAN: dropped non conform CAN FD skbuff: dev type %d, len %d\n", 710 698 dev->type, skb->len); 711 - goto free_skb; 712 - } 713 699 714 - /* This check is made separately since cfd->len would be uninitialized if skb->len = 0. */ 715 - if (unlikely(cfd->len > CANFD_MAX_DLEN)) { 716 - pr_warn_once("PF_CAN: dropped non conform CAN FD skbuff: dev type %d, len %d, datalen %d\n", 717 - dev->type, skb->len, cfd->len); 718 - goto free_skb; 700 + kfree_skb(skb); 701 + return NET_RX_DROP; 719 702 } 720 703 721 704 can_receive(skb, dev); 722 705 return NET_RX_SUCCESS; 706 + } 723 707 724 - free_skb: 725 - kfree_skb(skb); 726 - return NET_RX_DROP; 708 + static int canxl_rcv(struct sk_buff *skb, struct net_device *dev, 709 + struct packet_type *pt, struct net_device *orig_dev) 710 + { 711 + if (unlikely(dev->type != ARPHRD_CAN || (!can_is_canxl_skb(skb)))) { 712 + pr_warn_once("PF_CAN: dropped non conform CAN XL skbuff: dev type %d, len %d\n", 713 + dev->type, skb->len); 714 + 715 + kfree_skb(skb); 716 + return NET_RX_DROP; 717 + } 718 + 719 + can_receive(skb, dev); 720 + return NET_RX_SUCCESS; 727 721 } 728 722 729 723 /* af_can protocol functions */ ··· 843 851 .func = canfd_rcv, 844 852 }; 845 853 854 + static struct packet_type canxl_packet __read_mostly = { 855 + .type = cpu_to_be16(ETH_P_CANXL), 856 + .func = canxl_rcv, 857 + }; 858 + 846 859 static const struct net_proto_family can_family_ops = { 847 860 .family = PF_CAN, 848 861 .create = can_create, ··· 887 890 888 891 dev_add_pack(&can_packet); 889 892 dev_add_pack(&canfd_packet); 893 + dev_add_pack(&canxl_packet); 890 894 891 895 return 0; 892 896
+7 -2
net/can/bcm.c
··· 648 648 return; 649 649 650 650 /* make sure to handle the correct frame type (CAN / CAN FD) */ 651 - if (skb->len != op->cfsiz) 652 - return; 651 + if (op->flags & CAN_FD_FRAME) { 652 + if (!can_is_canfd_skb(skb)) 653 + return; 654 + } else { 655 + if (!can_is_can_skb(skb)) 656 + return; 657 + } 653 658 654 659 /* disable timeout */ 655 660 hrtimer_cancel(&op->timer);
+2 -2
net/can/gw.c
··· 463 463 464 464 /* process strictly Classic CAN or CAN FD frames */ 465 465 if (gwj->flags & CGW_FLAGS_CAN_FD) { 466 - if (skb->len != CANFD_MTU) 466 + if (!can_is_canfd_skb(skb)) 467 467 return; 468 468 } else { 469 - if (skb->len != CAN_MTU) 469 + if (!can_is_can_skb(skb)) 470 470 return; 471 471 } 472 472
+1 -1
net/can/isotp.c
··· 669 669 if (cf->len <= CAN_MAX_DLEN) { 670 670 isotp_rcv_sf(sk, cf, SF_PCI_SZ4 + ae, skb, sf_dl); 671 671 } else { 672 - if (skb->len == CANFD_MTU) { 672 + if (can_is_canfd_skb(skb)) { 673 673 /* We have a CAN FD frame and CAN_DL is greater than 8: 674 674 * Only frames with the SF_DL == 0 ESC value are valid. 675 675 *
+4
net/can/j1939/main.c
··· 42 42 struct j1939_sk_buff_cb *skcb, *iskcb; 43 43 struct can_frame *cf; 44 44 45 + /* make sure we only get Classical CAN frames */ 46 + if (!can_is_can_skb(iskb)) 47 + return; 48 + 45 49 /* create a copy of the skb 46 50 * j1939 only delivers the real data bytes, 47 51 * the header goes into sockaddr.
+62 -24
net/can/raw.c
··· 50 50 #include <linux/skbuff.h> 51 51 #include <linux/can.h> 52 52 #include <linux/can/core.h> 53 + #include <linux/can/dev.h> /* for can_is_canxl_dev_mtu() */ 53 54 #include <linux/can/skb.h> 54 55 #include <linux/can/raw.h> 55 56 #include <net/sock.h> ··· 88 87 int loopback; 89 88 int recv_own_msgs; 90 89 int fd_frames; 90 + int xl_frames; 91 91 int join_filters; 92 92 int count; /* number of active filters */ 93 93 struct can_filter dfilter; /* default/single filter */ ··· 131 129 if (!ro->recv_own_msgs && oskb->sk == sk) 132 130 return; 133 131 134 - /* do not pass non-CAN2.0 frames to a legacy socket */ 135 - if (!ro->fd_frames && oskb->len != CAN_MTU) 132 + /* make sure to not pass oversized frames to the socket */ 133 + if ((can_is_canfd_skb(oskb) && !ro->fd_frames && !ro->xl_frames) || 134 + (can_is_canxl_skb(oskb) && !ro->xl_frames)) 136 135 return; 137 136 138 137 /* eliminate multiple filter matches for the same skb */ 139 138 if (this_cpu_ptr(ro->uniq)->skb == oskb && 140 139 this_cpu_ptr(ro->uniq)->skbcnt == can_skb_prv(oskb)->skbcnt) { 141 - if (ro->join_filters) { 142 - this_cpu_inc(ro->uniq->join_rx_count); 143 - /* drop frame until all enabled filters matched */ 144 - if (this_cpu_ptr(ro->uniq)->join_rx_count < ro->count) 145 - return; 146 - } else { 140 + if (!ro->join_filters) 147 141 return; 148 - } 142 + 143 + this_cpu_inc(ro->uniq->join_rx_count); 144 + /* drop frame until all enabled filters matched */ 145 + if (this_cpu_ptr(ro->uniq)->join_rx_count < ro->count) 146 + return; 149 147 } else { 150 148 this_cpu_ptr(ro->uniq)->skb = oskb; 151 149 this_cpu_ptr(ro->uniq)->skbcnt = can_skb_prv(oskb)->skbcnt; ··· 348 346 ro->loopback = 1; 349 347 ro->recv_own_msgs = 0; 350 348 ro->fd_frames = 0; 349 + ro->xl_frames = 0; 351 350 ro->join_filters = 0; 352 351 353 352 /* alloc_percpu provides zero'ed memory */ ··· 672 669 673 670 break; 674 671 672 + case CAN_RAW_XL_FRAMES: 673 + if (optlen != sizeof(ro->xl_frames)) 674 + return -EINVAL; 675 + 676 + if (copy_from_sockptr(&ro->xl_frames, optval, optlen)) 677 + return -EFAULT; 678 + 679 + break; 680 + 675 681 case CAN_RAW_JOIN_FILTERS: 676 682 if (optlen != sizeof(ro->join_filters)) 677 683 return -EINVAL; ··· 763 751 val = &ro->fd_frames; 764 752 break; 765 753 754 + case CAN_RAW_XL_FRAMES: 755 + if (len > sizeof(int)) 756 + len = sizeof(int); 757 + val = &ro->xl_frames; 758 + break; 759 + 766 760 case CAN_RAW_JOIN_FILTERS: 767 761 if (len > sizeof(int)) 768 762 len = sizeof(int); ··· 794 776 struct sk_buff *skb; 795 777 struct net_device *dev; 796 778 int ifindex; 797 - int err; 779 + int err = -EINVAL; 780 + 781 + /* check for valid CAN frame sizes */ 782 + if (size < CANXL_HDR_SIZE + CANXL_MIN_DLEN || size > CANXL_MTU) 783 + return -EINVAL; 798 784 799 785 if (msg->msg_name) { 800 786 DECLARE_SOCKADDR(struct sockaddr_can *, addr, msg->msg_name); ··· 818 796 if (!dev) 819 797 return -ENXIO; 820 798 821 - err = -EINVAL; 822 - if (ro->fd_frames && dev->mtu == CANFD_MTU) { 823 - if (unlikely(size != CANFD_MTU && size != CAN_MTU)) 824 - goto put_dev; 825 - } else { 826 - if (unlikely(size != CAN_MTU)) 827 - goto put_dev; 828 - } 829 - 830 799 skb = sock_alloc_send_skb(sk, size + sizeof(struct can_skb_priv), 831 800 msg->msg_flags & MSG_DONTWAIT, &err); 832 801 if (!skb) ··· 827 814 can_skb_prv(skb)->ifindex = dev->ifindex; 828 815 can_skb_prv(skb)->skbcnt = 0; 829 816 817 + /* fill the skb before testing for valid CAN frames */ 830 818 err = memcpy_from_msg(skb_put(skb, size), msg, size); 831 819 if (err < 0) 832 820 goto free_skb; 821 + 822 + err = -EINVAL; 823 + if (ro->xl_frames && can_is_canxl_dev_mtu(dev->mtu)) { 824 + /* CAN XL, CAN FD and Classical CAN */ 825 + if (!can_is_canxl_skb(skb) && !can_is_canfd_skb(skb) && 826 + !can_is_can_skb(skb)) 827 + goto free_skb; 828 + } else if (ro->fd_frames && dev->mtu == CANFD_MTU) { 829 + /* CAN FD and Classical CAN */ 830 + if (!can_is_canfd_skb(skb) && !can_is_can_skb(skb)) 831 + goto free_skb; 832 + } else { 833 + /* Classical CAN */ 834 + if (!can_is_can_skb(skb)) 835 + goto free_skb; 836 + } 833 837 834 838 sockcm_init(&sockc, sk); 835 839 if (msg->msg_controllen) { ··· 972 942 973 943 pr_info("can: raw protocol\n"); 974 944 975 - err = can_proto_register(&raw_can_proto); 976 - if (err < 0) 977 - pr_err("can: registration of raw protocol failed\n"); 978 - else 979 - register_netdevice_notifier(&canraw_notifier); 945 + err = register_netdevice_notifier(&canraw_notifier); 946 + if (err) 947 + return err; 980 948 949 + err = can_proto_register(&raw_can_proto); 950 + if (err < 0) { 951 + pr_err("can: registration of raw protocol failed\n"); 952 + goto register_proto_failed; 953 + } 954 + 955 + return 0; 956 + 957 + register_proto_failed: 958 + unregister_netdevice_notifier(&canraw_notifier); 981 959 return err; 982 960 } 983 961