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

Merge tag 'linux-can-fixes-for-5.5-20191208' of git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can

Marc Kleine-Budde says:

====================
pull-request: can 2019-12-08

this is a pull request of 13 patches for net/master.

The first two patches are by Dan Murphy. He adds himself as a maintainer to the
m-can MMIO and tcan SPI driver.

The next two patches the j1939 stack. The first one is by Oleksij Rempel and
fixes a locking problem found by the syzbot, the second one is by me an fixes a
mistake in the documentation.

Srinivas Neeli fixes missing RX CAN packets on CANFD2.0 in the xilinx driver.

Sean Nyekjaer fixes a possible deadlock in the the flexcan driver after
suspend/resume. Joakim Zhang contributes two patches for the flexcan driver
that fix problems with the low power enter/exit.

The next 4 patches all target the tcan part of the m_can driver. Sean Nyekjaer
adds the required delay after reset and fixes the device tree binding example.
Dan Murphy's patches make the wake-gpio optional.

In the last patch Xiaolong Huang fixes several kernel memory info leaks to the
USB device in the kvaser_usb_leaf driver.
====================

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

+84 -52
+2 -2
Documentation/devicetree/bindings/net/can/tcan4x5x.txt
··· 10 10 - #size-cells: 0 11 11 - spi-max-frequency: Maximum frequency of the SPI bus the chip can 12 12 operate at should be less than or equal to 18 MHz. 13 - - device-wake-gpios: Wake up GPIO to wake up the TCAN device. 14 13 - interrupt-parent: the phandle to the interrupt controller which provides 15 14 the interrupt. 16 15 - interrupts: interrupt specification for data-ready. ··· 22 23 reset. 23 24 - device-state-gpios: Input GPIO that indicates if the device is in 24 25 a sleep state or if the device is active. 26 + - device-wake-gpios: Wake up GPIO to wake up the TCAN device. 25 27 26 28 Example: 27 29 tcan4x5x: tcan4x5x@0 { ··· 36 36 interrupts = <14 GPIO_ACTIVE_LOW>; 37 37 device-state-gpios = <&gpio3 21 GPIO_ACTIVE_HIGH>; 38 38 device-wake-gpios = <&gpio1 15 GPIO_ACTIVE_HIGH>; 39 - reset-gpios = <&gpio1 27 GPIO_ACTIVE_LOW>; 39 + reset-gpios = <&gpio1 27 GPIO_ACTIVE_HIGH>; 40 40 };
+1 -1
Documentation/networking/j1939.rst
··· 339 339 .pgn = J1939_PGN_ADDRESS_CLAIMED, 340 340 .pgn_mask = J1939_PGN_PDU1_MAX, 341 341 }, { 342 - .pgn = J1939_PGN_ADDRESS_REQUEST, 342 + .pgn = J1939_PGN_REQUEST, 343 343 .pgn_mask = J1939_PGN_PDU1_MAX, 344 344 }, { 345 345 .pgn = J1939_PGN_ADDRESS_COMMANDED,
+8
MAINTAINERS
··· 10108 10108 F: drivers/media/radio/radio-maxiradio* 10109 10109 10110 10110 MCAN MMIO DEVICE DRIVER 10111 + M: Dan Murphy <dmurphy@ti.com> 10111 10112 M: Sriram Dash <sriram.dash@samsung.com> 10112 10113 L: linux-can@vger.kernel.org 10113 10114 S: Maintained ··· 16533 16532 L: alsa-devel@alsa-project.org (moderated for non-subscribers) 16534 16533 S: Odd Fixes 16535 16534 F: sound/soc/codecs/tas571x* 16535 + 16536 + TI TCAN4X5X DEVICE DRIVER 16537 + M: Dan Murphy <dmurphy@ti.com> 16538 + L: linux-can@vger.kernel.org 16539 + S: Maintained 16540 + F: Documentation/devicetree/bindings/net/can/tcan4x5x.txt 16541 + F: drivers/net/can/m_can/tcan4x5x.c 16536 16542 16537 16543 TI TRF7970A NFC DRIVER 16538 16544 M: Mark Greer <mgreer@animalcreek.com>
+36 -37
drivers/net/can/flexcan.c
··· 389 389 (&priv->regs->mb[bank][priv->mb_size * mb_index]); 390 390 } 391 391 392 + static int flexcan_low_power_enter_ack(struct flexcan_priv *priv) 393 + { 394 + struct flexcan_regs __iomem *regs = priv->regs; 395 + unsigned int timeout = FLEXCAN_TIMEOUT_US / 10; 396 + 397 + while (timeout-- && !(priv->read(&regs->mcr) & FLEXCAN_MCR_LPM_ACK)) 398 + udelay(10); 399 + 400 + if (!(priv->read(&regs->mcr) & FLEXCAN_MCR_LPM_ACK)) 401 + return -ETIMEDOUT; 402 + 403 + return 0; 404 + } 405 + 406 + static int flexcan_low_power_exit_ack(struct flexcan_priv *priv) 407 + { 408 + struct flexcan_regs __iomem *regs = priv->regs; 409 + unsigned int timeout = FLEXCAN_TIMEOUT_US / 10; 410 + 411 + while (timeout-- && (priv->read(&regs->mcr) & FLEXCAN_MCR_LPM_ACK)) 412 + udelay(10); 413 + 414 + if (priv->read(&regs->mcr) & FLEXCAN_MCR_LPM_ACK) 415 + return -ETIMEDOUT; 416 + 417 + return 0; 418 + } 419 + 392 420 static void flexcan_enable_wakeup_irq(struct flexcan_priv *priv, bool enable) 393 421 { 394 422 struct flexcan_regs __iomem *regs = priv->regs; ··· 435 407 static inline int flexcan_enter_stop_mode(struct flexcan_priv *priv) 436 408 { 437 409 struct flexcan_regs __iomem *regs = priv->regs; 438 - unsigned int ackval; 439 410 u32 reg_mcr; 440 411 441 412 reg_mcr = priv->read(&regs->mcr); ··· 445 418 regmap_update_bits(priv->stm.gpr, priv->stm.req_gpr, 446 419 1 << priv->stm.req_bit, 1 << priv->stm.req_bit); 447 420 448 - /* get stop acknowledgment */ 449 - if (regmap_read_poll_timeout(priv->stm.gpr, priv->stm.ack_gpr, 450 - ackval, ackval & (1 << priv->stm.ack_bit), 451 - 0, FLEXCAN_TIMEOUT_US)) 452 - return -ETIMEDOUT; 453 - 454 - return 0; 421 + return flexcan_low_power_enter_ack(priv); 455 422 } 456 423 457 424 static inline int flexcan_exit_stop_mode(struct flexcan_priv *priv) 458 425 { 459 426 struct flexcan_regs __iomem *regs = priv->regs; 460 - unsigned int ackval; 461 427 u32 reg_mcr; 462 428 463 429 /* remove stop request */ 464 430 regmap_update_bits(priv->stm.gpr, priv->stm.req_gpr, 465 431 1 << priv->stm.req_bit, 0); 466 432 467 - /* get stop acknowledgment */ 468 - if (regmap_read_poll_timeout(priv->stm.gpr, priv->stm.ack_gpr, 469 - ackval, !(ackval & (1 << priv->stm.ack_bit)), 470 - 0, FLEXCAN_TIMEOUT_US)) 471 - return -ETIMEDOUT; 472 433 473 434 reg_mcr = priv->read(&regs->mcr); 474 435 reg_mcr &= ~FLEXCAN_MCR_SLF_WAK; 475 436 priv->write(reg_mcr, &regs->mcr); 476 437 477 - return 0; 438 + return flexcan_low_power_exit_ack(priv); 478 439 } 479 440 480 441 static inline void flexcan_error_irq_enable(const struct flexcan_priv *priv) ··· 521 506 static int flexcan_chip_enable(struct flexcan_priv *priv) 522 507 { 523 508 struct flexcan_regs __iomem *regs = priv->regs; 524 - unsigned int timeout = FLEXCAN_TIMEOUT_US / 10; 525 509 u32 reg; 526 510 527 511 reg = priv->read(&regs->mcr); 528 512 reg &= ~FLEXCAN_MCR_MDIS; 529 513 priv->write(reg, &regs->mcr); 530 514 531 - while (timeout-- && (priv->read(&regs->mcr) & FLEXCAN_MCR_LPM_ACK)) 532 - udelay(10); 533 - 534 - if (priv->read(&regs->mcr) & FLEXCAN_MCR_LPM_ACK) 535 - return -ETIMEDOUT; 536 - 537 - return 0; 515 + return flexcan_low_power_exit_ack(priv); 538 516 } 539 517 540 518 static int flexcan_chip_disable(struct flexcan_priv *priv) 541 519 { 542 520 struct flexcan_regs __iomem *regs = priv->regs; 543 - unsigned int timeout = FLEXCAN_TIMEOUT_US / 10; 544 521 u32 reg; 545 522 546 523 reg = priv->read(&regs->mcr); 547 524 reg |= FLEXCAN_MCR_MDIS; 548 525 priv->write(reg, &regs->mcr); 549 526 550 - while (timeout-- && !(priv->read(&regs->mcr) & FLEXCAN_MCR_LPM_ACK)) 551 - udelay(10); 552 - 553 - if (!(priv->read(&regs->mcr) & FLEXCAN_MCR_LPM_ACK)) 554 - return -ETIMEDOUT; 555 - 556 - return 0; 527 + return flexcan_low_power_enter_ack(priv); 557 528 } 558 529 559 530 static int flexcan_chip_freeze(struct flexcan_priv *priv) ··· 1723 1722 netif_start_queue(dev); 1724 1723 if (device_may_wakeup(device)) { 1725 1724 disable_irq_wake(dev->irq); 1725 + err = flexcan_exit_stop_mode(priv); 1726 + if (err) 1727 + return err; 1726 1728 } else { 1727 1729 err = pm_runtime_force_resume(device); 1728 1730 if (err) ··· 1771 1767 { 1772 1768 struct net_device *dev = dev_get_drvdata(device); 1773 1769 struct flexcan_priv *priv = netdev_priv(dev); 1774 - int err; 1775 1770 1776 - if (netif_running(dev) && device_may_wakeup(device)) { 1771 + if (netif_running(dev) && device_may_wakeup(device)) 1777 1772 flexcan_enable_wakeup_irq(priv, false); 1778 - err = flexcan_exit_stop_mode(priv); 1779 - if (err) 1780 - return err; 1781 - } 1782 1773 1783 1774 return 0; 1784 1775 }
+20 -6
drivers/net/can/m_can/tcan4x5x.c
··· 101 101 #define TCAN4X5X_MODE_STANDBY BIT(6) 102 102 #define TCAN4X5X_MODE_NORMAL BIT(7) 103 103 104 + #define TCAN4X5X_DISABLE_WAKE_MSK (BIT(31) | BIT(30)) 105 + 104 106 #define TCAN4X5X_SW_RESET BIT(2) 105 107 106 108 #define TCAN4X5X_MCAN_CONFIGURED BIT(5) ··· 340 338 return ret; 341 339 } 342 340 341 + static int tcan4x5x_disable_wake(struct m_can_classdev *cdev) 342 + { 343 + struct tcan4x5x_priv *tcan4x5x = cdev->device_data; 344 + 345 + return regmap_update_bits(tcan4x5x->regmap, TCAN4X5X_CONFIG, 346 + TCAN4X5X_DISABLE_WAKE_MSK, 0x00); 347 + } 348 + 343 349 static int tcan4x5x_parse_config(struct m_can_classdev *cdev) 344 350 { 345 351 struct tcan4x5x_priv *tcan4x5x = cdev->device_data; ··· 355 345 tcan4x5x->device_wake_gpio = devm_gpiod_get(cdev->dev, "device-wake", 356 346 GPIOD_OUT_HIGH); 357 347 if (IS_ERR(tcan4x5x->device_wake_gpio)) { 358 - dev_err(cdev->dev, "device-wake gpio not defined\n"); 359 - return -EINVAL; 348 + if (PTR_ERR(tcan4x5x->power) == -EPROBE_DEFER) 349 + return -EPROBE_DEFER; 350 + 351 + tcan4x5x_disable_wake(cdev); 360 352 } 361 353 362 354 tcan4x5x->reset_gpio = devm_gpiod_get_optional(cdev->dev, "reset", 363 355 GPIOD_OUT_LOW); 364 356 if (IS_ERR(tcan4x5x->reset_gpio)) 365 357 tcan4x5x->reset_gpio = NULL; 358 + 359 + usleep_range(700, 1000); 366 360 367 361 tcan4x5x->device_state_gpio = devm_gpiod_get_optional(cdev->dev, 368 362 "device-state", ··· 442 428 443 429 spi_set_drvdata(spi, priv); 444 430 445 - ret = tcan4x5x_parse_config(mcan_class); 446 - if (ret) 447 - goto out_clk; 448 - 449 431 /* Configure the SPI bus */ 450 432 spi->bits_per_word = 32; 451 433 ret = spi_setup(spi); ··· 450 440 451 441 priv->regmap = devm_regmap_init(&spi->dev, &tcan4x5x_bus, 452 442 &spi->dev, &tcan4x5x_regmap); 443 + 444 + ret = tcan4x5x_parse_config(mcan_class); 445 + if (ret) 446 + goto out_clk; 453 447 454 448 tcan4x5x_power_enable(priv->power, 1); 455 449
+3 -3
drivers/net/can/usb/kvaser_usb/kvaser_usb_leaf.c
··· 608 608 struct kvaser_cmd *cmd; 609 609 int err; 610 610 611 - cmd = kmalloc(sizeof(*cmd), GFP_ATOMIC); 611 + cmd = kzalloc(sizeof(*cmd), GFP_ATOMIC); 612 612 if (!cmd) 613 613 return -ENOMEM; 614 614 ··· 1140 1140 struct kvaser_cmd *cmd; 1141 1141 int rc; 1142 1142 1143 - cmd = kmalloc(sizeof(*cmd), GFP_KERNEL); 1143 + cmd = kzalloc(sizeof(*cmd), GFP_KERNEL); 1144 1144 if (!cmd) 1145 1145 return -ENOMEM; 1146 1146 ··· 1206 1206 struct kvaser_cmd *cmd; 1207 1207 int rc; 1208 1208 1209 - cmd = kmalloc(sizeof(*cmd), GFP_KERNEL); 1209 + cmd = kzalloc(sizeof(*cmd), GFP_KERNEL); 1210 1210 if (!cmd) 1211 1211 return -ENOMEM; 1212 1212
+7
drivers/net/can/xilinx_can.c
··· 60 60 XCAN_TXMSG_BASE_OFFSET = 0x0100, /* TX Message Space */ 61 61 XCAN_RXMSG_BASE_OFFSET = 0x1100, /* RX Message Space */ 62 62 XCAN_RXMSG_2_BASE_OFFSET = 0x2100, /* RX Message Space */ 63 + XCAN_AFR_2_MASK_OFFSET = 0x0A00, /* Acceptance Filter MASK */ 64 + XCAN_AFR_2_ID_OFFSET = 0x0A04, /* Acceptance Filter ID */ 63 65 }; 64 66 65 67 #define XCAN_FRAME_ID_OFFSET(frame_base) ((frame_base) + 0x00) ··· 1810 1808 devm_can_led_init(ndev); 1811 1809 1812 1810 pm_runtime_put(&pdev->dev); 1811 + 1812 + if (priv->devtype.flags & XCAN_FLAG_CANFD_2) { 1813 + priv->write_reg(priv, XCAN_AFR_2_ID_OFFSET, 0x00000000); 1814 + priv->write_reg(priv, XCAN_AFR_2_MASK_OFFSET, 0x00000000); 1815 + } 1813 1816 1814 1817 netdev_dbg(ndev, "reg_base=0x%p irq=%d clock=%d, tx buffers: actual %d, using %d\n", 1815 1818 priv->reg_base, ndev->irq, priv->can.clock.freq,
+7 -3
net/can/j1939/socket.c
··· 423 423 { 424 424 struct sockaddr_can *addr = (struct sockaddr_can *)uaddr; 425 425 struct j1939_sock *jsk = j1939_sk(sock->sk); 426 - struct j1939_priv *priv = jsk->priv; 427 - struct sock *sk = sock->sk; 428 - struct net *net = sock_net(sk); 426 + struct j1939_priv *priv; 427 + struct sock *sk; 428 + struct net *net; 429 429 int ret = 0; 430 430 431 431 ret = j1939_sk_sanity_check(addr, len); ··· 433 433 return ret; 434 434 435 435 lock_sock(sock->sk); 436 + 437 + priv = jsk->priv; 438 + sk = sock->sk; 439 + net = sock_net(sk); 436 440 437 441 /* Already bound to an interface? */ 438 442 if (jsk->state & J1939_SOCK_BOUND) {