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

Marc Kleine-Budde says:

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

The first 5 patches are by me and update various CAN DT bindings.

Eric Dumazet's patch for the CAN GW replaces a costly
synchronize_rcu() by a call_rcu().

The next 2 patches by me enhance the CAN bit rate handling, the bit
rate checking is simplified and the arguments and local variables of
functions are marked as const.

A patch by me for the kvaser_usb driver removes a redundant variable.

The next patch by me lets the c_can driver use the default ethtool
drvinfo.

Minghao Chi's patch for the softing driver removes a redundant
variable.

Srinivas Neeli contributes an enhancement for the xilinx_can NAPI poll
function.

Vincent Mailhol's patch for the etas_es58x driver converts to
BITS_PER_TYPE() from of manual calculation.

The next 23 patches target the mcp251xfd driver and are by me. The
first 15 patches, add support for the internal PLL, which includes
simplifying runtime PM handling, better chip detection and error
handling after wakeup, and the PLL handling. The last 8 patches
prepare the driver to support multiple RX-FIFOs and runtime
configurable RX/TX rings. The actual runtime ring configuration via
ethtool will be added in a later patch series.
====================

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

+480 -231
+3
Documentation/devicetree/bindings/net/can/allwinner,sun4i-a10-can.yaml
··· 10 10 - Chen-Yu Tsai <wens@csie.org> 11 11 - Maxime Ripard <mripard@kernel.org> 12 12 13 + allOf: 14 + - $ref: can-controller.yaml# 15 + 13 16 properties: 14 17 compatible: 15 18 oneOf:
+6 -3
Documentation/devicetree/bindings/net/can/bosch,m_can.yaml
··· 9 9 description: Bosch MCAN controller for CAN bus 10 10 11 11 maintainers: 12 - - Sriram Dash <sriram.dash@samsung.com> 12 + - Chandrasekar Ramakrishnan <rcsekar@samsung.com> 13 + 14 + allOf: 15 + - $ref: can-controller.yaml# 13 16 14 17 properties: 15 18 compatible: ··· 69 66 M_CAN includes the following elements according to user manual: 70 67 11-bit Filter 0-128 elements / 0-128 words 71 68 29-bit Filter 0-64 elements / 0-128 words 72 - Rx FIFO 0 0-64 elements / 0-1152 words 73 - Rx FIFO 1 0-64 elements / 0-1152 words 69 + Rx FIFO 0 0-64 elements / 0-1152 words 70 + Rx FIFO 1 0-64 elements / 0-1152 words 74 71 Rx Buffers 0-64 elements / 0-1152 words 75 72 Tx Event FIFO 0-32 elements / 0-64 words 76 73 Tx Buffers 0-32 elements / 0-576 words
+3
Documentation/devicetree/bindings/net/can/microchip,mcp251xfd.yaml
··· 11 11 maintainers: 12 12 - Marc Kleine-Budde <mkl@pengutronix.de> 13 13 14 + allOf: 15 + - $ref: can-controller.yaml# 16 + 14 17 properties: 15 18 compatible: 16 19 oneOf:
-9
drivers/net/can/c_can/c_can_ethtool.c
··· 11 11 12 12 #include "c_can.h" 13 13 14 - static void c_can_get_drvinfo(struct net_device *netdev, 15 - struct ethtool_drvinfo *info) 16 - { 17 - struct c_can_priv *priv = netdev_priv(netdev); 18 - strscpy(info->driver, "c_can", sizeof(info->driver)); 19 - strscpy(info->bus_info, dev_name(priv->device), sizeof(info->bus_info)); 20 - } 21 - 22 14 static void c_can_get_ringparam(struct net_device *netdev, 23 15 struct ethtool_ringparam *ring, 24 16 struct kernel_ethtool_ringparam *kernel_ring, ··· 25 33 } 26 34 27 35 static const struct ethtool_ops c_can_ethtool_ops = { 28 - .get_drvinfo = c_can_get_drvinfo, 29 36 .get_ringparam = c_can_get_ringparam, 30 37 }; 31 38
+8 -12
drivers/net/can/dev/bittiming.c
··· 24 24 */ 25 25 static int 26 26 can_update_sample_point(const struct can_bittiming_const *btc, 27 - unsigned int sample_point_nominal, unsigned int tseg, 27 + const unsigned int sample_point_nominal, const unsigned int tseg, 28 28 unsigned int *tseg1_ptr, unsigned int *tseg2_ptr, 29 29 unsigned int *sample_point_error_ptr) 30 30 { ··· 63 63 return best_sample_point; 64 64 } 65 65 66 - int can_calc_bittiming(struct net_device *dev, struct can_bittiming *bt, 66 + int can_calc_bittiming(const struct net_device *dev, struct can_bittiming *bt, 67 67 const struct can_bittiming_const *btc) 68 68 { 69 69 struct can_priv *priv = netdev_priv(dev); ··· 208 208 * prescaler value brp. You can find more information in the header 209 209 * file linux/can/netlink.h. 210 210 */ 211 - static int can_fixup_bittiming(struct net_device *dev, struct can_bittiming *bt, 211 + static int can_fixup_bittiming(const struct net_device *dev, struct can_bittiming *bt, 212 212 const struct can_bittiming_const *btc) 213 213 { 214 - struct can_priv *priv = netdev_priv(dev); 214 + const struct can_priv *priv = netdev_priv(dev); 215 215 unsigned int tseg1, alltseg; 216 216 u64 brp64; 217 217 ··· 244 244 245 245 /* Checks the validity of predefined bitrate settings */ 246 246 static int 247 - can_validate_bitrate(struct net_device *dev, struct can_bittiming *bt, 247 + can_validate_bitrate(const struct net_device *dev, const struct can_bittiming *bt, 248 248 const u32 *bitrate_const, 249 249 const unsigned int bitrate_const_cnt) 250 250 { 251 - struct can_priv *priv = netdev_priv(dev); 252 251 unsigned int i; 253 252 254 253 for (i = 0; i < bitrate_const_cnt; i++) { 255 254 if (bt->bitrate == bitrate_const[i]) 256 - break; 255 + return 0; 257 256 } 258 257 259 - if (i >= priv->bitrate_const_cnt) 260 - return -EINVAL; 261 - 262 - return 0; 258 + return -EINVAL; 263 259 } 264 260 265 - int can_get_bittiming(struct net_device *dev, struct can_bittiming *bt, 261 + int can_get_bittiming(const struct net_device *dev, struct can_bittiming *bt, 266 262 const struct can_bittiming_const *btc, 267 263 const u32 *bitrate_const, 268 264 const unsigned int bitrate_const_cnt)
+1 -4
drivers/net/can/softing/softing_main.c
··· 392 392 393 393 static int softing_netdev_stop(struct net_device *ndev) 394 394 { 395 - int ret; 396 - 397 395 netif_stop_queue(ndev); 398 396 399 397 /* softing cycle does close_candev() */ 400 - ret = softing_startstop(ndev, 0); 401 - return ret; 398 + return softing_startstop(ndev, 0); 402 399 } 403 400 404 401 static int softing_candev_set_mode(struct net_device *ndev, enum can_mode mode)
+2 -2
drivers/net/can/spi/mcp251xfd/mcp251xfd-chip-fifo.c
··· 78 78 if (err) 79 79 return err; 80 80 81 - /* FIFO 1 - TX */ 81 + /* TX FIFO */ 82 82 val = FIELD_PREP(MCP251XFD_REG_FIFOCON_FSIZE_MASK, 83 83 tx_ring->obj_num - 1) | 84 84 MCP251XFD_REG_FIFOCON_TXEN | ··· 99 99 MCP251XFD_REG_FIFOCON_TXAT_UNLIMITED); 100 100 101 101 err = regmap_write(priv->map_reg, 102 - MCP251XFD_REG_FIFOCON(MCP251XFD_TX_FIFO), 102 + MCP251XFD_REG_FIFOCON(priv->tx->fifo_nr), 103 103 val); 104 104 if (err) 105 105 return err;
+250 -96
drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c
··· 112 112 return "<unknown>"; 113 113 } 114 114 115 + static const char * 116 + mcp251xfd_get_osc_str(const u32 osc, const u32 osc_reference) 117 + { 118 + switch (~osc & osc_reference & 119 + (MCP251XFD_REG_OSC_OSCRDY | MCP251XFD_REG_OSC_PLLRDY)) { 120 + case MCP251XFD_REG_OSC_PLLRDY: 121 + return "PLL"; 122 + case MCP251XFD_REG_OSC_OSCRDY: 123 + return "Oscillator"; 124 + case MCP251XFD_REG_OSC_PLLRDY | MCP251XFD_REG_OSC_OSCRDY: 125 + return "Oscillator/PLL"; 126 + } 127 + 128 + return "<unknown>"; 129 + } 130 + 115 131 static inline int mcp251xfd_vdd_enable(const struct mcp251xfd_priv *priv) 116 132 { 117 133 if (!priv->reg_vdd) ··· 194 178 return 0; 195 179 } 196 180 181 + static inline bool mcp251xfd_reg_invalid(u32 reg) 182 + { 183 + return reg == 0x0 || reg == 0xffffffff; 184 + } 185 + 197 186 static inline int 198 187 mcp251xfd_chip_get_mode(const struct mcp251xfd_priv *priv, u8 *mode) 199 188 { ··· 218 197 __mcp251xfd_chip_set_mode(const struct mcp251xfd_priv *priv, 219 198 const u8 mode_req, bool nowait) 220 199 { 221 - u32 con, con_reqop; 200 + u32 con = 0, con_reqop, osc = 0; 201 + u8 mode; 222 202 int err; 223 203 224 204 con_reqop = FIELD_PREP(MCP251XFD_REG_CON_REQOP_MASK, mode_req); 225 205 err = regmap_update_bits(priv->map_reg, MCP251XFD_REG_CON, 226 206 MCP251XFD_REG_CON_REQOP_MASK, con_reqop); 227 - if (err) 207 + if (err == -EBADMSG) { 208 + netdev_err(priv->ndev, 209 + "Failed to set Requested Operation Mode.\n"); 210 + 211 + return -ENODEV; 212 + } else if (err) { 228 213 return err; 214 + } 229 215 230 216 if (mode_req == MCP251XFD_REG_CON_MODE_SLEEP || nowait) 231 217 return 0; 232 218 233 219 err = regmap_read_poll_timeout(priv->map_reg, MCP251XFD_REG_CON, con, 220 + !mcp251xfd_reg_invalid(con) && 234 221 FIELD_GET(MCP251XFD_REG_CON_OPMOD_MASK, 235 222 con) == mode_req, 236 223 MCP251XFD_POLL_SLEEP_US, 237 224 MCP251XFD_POLL_TIMEOUT_US); 238 - if (err) { 239 - u8 mode = FIELD_GET(MCP251XFD_REG_CON_OPMOD_MASK, con); 240 - 241 - netdev_err(priv->ndev, 242 - "Controller failed to enter mode %s Mode (%u) and stays in %s Mode (%u).\n", 243 - mcp251xfd_get_mode_str(mode_req), mode_req, 244 - mcp251xfd_get_mode_str(mode), mode); 225 + if (err != -ETIMEDOUT && err != -EBADMSG) 245 226 return err; 227 + 228 + /* Ignore return value. 229 + * Print below error messages, even if this fails. 230 + */ 231 + regmap_read(priv->map_reg, MCP251XFD_REG_OSC, &osc); 232 + 233 + if (mcp251xfd_reg_invalid(con)) { 234 + netdev_err(priv->ndev, 235 + "Failed to read CAN Control Register (con=0x%08x, osc=0x%08x).\n", 236 + con, osc); 237 + 238 + return -ENODEV; 246 239 } 247 240 248 - return 0; 241 + mode = FIELD_GET(MCP251XFD_REG_CON_OPMOD_MASK, con); 242 + netdev_err(priv->ndev, 243 + "Controller failed to enter mode %s Mode (%u) and stays in %s Mode (%u) (con=0x%08x, osc=0x%08x).\n", 244 + mcp251xfd_get_mode_str(mode_req), mode_req, 245 + mcp251xfd_get_mode_str(mode), mode, 246 + con, osc); 247 + 248 + return -ETIMEDOUT; 249 249 } 250 250 251 251 static inline int ··· 283 241 return __mcp251xfd_chip_set_mode(priv, mode_req, true); 284 242 } 285 243 286 - static inline bool mcp251xfd_osc_invalid(u32 reg) 244 + static int 245 + mcp251xfd_chip_wait_for_osc_ready(const struct mcp251xfd_priv *priv, 246 + u32 osc_reference, u32 osc_mask) 287 247 { 288 - return reg == 0x0 || reg == 0xffffffff; 248 + u32 osc; 249 + int err; 250 + 251 + err = regmap_read_poll_timeout(priv->map_reg, MCP251XFD_REG_OSC, osc, 252 + !mcp251xfd_reg_invalid(osc) && 253 + (osc & osc_mask) == osc_reference, 254 + MCP251XFD_OSC_STAB_SLEEP_US, 255 + MCP251XFD_OSC_STAB_TIMEOUT_US); 256 + if (err != -ETIMEDOUT) 257 + return err; 258 + 259 + if (mcp251xfd_reg_invalid(osc)) { 260 + netdev_err(priv->ndev, 261 + "Failed to read Oscillator Configuration Register (osc=0x%08x).\n", 262 + osc); 263 + return -ENODEV; 264 + } 265 + 266 + netdev_err(priv->ndev, 267 + "Timeout waiting for %s ready (osc=0x%08x, osc_reference=0x%08x, osc_mask=0x%08x).\n", 268 + mcp251xfd_get_osc_str(osc, osc_reference), 269 + osc, osc_reference, osc_mask); 270 + 271 + return -ETIMEDOUT; 289 272 } 290 273 291 - static int mcp251xfd_chip_clock_enable(const struct mcp251xfd_priv *priv) 274 + static int mcp251xfd_chip_wake(const struct mcp251xfd_priv *priv) 292 275 { 293 276 u32 osc, osc_reference, osc_mask; 294 277 int err; 295 278 296 - /* Set Power On Defaults for "Clock Output Divisor" and remove 297 - * "Oscillator Disable" bit. 279 + /* For normal sleep on MCP2517FD and MCP2518FD, clearing 280 + * "Oscillator Disable" will wake the chip. For low power mode 281 + * on MCP2518FD, asserting the chip select will wake the 282 + * chip. Writing to the Oscillator register will wake it in 283 + * both cases. 298 284 */ 299 285 osc = FIELD_PREP(MCP251XFD_REG_OSC_CLKODIV_MASK, 300 286 MCP251XFD_REG_OSC_CLKODIV_10); 301 - osc_reference = MCP251XFD_REG_OSC_OSCRDY; 302 - osc_mask = MCP251XFD_REG_OSC_OSCRDY | MCP251XFD_REG_OSC_PLLRDY; 303 287 304 - /* Note: 305 - * 306 - * If the controller is in Sleep Mode the following write only 288 + /* We cannot check for the PLL ready bit (either set or 289 + * unset), as the PLL might be enabled. This can happen if the 290 + * system reboots, while the mcp251xfd stays powered. 291 + */ 292 + osc_reference = MCP251XFD_REG_OSC_OSCRDY; 293 + osc_mask = MCP251XFD_REG_OSC_OSCRDY; 294 + 295 + /* If the controller is in Sleep Mode the following write only 307 296 * removes the "Oscillator Disable" bit and powers it up. All 308 297 * other bits are unaffected. 309 298 */ ··· 342 269 if (err) 343 270 return err; 344 271 345 - /* Wait for "Oscillator Ready" bit */ 346 - err = regmap_read_poll_timeout(priv->map_reg, MCP251XFD_REG_OSC, osc, 347 - (osc & osc_mask) == osc_reference, 348 - MCP251XFD_OSC_STAB_SLEEP_US, 349 - MCP251XFD_OSC_STAB_TIMEOUT_US); 350 - if (mcp251xfd_osc_invalid(osc)) { 351 - netdev_err(priv->ndev, 352 - "Failed to detect %s (osc=0x%08x).\n", 353 - mcp251xfd_get_model_str(priv), osc); 354 - return -ENODEV; 355 - } else if (err == -ETIMEDOUT) { 356 - netdev_err(priv->ndev, 357 - "Timeout waiting for Oscillator Ready (osc=0x%08x, osc_reference=0x%08x)\n", 358 - osc, osc_reference); 359 - return -ETIMEDOUT; 272 + /* Sometimes the PLL is stuck enabled, the controller never 273 + * sets the OSC Ready bit, and we get an -ETIMEDOUT. Our 274 + * caller takes care of retry. 275 + */ 276 + return mcp251xfd_chip_wait_for_osc_ready(priv, osc_reference, osc_mask); 277 + } 278 + 279 + static inline int mcp251xfd_chip_sleep(const struct mcp251xfd_priv *priv) 280 + { 281 + if (priv->pll_enable) { 282 + u32 osc; 283 + int err; 284 + 285 + /* Turn off PLL */ 286 + osc = FIELD_PREP(MCP251XFD_REG_OSC_CLKODIV_MASK, 287 + MCP251XFD_REG_OSC_CLKODIV_10); 288 + err = regmap_write(priv->map_reg, MCP251XFD_REG_OSC, osc); 289 + if (err) 290 + netdev_err(priv->ndev, 291 + "Failed to disable PLL.\n"); 292 + 293 + priv->spi->max_speed_hz = priv->spi_max_speed_hz_slow; 360 294 } 361 295 362 - return err; 296 + return mcp251xfd_chip_set_mode(priv, MCP251XFD_REG_CON_MODE_SLEEP); 363 297 } 364 298 365 299 static int mcp251xfd_chip_softreset_do(const struct mcp251xfd_priv *priv) ··· 374 294 const __be16 cmd = mcp251xfd_cmd_reset(); 375 295 int err; 376 296 377 - /* The Set Mode and SPI Reset command only seems to works if 378 - * the controller is not in Sleep Mode. 297 + /* The Set Mode and SPI Reset command only works if the 298 + * controller is not in Sleep Mode. 379 299 */ 380 - err = mcp251xfd_chip_clock_enable(priv); 300 + err = mcp251xfd_chip_wake(priv); 381 301 if (err) 382 302 return err; 383 303 ··· 391 311 392 312 static int mcp251xfd_chip_softreset_check(const struct mcp251xfd_priv *priv) 393 313 { 394 - u32 osc, osc_reference; 314 + u32 osc_reference, osc_mask; 395 315 u8 mode; 396 316 int err; 317 + 318 + /* Check for reset defaults of OSC reg. 319 + * This will take care of stabilization period. 320 + */ 321 + osc_reference = MCP251XFD_REG_OSC_OSCRDY | 322 + FIELD_PREP(MCP251XFD_REG_OSC_CLKODIV_MASK, 323 + MCP251XFD_REG_OSC_CLKODIV_10); 324 + osc_mask = osc_reference | MCP251XFD_REG_OSC_PLLRDY; 325 + err = mcp251xfd_chip_wait_for_osc_ready(priv, osc_reference, osc_mask); 326 + if (err) 327 + return err; 397 328 398 329 err = mcp251xfd_chip_get_mode(priv, &mode); 399 330 if (err) ··· 414 323 netdev_info(priv->ndev, 415 324 "Controller not in Config Mode after reset, but in %s Mode (%u).\n", 416 325 mcp251xfd_get_mode_str(mode), mode); 417 - return -ETIMEDOUT; 418 - } 419 - 420 - osc_reference = MCP251XFD_REG_OSC_OSCRDY | 421 - FIELD_PREP(MCP251XFD_REG_OSC_CLKODIV_MASK, 422 - MCP251XFD_REG_OSC_CLKODIV_10); 423 - 424 - /* check reset defaults of OSC reg */ 425 - err = regmap_read(priv->map_reg, MCP251XFD_REG_OSC, &osc); 426 - if (err) 427 - return err; 428 - 429 - if (osc != osc_reference) { 430 - netdev_info(priv->ndev, 431 - "Controller failed to reset. osc=0x%08x, reference value=0x%08x.\n", 432 - osc, osc_reference); 433 326 return -ETIMEDOUT; 434 327 } 435 328 ··· 449 374 450 375 static int mcp251xfd_chip_clock_init(const struct mcp251xfd_priv *priv) 451 376 { 452 - u32 osc; 377 + u32 osc, osc_reference, osc_mask; 453 378 int err; 454 379 455 380 /* Activate Low Power Mode on Oscillator Disable. This only ··· 459 384 osc = MCP251XFD_REG_OSC_LPMEN | 460 385 FIELD_PREP(MCP251XFD_REG_OSC_CLKODIV_MASK, 461 386 MCP251XFD_REG_OSC_CLKODIV_10); 387 + osc_reference = MCP251XFD_REG_OSC_OSCRDY; 388 + osc_mask = MCP251XFD_REG_OSC_OSCRDY | MCP251XFD_REG_OSC_PLLRDY; 389 + 390 + if (priv->pll_enable) { 391 + osc |= MCP251XFD_REG_OSC_PLLEN; 392 + osc_reference |= MCP251XFD_REG_OSC_PLLRDY; 393 + } 394 + 462 395 err = regmap_write(priv->map_reg, MCP251XFD_REG_OSC, osc); 463 396 if (err) 464 397 return err; 465 398 399 + err = mcp251xfd_chip_wait_for_osc_ready(priv, osc_reference, osc_mask); 400 + if (err) 401 + return err; 402 + 403 + priv->spi->max_speed_hz = priv->spi_max_speed_hz_fast; 404 + 405 + return 0; 406 + } 407 + 408 + static int mcp251xfd_chip_timestamp_init(const struct mcp251xfd_priv *priv) 409 + { 466 410 /* Set Time Base Counter Prescaler to 1. 467 411 * 468 412 * This means an overflow of the 32 bit Time Base Counter ··· 722 628 return regmap_write(priv->map_reg, MCP251XFD_REG_CRC, 0); 723 629 } 724 630 725 - static int mcp251xfd_chip_stop(struct mcp251xfd_priv *priv, 726 - const enum can_state state) 631 + static void mcp251xfd_chip_stop(struct mcp251xfd_priv *priv, 632 + const enum can_state state) 727 633 { 728 634 priv->can.state = state; 729 635 730 636 mcp251xfd_chip_interrupts_disable(priv); 731 637 mcp251xfd_chip_rx_int_disable(priv); 732 - return mcp251xfd_chip_set_mode(priv, MCP251XFD_REG_CON_MODE_SLEEP); 638 + mcp251xfd_chip_sleep(priv); 733 639 } 734 640 735 641 static int mcp251xfd_chip_start(struct mcp251xfd_priv *priv) ··· 741 647 goto out_chip_stop; 742 648 743 649 err = mcp251xfd_chip_clock_init(priv); 650 + if (err) 651 + goto out_chip_stop; 652 + 653 + err = mcp251xfd_chip_timestamp_init(priv); 744 654 if (err) 745 655 goto out_chip_stop; 746 656 ··· 760 662 if (err) 761 663 goto out_chip_stop; 762 664 763 - mcp251xfd_ring_init(priv); 665 + err = mcp251xfd_ring_init(priv); 666 + if (err) 667 + goto out_chip_stop; 764 668 765 669 err = mcp251xfd_chip_fifo_init(priv); 766 670 if (err) ··· 1384 1284 return 0; 1385 1285 } 1386 1286 1287 + static int mcp251xfd_read_regs_status(struct mcp251xfd_priv *priv) 1288 + { 1289 + const int val_bytes = regmap_get_val_bytes(priv->map_reg); 1290 + size_t len; 1291 + 1292 + if (priv->rx_ring_num == 1) 1293 + len = sizeof(priv->regs_status.intf); 1294 + else 1295 + len = sizeof(priv->regs_status); 1296 + 1297 + return regmap_bulk_read(priv->map_reg, MCP251XFD_REG_INT, 1298 + &priv->regs_status, len / val_bytes); 1299 + } 1300 + 1387 1301 #define mcp251xfd_handle(priv, irq, ...) \ 1388 1302 ({ \ 1389 1303 struct mcp251xfd_priv *_priv = (priv); \ ··· 1414 1300 static irqreturn_t mcp251xfd_irq(int irq, void *dev_id) 1415 1301 { 1416 1302 struct mcp251xfd_priv *priv = dev_id; 1417 - const int val_bytes = regmap_get_val_bytes(priv->map_reg); 1418 1303 irqreturn_t handled = IRQ_NONE; 1419 1304 int err; 1420 1305 ··· 1425 1312 if (!rx_pending) 1426 1313 break; 1427 1314 1315 + /* Assume 1st RX-FIFO pending, if other FIFOs 1316 + * are pending the main IRQ handler will take 1317 + * care. 1318 + */ 1319 + priv->regs_status.rxif = BIT(priv->rx[0]->fifo_nr); 1428 1320 err = mcp251xfd_handle(priv, rxif); 1429 1321 if (err) 1430 1322 goto out_fail; 1431 1323 1432 1324 handled = IRQ_HANDLED; 1433 - } while (1); 1325 + 1326 + /* We don't know which RX-FIFO is pending, but only 1327 + * handle the 1st RX-FIFO. Leave loop here if we have 1328 + * more than 1 RX-FIFO to avoid starvation. 1329 + */ 1330 + } while (priv->rx_ring_num == 1); 1434 1331 1435 1332 do { 1436 1333 u32 intf_pending, intf_pending_clearable; 1437 1334 bool set_normal_mode = false; 1438 1335 1439 - err = regmap_bulk_read(priv->map_reg, MCP251XFD_REG_INT, 1440 - &priv->regs_status, 1441 - sizeof(priv->regs_status) / 1442 - val_bytes); 1336 + err = mcp251xfd_read_regs_status(priv); 1443 1337 if (err) 1444 1338 goto out_fail; 1445 1339 ··· 1741 1621 } 1742 1622 1743 1623 static int 1744 - mcp251xfd_register_get_dev_id(const struct mcp251xfd_priv *priv, 1745 - u32 *dev_id, u32 *effective_speed_hz) 1624 + mcp251xfd_register_get_dev_id(const struct mcp251xfd_priv *priv, u32 *dev_id, 1625 + u32 *effective_speed_hz_slow, 1626 + u32 *effective_speed_hz_fast) 1746 1627 { 1747 1628 struct mcp251xfd_map_buf_nocrc *buf_rx; 1748 1629 struct mcp251xfd_map_buf_nocrc *buf_tx; ··· 1762 1641 1763 1642 xfer[0].tx_buf = buf_tx; 1764 1643 xfer[0].len = sizeof(buf_tx->cmd); 1644 + xfer[0].speed_hz = priv->spi_max_speed_hz_slow; 1765 1645 xfer[1].rx_buf = buf_rx->data; 1766 1646 xfer[1].len = sizeof(dev_id); 1647 + xfer[1].speed_hz = priv->spi_max_speed_hz_fast; 1767 1648 1768 1649 mcp251xfd_spi_cmd_read_nocrc(&buf_tx->cmd, MCP251XFD_REG_DEVID); 1650 + 1769 1651 err = spi_sync_transfer(priv->spi, xfer, ARRAY_SIZE(xfer)); 1770 1652 if (err) 1771 1653 goto out_kfree_buf_tx; 1772 1654 1773 1655 *dev_id = be32_to_cpup((__be32 *)buf_rx->data); 1774 - *effective_speed_hz = xfer->effective_speed_hz; 1656 + *effective_speed_hz_slow = xfer[0].effective_speed_hz; 1657 + *effective_speed_hz_fast = xfer[1].effective_speed_hz; 1775 1658 1776 1659 out_kfree_buf_tx: 1777 1660 kfree(buf_tx); ··· 1791 1666 static int 1792 1667 mcp251xfd_register_done(const struct mcp251xfd_priv *priv) 1793 1668 { 1794 - u32 dev_id, effective_speed_hz; 1669 + u32 dev_id, effective_speed_hz_slow, effective_speed_hz_fast; 1670 + unsigned long clk_rate; 1795 1671 int err; 1796 1672 1797 1673 err = mcp251xfd_register_get_dev_id(priv, &dev_id, 1798 - &effective_speed_hz); 1674 + &effective_speed_hz_slow, 1675 + &effective_speed_hz_fast); 1799 1676 if (err) 1800 1677 return err; 1801 1678 1679 + clk_rate = clk_get_rate(priv->clk); 1680 + 1802 1681 netdev_info(priv->ndev, 1803 - "%s rev%lu.%lu (%cRX_INT %cMAB_NO_WARN %cCRC_REG %cCRC_RX %cCRC_TX %cECC %cHD c:%u.%02uMHz m:%u.%02uMHz r:%u.%02uMHz e:%u.%02uMHz) successfully initialized.\n", 1682 + "%s rev%lu.%lu (%cRX_INT %cPLL %cMAB_NO_WARN %cCRC_REG %cCRC_RX %cCRC_TX %cECC %cHD o:%lu.%02luMHz c:%u.%02uMHz m:%u.%02uMHz rs:%u.%02uMHz es:%u.%02uMHz rf:%u.%02uMHz ef:%u.%02uMHz) successfully initialized.\n", 1804 1683 mcp251xfd_get_model_str(priv), 1805 1684 FIELD_GET(MCP251XFD_REG_DEVID_ID_MASK, dev_id), 1806 1685 FIELD_GET(MCP251XFD_REG_DEVID_REV_MASK, dev_id), 1807 1686 priv->rx_int ? '+' : '-', 1687 + priv->pll_enable ? '+' : '-', 1808 1688 MCP251XFD_QUIRK_ACTIVE(MAB_NO_WARN), 1809 1689 MCP251XFD_QUIRK_ACTIVE(CRC_REG), 1810 1690 MCP251XFD_QUIRK_ACTIVE(CRC_RX), 1811 1691 MCP251XFD_QUIRK_ACTIVE(CRC_TX), 1812 1692 MCP251XFD_QUIRK_ACTIVE(ECC), 1813 1693 MCP251XFD_QUIRK_ACTIVE(HALF_DUPLEX), 1694 + clk_rate / 1000000, 1695 + clk_rate % 1000000 / 1000 / 10, 1814 1696 priv->can.clock.freq / 1000000, 1815 1697 priv->can.clock.freq % 1000000 / 1000 / 10, 1816 1698 priv->spi_max_speed_hz_orig / 1000000, 1817 1699 priv->spi_max_speed_hz_orig % 1000000 / 1000 / 10, 1818 - priv->spi->max_speed_hz / 1000000, 1819 - priv->spi->max_speed_hz % 1000000 / 1000 / 10, 1820 - effective_speed_hz / 1000000, 1821 - effective_speed_hz % 1000000 / 1000 / 10); 1700 + priv->spi_max_speed_hz_slow / 1000000, 1701 + priv->spi_max_speed_hz_slow % 1000000 / 1000 / 10, 1702 + effective_speed_hz_slow / 1000000, 1703 + effective_speed_hz_slow % 1000000 / 1000 / 10, 1704 + priv->spi_max_speed_hz_fast / 1000000, 1705 + priv->spi_max_speed_hz_fast % 1000000 / 1000 / 10, 1706 + effective_speed_hz_fast / 1000000, 1707 + effective_speed_hz_fast % 1000000 / 1000 / 10); 1822 1708 1823 1709 return 0; 1824 1710 } ··· 1855 1719 if (err == -ENODEV) 1856 1720 goto out_runtime_disable; 1857 1721 if (err) 1858 - goto out_chip_set_mode_sleep; 1722 + goto out_chip_sleep; 1723 + 1724 + err = mcp251xfd_chip_clock_init(priv); 1725 + if (err == -ENODEV) 1726 + goto out_runtime_disable; 1727 + if (err) 1728 + goto out_chip_sleep; 1859 1729 1860 1730 err = mcp251xfd_register_chip_detect(priv); 1861 1731 if (err) 1862 - goto out_chip_set_mode_sleep; 1732 + goto out_chip_sleep; 1863 1733 1864 1734 err = mcp251xfd_register_check_rx_int(priv); 1865 1735 if (err) 1866 - goto out_chip_set_mode_sleep; 1736 + goto out_chip_sleep; 1867 1737 1868 1738 err = register_candev(ndev); 1869 1739 if (err) 1870 - goto out_chip_set_mode_sleep; 1740 + goto out_chip_sleep; 1871 1741 1872 1742 err = mcp251xfd_register_done(priv); 1873 1743 if (err) ··· 1883 1741 * disable the clocks and vdd. If CONFIG_PM is not enabled, 1884 1742 * the clocks and vdd will stay powered. 1885 1743 */ 1886 - err = mcp251xfd_chip_set_mode(priv, MCP251XFD_REG_CON_MODE_SLEEP); 1744 + err = mcp251xfd_chip_sleep(priv); 1887 1745 if (err) 1888 1746 goto out_unregister_candev; 1889 1747 ··· 1893 1751 1894 1752 out_unregister_candev: 1895 1753 unregister_candev(ndev); 1896 - out_chip_set_mode_sleep: 1897 - mcp251xfd_chip_set_mode(priv, MCP251XFD_REG_CON_MODE_SLEEP); 1754 + out_chip_sleep: 1755 + mcp251xfd_chip_sleep(priv); 1898 1756 out_runtime_disable: 1899 1757 pm_runtime_disable(ndev->dev.parent); 1900 1758 out_runtime_put_noidle: ··· 1910 1768 1911 1769 unregister_candev(ndev); 1912 1770 1913 - pm_runtime_get_sync(ndev->dev.parent); 1914 - pm_runtime_put_noidle(ndev->dev.parent); 1915 - mcp251xfd_clks_and_vdd_disable(priv); 1916 - pm_runtime_disable(ndev->dev.parent); 1771 + if (pm_runtime_enabled(ndev->dev.parent)) 1772 + pm_runtime_disable(ndev->dev.parent); 1773 + else 1774 + mcp251xfd_clks_and_vdd_disable(priv); 1917 1775 } 1918 1776 1919 1777 static const struct of_device_id mcp251xfd_of_match[] = { ··· 1956 1814 struct gpio_desc *rx_int; 1957 1815 struct regulator *reg_vdd, *reg_xceiver; 1958 1816 struct clk *clk; 1817 + bool pll_enable = false; 1959 1818 u32 freq = 0; 1960 1819 int err; 1961 1820 ··· 2007 1864 return -ERANGE; 2008 1865 } 2009 1866 2010 - if (freq <= MCP251XFD_SYSCLOCK_HZ_MAX / MCP251XFD_OSC_PLL_MULTIPLIER) { 2011 - dev_err(&spi->dev, 2012 - "Oscillator frequency (%u Hz) is too low and PLL is not supported.\n", 2013 - freq); 2014 - return -ERANGE; 2015 - } 1867 + if (freq <= MCP251XFD_SYSCLOCK_HZ_MAX / MCP251XFD_OSC_PLL_MULTIPLIER) 1868 + pll_enable = true; 2016 1869 2017 1870 ndev = alloc_candev(sizeof(struct mcp251xfd_priv), 2018 1871 MCP251XFD_TX_OBJ_NUM_MAX); ··· 2024 1885 priv = netdev_priv(ndev); 2025 1886 spi_set_drvdata(spi, priv); 2026 1887 priv->can.clock.freq = freq; 1888 + if (pll_enable) 1889 + priv->can.clock.freq *= MCP251XFD_OSC_PLL_MULTIPLIER; 2027 1890 priv->can.do_set_mode = mcp251xfd_set_mode; 2028 1891 priv->can.do_get_berr_counter = mcp251xfd_get_berr_counter; 2029 1892 priv->can.bittiming_const = &mcp251xfd_bittiming_const; ··· 2038 1897 priv->spi = spi; 2039 1898 priv->rx_int = rx_int; 2040 1899 priv->clk = clk; 1900 + priv->pll_enable = pll_enable; 2041 1901 priv->reg_vdd = reg_vdd; 2042 1902 priv->reg_xceiver = reg_xceiver; 2043 1903 ··· 2076 1934 * 2077 1935 */ 2078 1936 priv->spi_max_speed_hz_orig = spi->max_speed_hz; 2079 - spi->max_speed_hz = min(spi->max_speed_hz, freq / 2 / 1000 * 850); 1937 + priv->spi_max_speed_hz_slow = min(spi->max_speed_hz, 1938 + freq / 2 / 1000 * 850); 1939 + if (priv->pll_enable) 1940 + priv->spi_max_speed_hz_fast = min(spi->max_speed_hz, 1941 + freq * 1942 + MCP251XFD_OSC_PLL_MULTIPLIER / 1943 + 2 / 1000 * 850); 1944 + else 1945 + priv->spi_max_speed_hz_fast = priv->spi_max_speed_hz_slow; 1946 + spi->max_speed_hz = priv->spi_max_speed_hz_slow; 2080 1947 spi->bits_per_word = 8; 2081 1948 spi->rt = true; 2082 1949 err = spi_setup(spi); ··· 2102 1951 goto out_free_candev; 2103 1952 2104 1953 err = mcp251xfd_register(priv); 2105 - if (err) 1954 + if (err) { 1955 + dev_err_probe(&spi->dev, err, "Failed to detect %s.\n", 1956 + mcp251xfd_get_model_str(priv)); 2106 1957 goto out_can_rx_offload_del; 1958 + } 2107 1959 2108 1960 return 0; 2109 1961
+2 -2
drivers/net/can/spi/mcp251xfd/mcp251xfd-dump.c
··· 207 207 .val = tx->base, 208 208 }, { 209 209 .key = MCP251XFD_DUMP_OBJECT_RING_KEY_NR, 210 - .val = 0, 210 + .val = tx->nr, 211 211 }, { 212 212 .key = MCP251XFD_DUMP_OBJECT_RING_KEY_FIFO_NR, 213 - .val = MCP251XFD_TX_FIFO, 213 + .val = tx->fifo_nr, 214 214 }, { 215 215 .key = MCP251XFD_DUMP_OBJECT_RING_KEY_OBJ_NUM, 216 216 .val = tx->obj_num,
+17 -7
drivers/net/can/spi/mcp251xfd/mcp251xfd-regmap.c
··· 2 2 // 3 3 // mcp251xfd - Microchip MCP251xFD Family CAN controller driver 4 4 // 5 - // Copyright (c) 2019, 2020 Pengutronix, 6 - // Marc Kleine-Budde <kernel@pengutronix.de> 5 + // Copyright (c) 2019, 2020, 2021 Pengutronix, 6 + // Marc Kleine-Budde <kernel@pengutronix.de> 7 7 // 8 8 9 9 #include "mcp251xfd.h" ··· 47 47 return spi_sync_transfer(spi, xfer, ARRAY_SIZE(xfer)); 48 48 } 49 49 50 - static inline bool mcp251xfd_update_bits_read_reg(unsigned int reg) 50 + static inline bool 51 + mcp251xfd_update_bits_read_reg(const struct mcp251xfd_priv *priv, 52 + unsigned int reg) 51 53 { 54 + struct mcp251xfd_rx_ring *ring; 55 + int n; 56 + 52 57 switch (reg) { 53 58 case MCP251XFD_REG_INT: 54 59 case MCP251XFD_REG_TEFCON: 55 - case MCP251XFD_REG_FIFOCON(MCP251XFD_RX_FIFO(0)): 56 60 case MCP251XFD_REG_FLTCON(0): 57 61 case MCP251XFD_REG_ECCSTAT: 58 62 case MCP251XFD_REG_CRC: 59 63 return false; 60 64 case MCP251XFD_REG_CON: 61 - case MCP251XFD_REG_FIFOSTA(MCP251XFD_RX_FIFO(0)): 62 65 case MCP251XFD_REG_OSC: 63 66 case MCP251XFD_REG_ECCCON: 64 67 return true; 65 68 default: 69 + mcp251xfd_for_each_rx_ring(priv, ring, n) { 70 + if (reg == MCP251XFD_REG_FIFOCON(ring->fifo_nr)) 71 + return false; 72 + if (reg == MCP251XFD_REG_FIFOSTA(ring->fifo_nr)) 73 + return true; 74 + } 75 + 66 76 WARN(1, "Status of reg 0x%04x unknown.\n", reg); 67 77 } 68 78 ··· 102 92 last_byte = mcp251xfd_last_byte_set(mask); 103 93 len = last_byte - first_byte + 1; 104 94 105 - if (mcp251xfd_update_bits_read_reg(reg)) { 95 + if (mcp251xfd_update_bits_read_reg(priv, reg)) { 106 96 struct spi_transfer xfer[2] = { }; 107 97 struct spi_message msg; 108 98 ··· 378 368 * to the caller. It will take care of both cases. 379 369 * 380 370 */ 381 - if (reg == MCP251XFD_REG_OSC) { 371 + if (reg == MCP251XFD_REG_OSC && val_len == sizeof(__le32)) { 382 372 err = 0; 383 373 goto out; 384 374 }
+136 -67
drivers/net/can/spi/mcp251xfd/mcp251xfd-ring.c
··· 53 53 } 54 54 55 55 static void 56 + mcp251xfd_ring_init_tef(struct mcp251xfd_priv *priv, u16 *base) 57 + { 58 + struct mcp251xfd_tef_ring *tef_ring; 59 + struct spi_transfer *xfer; 60 + u32 val; 61 + u16 addr; 62 + u8 len; 63 + int i; 64 + 65 + /* TEF */ 66 + tef_ring = priv->tef; 67 + tef_ring->head = 0; 68 + tef_ring->tail = 0; 69 + 70 + /* TEF- and TX-FIFO have same number of objects */ 71 + *base = mcp251xfd_get_tef_obj_addr(priv->tx->obj_num); 72 + 73 + /* FIFO increment TEF tail pointer */ 74 + addr = MCP251XFD_REG_TEFCON; 75 + val = MCP251XFD_REG_TEFCON_UINC; 76 + len = mcp251xfd_cmd_prepare_write_reg(priv, &tef_ring->uinc_buf, 77 + addr, val, val); 78 + 79 + for (i = 0; i < ARRAY_SIZE(tef_ring->uinc_xfer); i++) { 80 + xfer = &tef_ring->uinc_xfer[i]; 81 + xfer->tx_buf = &tef_ring->uinc_buf; 82 + xfer->len = len; 83 + xfer->cs_change = 1; 84 + xfer->cs_change_delay.value = 0; 85 + xfer->cs_change_delay.unit = SPI_DELAY_UNIT_NSECS; 86 + } 87 + 88 + /* "cs_change == 1" on the last transfer results in an active 89 + * chip select after the complete SPI message. This causes the 90 + * controller to interpret the next register access as 91 + * data. Set "cs_change" of the last transfer to "0" to 92 + * properly deactivate the chip select at the end of the 93 + * message. 94 + */ 95 + xfer->cs_change = 0; 96 + } 97 + 98 + static void 56 99 mcp251xfd_tx_ring_init_tx_obj(const struct mcp251xfd_priv *priv, 57 100 const struct mcp251xfd_tx_ring *ring, 58 101 struct mcp251xfd_tx_obj *tx_obj, ··· 131 88 ARRAY_SIZE(tx_obj->xfer)); 132 89 } 133 90 134 - void mcp251xfd_ring_init(struct mcp251xfd_priv *priv) 91 + static void 92 + mcp251xfd_ring_init_tx(struct mcp251xfd_priv *priv, u16 *base, u8 *fifo_nr) 135 93 { 136 - struct mcp251xfd_tef_ring *tef_ring; 137 94 struct mcp251xfd_tx_ring *tx_ring; 138 - struct mcp251xfd_rx_ring *rx_ring, *prev_rx_ring = NULL; 139 95 struct mcp251xfd_tx_obj *tx_obj; 140 - struct spi_transfer *xfer; 141 96 u32 val; 142 97 u16 addr; 143 98 u8 len; 144 - int i, j; 99 + int i; 145 100 146 - netdev_reset_queue(priv->ndev); 147 - 148 - /* TEF */ 149 - tef_ring = priv->tef; 150 - tef_ring->head = 0; 151 - tef_ring->tail = 0; 152 - 153 - /* FIFO increment TEF tail pointer */ 154 - addr = MCP251XFD_REG_TEFCON; 155 - val = MCP251XFD_REG_TEFCON_UINC; 156 - len = mcp251xfd_cmd_prepare_write_reg(priv, &tef_ring->uinc_buf, 157 - addr, val, val); 158 - 159 - for (j = 0; j < ARRAY_SIZE(tef_ring->uinc_xfer); j++) { 160 - xfer = &tef_ring->uinc_xfer[j]; 161 - xfer->tx_buf = &tef_ring->uinc_buf; 162 - xfer->len = len; 163 - xfer->cs_change = 1; 164 - xfer->cs_change_delay.value = 0; 165 - xfer->cs_change_delay.unit = SPI_DELAY_UNIT_NSECS; 166 - } 167 - 168 - /* "cs_change == 1" on the last transfer results in an active 169 - * chip select after the complete SPI message. This causes the 170 - * controller to interpret the next register access as 171 - * data. Set "cs_change" of the last transfer to "0" to 172 - * properly deactivate the chip select at the end of the 173 - * message. 174 - */ 175 - xfer->cs_change = 0; 176 - 177 - /* TX */ 178 101 tx_ring = priv->tx; 179 102 tx_ring->head = 0; 180 103 tx_ring->tail = 0; 181 - tx_ring->base = mcp251xfd_get_tef_obj_addr(tx_ring->obj_num); 104 + tx_ring->base = *base; 105 + tx_ring->nr = 0; 106 + tx_ring->fifo_nr = *fifo_nr; 107 + 108 + *base = mcp251xfd_get_tx_obj_addr(tx_ring, tx_ring->obj_num); 109 + *fifo_nr += 1; 182 110 183 111 /* FIFO request to send */ 184 - addr = MCP251XFD_REG_FIFOCON(MCP251XFD_TX_FIFO); 112 + addr = MCP251XFD_REG_FIFOCON(tx_ring->fifo_nr); 185 113 val = MCP251XFD_REG_FIFOCON_TXREQ | MCP251XFD_REG_FIFOCON_UINC; 186 114 len = mcp251xfd_cmd_prepare_write_reg(priv, &tx_ring->rts_buf, 187 115 addr, val, val); 188 116 189 117 mcp251xfd_for_each_tx_obj(tx_ring, tx_obj, i) 190 118 mcp251xfd_tx_ring_init_tx_obj(priv, tx_ring, tx_obj, len, i); 119 + } 191 120 192 - /* RX */ 121 + static void 122 + mcp251xfd_ring_init_rx(struct mcp251xfd_priv *priv, u16 *base, u8 *fifo_nr) 123 + { 124 + struct mcp251xfd_rx_ring *rx_ring; 125 + struct spi_transfer *xfer; 126 + u32 val; 127 + u16 addr; 128 + u8 len; 129 + int i, j; 130 + 193 131 mcp251xfd_for_each_rx_ring(priv, rx_ring, i) { 194 132 rx_ring->head = 0; 195 133 rx_ring->tail = 0; 134 + rx_ring->base = *base; 196 135 rx_ring->nr = i; 197 - rx_ring->fifo_nr = MCP251XFD_RX_FIFO(i); 136 + rx_ring->fifo_nr = *fifo_nr; 198 137 199 - if (!prev_rx_ring) 200 - rx_ring->base = 201 - mcp251xfd_get_tx_obj_addr(tx_ring, 202 - tx_ring->obj_num); 203 - else 204 - rx_ring->base = prev_rx_ring->base + 205 - prev_rx_ring->obj_size * 206 - prev_rx_ring->obj_num; 207 - 208 - prev_rx_ring = rx_ring; 138 + *base = mcp251xfd_get_rx_obj_addr(rx_ring, rx_ring->obj_num); 139 + *fifo_nr += 1; 209 140 210 141 /* FIFO increment RX tail pointer */ 211 142 addr = MCP251XFD_REG_FIFOCON(rx_ring->fifo_nr); ··· 205 188 */ 206 189 xfer->cs_change = 0; 207 190 } 191 + } 192 + 193 + int mcp251xfd_ring_init(struct mcp251xfd_priv *priv) 194 + { 195 + const struct mcp251xfd_rx_ring *rx_ring; 196 + u16 base = 0, ram_used; 197 + u8 fifo_nr = 1; 198 + int i; 199 + 200 + netdev_reset_queue(priv->ndev); 201 + 202 + mcp251xfd_ring_init_tef(priv, &base); 203 + mcp251xfd_ring_init_rx(priv, &base, &fifo_nr); 204 + mcp251xfd_ring_init_tx(priv, &base, &fifo_nr); 205 + 206 + /* mcp251xfd_handle_rxif() will iterate over all RX rings. 207 + * Rings with their corresponding bit set in 208 + * priv->regs_status.rxif are read out. 209 + * 210 + * If the chip is configured for only 1 RX-FIFO, and if there 211 + * is an RX interrupt pending (RXIF in INT register is set), 212 + * it must be the 1st RX-FIFO. 213 + * 214 + * We mark the RXIF of the 1st FIFO as pending here, so that 215 + * we can skip the read of the RXIF register in 216 + * mcp251xfd_read_regs_status() for the 1 RX-FIFO only case. 217 + * 218 + * If we use more than 1 RX-FIFO, this value gets overwritten 219 + * in mcp251xfd_read_regs_status(), so set it unconditionally 220 + * here. 221 + */ 222 + priv->regs_status.rxif = BIT(priv->rx[0]->fifo_nr); 223 + 224 + netdev_dbg(priv->ndev, 225 + "FIFO setup: TEF: 0x%03x: %2d*%zu bytes = %4zu bytes\n", 226 + mcp251xfd_get_tef_obj_addr(0), 227 + priv->tx->obj_num, sizeof(struct mcp251xfd_hw_tef_obj), 228 + priv->tx->obj_num * sizeof(struct mcp251xfd_hw_tef_obj)); 229 + 230 + mcp251xfd_for_each_rx_ring(priv, rx_ring, i) { 231 + netdev_dbg(priv->ndev, 232 + "FIFO setup: RX-%u: FIFO %u/0x%03x: %2u*%u bytes = %4u bytes\n", 233 + rx_ring->nr, rx_ring->fifo_nr, 234 + mcp251xfd_get_rx_obj_addr(rx_ring, 0), 235 + rx_ring->obj_num, rx_ring->obj_size, 236 + rx_ring->obj_num * rx_ring->obj_size); 237 + } 238 + 239 + netdev_dbg(priv->ndev, 240 + "FIFO setup: TX: FIFO %u/0x%03x: %2u*%u bytes = %4u bytes\n", 241 + priv->tx->fifo_nr, 242 + mcp251xfd_get_tx_obj_addr(priv->tx, 0), 243 + priv->tx->obj_num, priv->tx->obj_size, 244 + priv->tx->obj_num * priv->tx->obj_size); 245 + 246 + netdev_dbg(priv->ndev, 247 + "FIFO setup: free: %4u bytes\n", 248 + MCP251XFD_RAM_SIZE - (base - MCP251XFD_RAM_START)); 249 + 250 + ram_used = base - MCP251XFD_RAM_START; 251 + if (ram_used > MCP251XFD_RAM_SIZE) { 252 + netdev_err(priv->ndev, 253 + "Error during ring configuration, using more RAM (%u bytes) than available (%u bytes).\n", 254 + ram_used, MCP251XFD_RAM_SIZE); 255 + return -ENOMEM; 256 + } 257 + 258 + return 0; 208 259 } 209 260 210 261 void mcp251xfd_ring_free(struct mcp251xfd_priv *priv) ··· 333 248 ram_free -= rx_ring->obj_num * rx_ring->obj_size; 334 249 } 335 250 priv->rx_ring_num = i; 336 - 337 - netdev_dbg(priv->ndev, 338 - "FIFO setup: TEF: %d*%d bytes = %d bytes, TX: %d*%d bytes = %d bytes\n", 339 - tx_obj_num, tef_obj_size, tef_obj_size * tx_obj_num, 340 - tx_obj_num, tx_obj_size, tx_obj_size * tx_obj_num); 341 - 342 - mcp251xfd_for_each_rx_ring(priv, rx_ring, i) { 343 - netdev_dbg(priv->ndev, 344 - "FIFO setup: RX-%d: %d*%d bytes = %d bytes\n", 345 - i, rx_ring->obj_num, rx_ring->obj_size, 346 - rx_ring->obj_size * rx_ring->obj_num); 347 - } 348 - 349 - netdev_dbg(priv->ndev, 350 - "FIFO setup: free: %d bytes\n", 351 - ram_free); 352 251 353 252 return 0; 354 253 }
+9 -3
drivers/net/can/spi/mcp251xfd/mcp251xfd-rx.c
··· 19 19 static inline int 20 20 mcp251xfd_rx_head_get_from_chip(const struct mcp251xfd_priv *priv, 21 21 const struct mcp251xfd_rx_ring *ring, 22 - u8 *rx_head) 22 + u8 *rx_head, bool *fifo_empty) 23 23 { 24 24 u32 fifo_sta; 25 25 int err; ··· 30 30 return err; 31 31 32 32 *rx_head = FIELD_GET(MCP251XFD_REG_FIFOSTA_FIFOCI_MASK, fifo_sta); 33 + *fifo_empty = !(fifo_sta & MCP251XFD_REG_FIFOSTA_TFNRFNIF); 33 34 34 35 return 0; 35 36 } ··· 85 84 { 86 85 u32 new_head; 87 86 u8 chip_rx_head; 87 + bool fifo_empty; 88 88 int err; 89 89 90 - err = mcp251xfd_rx_head_get_from_chip(priv, ring, &chip_rx_head); 91 - if (err) 90 + err = mcp251xfd_rx_head_get_from_chip(priv, ring, &chip_rx_head, 91 + &fifo_empty); 92 + if (err || fifo_empty) 92 93 return err; 93 94 94 95 /* chip_rx_head, is the next RX-Object filled by the HW. ··· 254 251 int err, n; 255 252 256 253 mcp251xfd_for_each_rx_ring(priv, ring, n) { 254 + if (!(priv->regs_status.rxif & BIT(ring->fifo_nr))) 255 + continue; 256 + 257 257 err = mcp251xfd_handle_rxif_ring(priv, ring); 258 258 if (err) 259 259 return err;
+22 -9
drivers/net/can/spi/mcp251xfd/mcp251xfd.h
··· 2 2 * 3 3 * mcp251xfd - Microchip MCP251xFD Family CAN controller driver 4 4 * 5 - * Copyright (c) 2019 Pengutronix, 6 - * Marc Kleine-Budde <kernel@pengutronix.de> 5 + * Copyright (c) 2019, 2020, 2021 Pengutronix, 6 + * Marc Kleine-Budde <kernel@pengutronix.de> 7 7 * Copyright (c) 2019 Martin Sperl <kernel@martin.sperl.org> 8 8 */ 9 9 ··· 383 383 #endif 384 384 385 385 #define MCP251XFD_NAPI_WEIGHT 32 386 - #define MCP251XFD_TX_FIFO 1 387 - #define MCP251XFD_RX_FIFO(x) (MCP251XFD_TX_FIFO + 1 + (x)) 388 386 389 387 /* SPI commands */ 390 388 #define MCP251XFD_SPI_INSTRUCTION_RESET 0x0000 ··· 409 411 #define MCP251XFD_ECC_CNT_MAX 2 410 412 #define MCP251XFD_SANITIZE_SPI 1 411 413 #define MCP251XFD_SANITIZE_CAN 1 414 + 415 + /* FIFO and Ring */ 416 + #define MCP251XFD_FIFO_TEF_NUM 1U 417 + #define MCP251XFD_FIFO_RX_NUM_MAX 1U 418 + #define MCP251XFD_FIFO_TX_NUM 1U 419 + 420 + static_assert(MCP251XFD_FIFO_TEF_NUM == 1U); 421 + static_assert(MCP251XFD_FIFO_TEF_NUM == MCP251XFD_FIFO_TX_NUM); 422 + static_assert(MCP251XFD_FIFO_RX_NUM_MAX <= 4U); 412 423 413 424 /* Silence TX MAB overflow warnings */ 414 425 #define MCP251XFD_QUIRK_MAB_NO_WARN BIT(0) ··· 528 521 unsigned int tail; 529 522 530 523 u16 base; 524 + u8 nr; 525 + u8 fifo_nr; 531 526 u8 obj_num; 532 527 u8 obj_size; 533 528 ··· 570 561 571 562 struct mcp251xfd_regs_status { 572 563 u32 intf; 564 + u32 rxif; 573 565 }; 574 566 575 567 enum mcp251xfd_model { ··· 602 592 603 593 struct spi_device *spi; 604 594 u32 spi_max_speed_hz_orig; 595 + u32 spi_max_speed_hz_fast; 596 + u32 spi_max_speed_hz_slow; 605 597 606 - struct mcp251xfd_tef_ring tef[1]; 607 - struct mcp251xfd_tx_ring tx[1]; 608 - struct mcp251xfd_rx_ring *rx[1]; 598 + struct mcp251xfd_tef_ring tef[MCP251XFD_FIFO_TEF_NUM]; 599 + struct mcp251xfd_rx_ring *rx[MCP251XFD_FIFO_RX_NUM_MAX]; 600 + struct mcp251xfd_tx_ring tx[MCP251XFD_FIFO_TX_NUM]; 609 601 610 602 u8 rx_ring_num; 611 603 ··· 620 608 621 609 struct gpio_desc *rx_int; 622 610 struct clk *clk; 611 + bool pll_enable; 623 612 struct regulator *reg_vdd; 624 613 struct regulator *reg_xceiver; 625 614 ··· 789 776 int err; 790 777 791 778 err = regmap_read(priv->map_reg, 792 - MCP251XFD_REG_FIFOSTA(MCP251XFD_TX_FIFO), 779 + MCP251XFD_REG_FIFOSTA(priv->tx->fifo_nr), 793 780 &fifo_sta); 794 781 if (err) 795 782 return err; ··· 892 879 const void *data, size_t data_size); 893 880 u16 mcp251xfd_crc16_compute(const void *data, size_t data_size); 894 881 int mcp251xfd_regmap_init(struct mcp251xfd_priv *priv); 895 - void mcp251xfd_ring_init(struct mcp251xfd_priv *priv); 882 + int mcp251xfd_ring_init(struct mcp251xfd_priv *priv); 896 883 void mcp251xfd_ring_free(struct mcp251xfd_priv *priv); 897 884 int mcp251xfd_ring_alloc(struct mcp251xfd_priv *priv); 898 885 int mcp251xfd_handle_rxif(struct mcp251xfd_priv *priv);
+2 -1
drivers/net/can/usb/etas_es58x/es58x_fd.c
··· 69 69 int i, num_element; 70 70 u32 rcv_packet_idx; 71 71 72 - const u32 mask = GENMASK(31, sizeof(echo_msg->packet_idx) * 8); 72 + const u32 mask = GENMASK(BITS_PER_TYPE(mask) - 1, 73 + BITS_PER_TYPE(echo_msg->packet_idx)); 73 74 74 75 num_element = es58x_msg_num_element(es58x_dev->dev, 75 76 es58x_fd_urb_cmd->echo_msg,
+1 -3
drivers/net/can/usb/kvaser_usb/kvaser_usb_core.c
··· 205 205 206 206 int kvaser_usb_send_cmd(const struct kvaser_usb *dev, void *cmd, int len) 207 207 { 208 - int actual_len; /* Not used */ 209 - 210 208 return usb_bulk_msg(dev->udev, 211 209 usb_sndbulkpipe(dev->udev, 212 210 dev->bulk_out->bEndpointAddress), 213 - cmd, len, &actual_len, KVASER_USB_TIMEOUT); 211 + cmd, len, NULL, KVASER_USB_TIMEOUT); 214 212 } 215 213 216 214 int kvaser_usb_recv_cmd(const struct kvaser_usb *dev, void *cmd, int len,
+5 -4
drivers/net/can/xilinx_can.c
··· 1215 1215 } 1216 1216 1217 1217 if (work_done < quota) { 1218 - napi_complete_done(napi, work_done); 1219 - ier = priv->read_reg(priv, XCAN_IER_OFFSET); 1220 - ier |= xcan_rx_int_mask(priv); 1221 - priv->write_reg(priv, XCAN_IER_OFFSET, ier); 1218 + if (napi_complete_done(napi, work_done)) { 1219 + ier = priv->read_reg(priv, XCAN_IER_OFFSET); 1220 + ier |= xcan_rx_int_mask(priv); 1221 + priv->write_reg(priv, XCAN_IER_OFFSET, ier); 1222 + } 1222 1223 } 1223 1224 return work_done; 1224 1225 }
+3 -3
include/linux/can/bittiming.h
··· 113 113 }; 114 114 115 115 #ifdef CONFIG_CAN_CALC_BITTIMING 116 - int can_calc_bittiming(struct net_device *dev, struct can_bittiming *bt, 116 + int can_calc_bittiming(const struct net_device *dev, struct can_bittiming *bt, 117 117 const struct can_bittiming_const *btc); 118 118 119 119 void can_calc_tdco(struct can_tdc *tdc, const struct can_tdc_const *tdc_const, ··· 121 121 u32 *ctrlmode, u32 ctrlmode_supported); 122 122 #else /* !CONFIG_CAN_CALC_BITTIMING */ 123 123 static inline int 124 - can_calc_bittiming(struct net_device *dev, struct can_bittiming *bt, 124 + can_calc_bittiming(const struct net_device *dev, struct can_bittiming *bt, 125 125 const struct can_bittiming_const *btc) 126 126 { 127 127 netdev_err(dev, "bit-timing calculation not available\n"); ··· 136 136 } 137 137 #endif /* CONFIG_CAN_CALC_BITTIMING */ 138 138 139 - int can_get_bittiming(struct net_device *dev, struct can_bittiming *bt, 139 + int can_get_bittiming(const struct net_device *dev, struct can_bittiming *bt, 140 140 const struct can_bittiming_const *btc, 141 141 const u32 *bitrate_const, 142 142 const unsigned int bitrate_const_cnt);
+10 -6
net/can/gw.c
··· 577 577 gwj->ccgw.filter.can_mask, can_can_gw_rcv, gwj); 578 578 } 579 579 580 + static void cgw_job_free_rcu(struct rcu_head *rcu_head) 581 + { 582 + struct cgw_job *gwj = container_of(rcu_head, struct cgw_job, rcu); 583 + 584 + kmem_cache_free(cgw_cache, gwj); 585 + } 586 + 580 587 static int cgw_notifier(struct notifier_block *nb, 581 588 unsigned long msg, void *ptr) 582 589 { ··· 603 596 if (gwj->src.dev == dev || gwj->dst.dev == dev) { 604 597 hlist_del(&gwj->list); 605 598 cgw_unregister_filter(net, gwj); 606 - synchronize_rcu(); 607 - kmem_cache_free(cgw_cache, gwj); 599 + call_rcu(&gwj->rcu, cgw_job_free_rcu); 608 600 } 609 601 } 610 602 } ··· 1161 1155 hlist_for_each_entry_safe(gwj, nx, &net->can.cgw_list, list) { 1162 1156 hlist_del(&gwj->list); 1163 1157 cgw_unregister_filter(net, gwj); 1164 - synchronize_rcu(); 1165 - kmem_cache_free(cgw_cache, gwj); 1158 + call_rcu(&gwj->rcu, cgw_job_free_rcu); 1166 1159 } 1167 1160 } 1168 1161 ··· 1229 1224 1230 1225 hlist_del(&gwj->list); 1231 1226 cgw_unregister_filter(net, gwj); 1232 - synchronize_rcu(); 1233 - kmem_cache_free(cgw_cache, gwj); 1227 + call_rcu(&gwj->rcu, cgw_job_free_rcu); 1234 1228 err = 0; 1235 1229 break; 1236 1230 }