diff options
| author | David S. Miller <davem@davemloft.net> | 2015-07-13 01:24:01 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2015-07-13 01:24:01 -0400 |
| commit | cee9f6d0186a586c8023bc91c8a4cf8a088855e5 (patch) | |
| tree | 70847d330cb2c34515f5fa0b7128a2af6b188783 | |
| parent | 76b63da9666fb3fa786ff76a50d29abbe3d706b8 (diff) | |
| parent | d3b58c47d330de8c29898fe9746f7530408f8a59 (diff) | |
Merge tag 'linux-can-fixes-for-4.2-20150712' of git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can
Marc Kleine-Budde says:
====================
pull-request: can 2015-07-12
this is a pull request of 8 patchs for net/master.
Sergei Shtylyov contributes 5 patches for the rcar_can driver, fixing the IRQ
check and several info and error messages. There are two patches by J.D.
Schroeder and Roger Quadros for the c_can driver and dra7x-evm device tree,
which precent a glitch in the DCAN1 pinmux. Oliver Hartkopp provides a better
approach to make the CAN skbs unique, the timestamp is replaced by a counter.
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
| -rw-r--r-- | arch/arm/boot/dts/dra7-evm.dts | 5 | ||||
| -rw-r--r-- | arch/arm/boot/dts/dra72-evm.dts | 5 | ||||
| -rw-r--r-- | drivers/net/can/c_can/c_can.c | 10 | ||||
| -rw-r--r-- | drivers/net/can/dev.c | 7 | ||||
| -rw-r--r-- | drivers/net/can/rcar_can.c | 16 | ||||
| -rw-r--r-- | drivers/net/can/slcan.c | 2 | ||||
| -rw-r--r-- | drivers/net/can/vcan.c | 3 | ||||
| -rw-r--r-- | include/linux/can/skb.h | 2 | ||||
| -rw-r--r-- | net/can/af_can.c | 12 | ||||
| -rw-r--r-- | net/can/bcm.c | 2 | ||||
| -rw-r--r-- | net/can/raw.c | 7 |
11 files changed, 42 insertions, 29 deletions
diff --git a/arch/arm/boot/dts/dra7-evm.dts b/arch/arm/boot/dts/dra7-evm.dts index aa465904f6cc..096f68be99e2 100644 --- a/arch/arm/boot/dts/dra7-evm.dts +++ b/arch/arm/boot/dts/dra7-evm.dts | |||
| @@ -686,7 +686,8 @@ | |||
| 686 | 686 | ||
| 687 | &dcan1 { | 687 | &dcan1 { |
| 688 | status = "ok"; | 688 | status = "ok"; |
| 689 | pinctrl-names = "default", "sleep"; | 689 | pinctrl-names = "default", "sleep", "active"; |
| 690 | pinctrl-0 = <&dcan1_pins_default>; | 690 | pinctrl-0 = <&dcan1_pins_sleep>; |
| 691 | pinctrl-1 = <&dcan1_pins_sleep>; | 691 | pinctrl-1 = <&dcan1_pins_sleep>; |
| 692 | pinctrl-2 = <&dcan1_pins_default>; | ||
| 692 | }; | 693 | }; |
diff --git a/arch/arm/boot/dts/dra72-evm.dts b/arch/arm/boot/dts/dra72-evm.dts index 4e1b60581782..803738414086 100644 --- a/arch/arm/boot/dts/dra72-evm.dts +++ b/arch/arm/boot/dts/dra72-evm.dts | |||
| @@ -587,9 +587,10 @@ | |||
| 587 | 587 | ||
| 588 | &dcan1 { | 588 | &dcan1 { |
| 589 | status = "ok"; | 589 | status = "ok"; |
| 590 | pinctrl-names = "default", "sleep"; | 590 | pinctrl-names = "default", "sleep", "active"; |
| 591 | pinctrl-0 = <&dcan1_pins_default>; | 591 | pinctrl-0 = <&dcan1_pins_sleep>; |
| 592 | pinctrl-1 = <&dcan1_pins_sleep>; | 592 | pinctrl-1 = <&dcan1_pins_sleep>; |
| 593 | pinctrl-2 = <&dcan1_pins_default>; | ||
| 593 | }; | 594 | }; |
| 594 | 595 | ||
| 595 | &qspi { | 596 | &qspi { |
diff --git a/drivers/net/can/c_can/c_can.c b/drivers/net/can/c_can/c_can.c index 041525d2595c..5d214d135332 100644 --- a/drivers/net/can/c_can/c_can.c +++ b/drivers/net/can/c_can/c_can.c | |||
| @@ -592,6 +592,7 @@ static int c_can_start(struct net_device *dev) | |||
| 592 | { | 592 | { |
| 593 | struct c_can_priv *priv = netdev_priv(dev); | 593 | struct c_can_priv *priv = netdev_priv(dev); |
| 594 | int err; | 594 | int err; |
| 595 | struct pinctrl *p; | ||
| 595 | 596 | ||
| 596 | /* basic c_can configuration */ | 597 | /* basic c_can configuration */ |
| 597 | err = c_can_chip_config(dev); | 598 | err = c_can_chip_config(dev); |
| @@ -604,8 +605,13 @@ static int c_can_start(struct net_device *dev) | |||
| 604 | 605 | ||
| 605 | priv->can.state = CAN_STATE_ERROR_ACTIVE; | 606 | priv->can.state = CAN_STATE_ERROR_ACTIVE; |
| 606 | 607 | ||
| 607 | /* activate pins */ | 608 | /* Attempt to use "active" if available else use "default" */ |
| 608 | pinctrl_pm_select_default_state(dev->dev.parent); | 609 | p = pinctrl_get_select(priv->device, "active"); |
| 610 | if (!IS_ERR(p)) | ||
| 611 | pinctrl_put(p); | ||
| 612 | else | ||
| 613 | pinctrl_pm_select_default_state(priv->device); | ||
| 614 | |||
| 609 | return 0; | 615 | return 0; |
| 610 | } | 616 | } |
| 611 | 617 | ||
diff --git a/drivers/net/can/dev.c b/drivers/net/can/dev.c index e9b1810d319f..aede704605c6 100644 --- a/drivers/net/can/dev.c +++ b/drivers/net/can/dev.c | |||
| @@ -440,9 +440,6 @@ unsigned int can_get_echo_skb(struct net_device *dev, unsigned int idx) | |||
| 440 | struct can_frame *cf = (struct can_frame *)skb->data; | 440 | struct can_frame *cf = (struct can_frame *)skb->data; |
| 441 | u8 dlc = cf->can_dlc; | 441 | u8 dlc = cf->can_dlc; |
| 442 | 442 | ||
| 443 | if (!(skb->tstamp.tv64)) | ||
| 444 | __net_timestamp(skb); | ||
| 445 | |||
| 446 | netif_rx(priv->echo_skb[idx]); | 443 | netif_rx(priv->echo_skb[idx]); |
| 447 | priv->echo_skb[idx] = NULL; | 444 | priv->echo_skb[idx] = NULL; |
| 448 | 445 | ||
| @@ -578,7 +575,6 @@ struct sk_buff *alloc_can_skb(struct net_device *dev, struct can_frame **cf) | |||
| 578 | if (unlikely(!skb)) | 575 | if (unlikely(!skb)) |
| 579 | return NULL; | 576 | return NULL; |
| 580 | 577 | ||
| 581 | __net_timestamp(skb); | ||
| 582 | skb->protocol = htons(ETH_P_CAN); | 578 | skb->protocol = htons(ETH_P_CAN); |
| 583 | skb->pkt_type = PACKET_BROADCAST; | 579 | skb->pkt_type = PACKET_BROADCAST; |
| 584 | skb->ip_summed = CHECKSUM_UNNECESSARY; | 580 | skb->ip_summed = CHECKSUM_UNNECESSARY; |
| @@ -589,6 +585,7 @@ struct sk_buff *alloc_can_skb(struct net_device *dev, struct can_frame **cf) | |||
| 589 | 585 | ||
| 590 | can_skb_reserve(skb); | 586 | can_skb_reserve(skb); |
| 591 | can_skb_prv(skb)->ifindex = dev->ifindex; | 587 | can_skb_prv(skb)->ifindex = dev->ifindex; |
| 588 | can_skb_prv(skb)->skbcnt = 0; | ||
| 592 | 589 | ||
| 593 | *cf = (struct can_frame *)skb_put(skb, sizeof(struct can_frame)); | 590 | *cf = (struct can_frame *)skb_put(skb, sizeof(struct can_frame)); |
| 594 | memset(*cf, 0, sizeof(struct can_frame)); | 591 | memset(*cf, 0, sizeof(struct can_frame)); |
| @@ -607,7 +604,6 @@ struct sk_buff *alloc_canfd_skb(struct net_device *dev, | |||
| 607 | if (unlikely(!skb)) | 604 | if (unlikely(!skb)) |
| 608 | return NULL; | 605 | return NULL; |
| 609 | 606 | ||
| 610 | __net_timestamp(skb); | ||
| 611 | skb->protocol = htons(ETH_P_CANFD); | 607 | skb->protocol = htons(ETH_P_CANFD); |
| 612 | skb->pkt_type = PACKET_BROADCAST; | 608 | skb->pkt_type = PACKET_BROADCAST; |
| 613 | skb->ip_summed = CHECKSUM_UNNECESSARY; | 609 | skb->ip_summed = CHECKSUM_UNNECESSARY; |
| @@ -618,6 +614,7 @@ struct sk_buff *alloc_canfd_skb(struct net_device *dev, | |||
| 618 | 614 | ||
| 619 | can_skb_reserve(skb); | 615 | can_skb_reserve(skb); |
| 620 | can_skb_prv(skb)->ifindex = dev->ifindex; | 616 | can_skb_prv(skb)->ifindex = dev->ifindex; |
| 617 | can_skb_prv(skb)->skbcnt = 0; | ||
| 621 | 618 | ||
| 622 | *cfd = (struct canfd_frame *)skb_put(skb, sizeof(struct canfd_frame)); | 619 | *cfd = (struct canfd_frame *)skb_put(skb, sizeof(struct canfd_frame)); |
| 623 | memset(*cfd, 0, sizeof(struct canfd_frame)); | 620 | memset(*cfd, 0, sizeof(struct canfd_frame)); |
diff --git a/drivers/net/can/rcar_can.c b/drivers/net/can/rcar_can.c index 7deb80dcbe8c..7bd54191f962 100644 --- a/drivers/net/can/rcar_can.c +++ b/drivers/net/can/rcar_can.c | |||
| @@ -508,7 +508,8 @@ static int rcar_can_open(struct net_device *ndev) | |||
| 508 | 508 | ||
| 509 | err = clk_prepare_enable(priv->clk); | 509 | err = clk_prepare_enable(priv->clk); |
| 510 | if (err) { | 510 | if (err) { |
| 511 | netdev_err(ndev, "failed to enable periperal clock, error %d\n", | 511 | netdev_err(ndev, |
| 512 | "failed to enable peripheral clock, error %d\n", | ||
| 512 | err); | 513 | err); |
| 513 | goto out; | 514 | goto out; |
| 514 | } | 515 | } |
| @@ -526,7 +527,8 @@ static int rcar_can_open(struct net_device *ndev) | |||
| 526 | napi_enable(&priv->napi); | 527 | napi_enable(&priv->napi); |
| 527 | err = request_irq(ndev->irq, rcar_can_interrupt, 0, ndev->name, ndev); | 528 | err = request_irq(ndev->irq, rcar_can_interrupt, 0, ndev->name, ndev); |
| 528 | if (err) { | 529 | if (err) { |
| 529 | netdev_err(ndev, "error requesting interrupt %x\n", ndev->irq); | 530 | netdev_err(ndev, "request_irq(%d) failed, error %d\n", |
| 531 | ndev->irq, err); | ||
| 530 | goto out_close; | 532 | goto out_close; |
| 531 | } | 533 | } |
| 532 | can_led_event(ndev, CAN_LED_EVENT_OPEN); | 534 | can_led_event(ndev, CAN_LED_EVENT_OPEN); |
| @@ -758,8 +760,9 @@ static int rcar_can_probe(struct platform_device *pdev) | |||
| 758 | } | 760 | } |
| 759 | 761 | ||
| 760 | irq = platform_get_irq(pdev, 0); | 762 | irq = platform_get_irq(pdev, 0); |
| 761 | if (!irq) { | 763 | if (irq < 0) { |
| 762 | dev_err(&pdev->dev, "No IRQ resource\n"); | 764 | dev_err(&pdev->dev, "No IRQ resource\n"); |
| 765 | err = irq; | ||
| 763 | goto fail; | 766 | goto fail; |
| 764 | } | 767 | } |
| 765 | 768 | ||
| @@ -782,7 +785,8 @@ static int rcar_can_probe(struct platform_device *pdev) | |||
| 782 | priv->clk = devm_clk_get(&pdev->dev, "clkp1"); | 785 | priv->clk = devm_clk_get(&pdev->dev, "clkp1"); |
| 783 | if (IS_ERR(priv->clk)) { | 786 | if (IS_ERR(priv->clk)) { |
| 784 | err = PTR_ERR(priv->clk); | 787 | err = PTR_ERR(priv->clk); |
| 785 | dev_err(&pdev->dev, "cannot get peripheral clock: %d\n", err); | 788 | dev_err(&pdev->dev, "cannot get peripheral clock, error %d\n", |
| 789 | err); | ||
| 786 | goto fail_clk; | 790 | goto fail_clk; |
| 787 | } | 791 | } |
| 788 | 792 | ||
| @@ -794,7 +798,7 @@ static int rcar_can_probe(struct platform_device *pdev) | |||
| 794 | priv->can_clk = devm_clk_get(&pdev->dev, clock_names[clock_select]); | 798 | priv->can_clk = devm_clk_get(&pdev->dev, clock_names[clock_select]); |
| 795 | if (IS_ERR(priv->can_clk)) { | 799 | if (IS_ERR(priv->can_clk)) { |
| 796 | err = PTR_ERR(priv->can_clk); | 800 | err = PTR_ERR(priv->can_clk); |
| 797 | dev_err(&pdev->dev, "cannot get CAN clock: %d\n", err); | 801 | dev_err(&pdev->dev, "cannot get CAN clock, error %d\n", err); |
| 798 | goto fail_clk; | 802 | goto fail_clk; |
| 799 | } | 803 | } |
| 800 | 804 | ||
| @@ -823,7 +827,7 @@ static int rcar_can_probe(struct platform_device *pdev) | |||
| 823 | 827 | ||
| 824 | devm_can_led_init(ndev); | 828 | devm_can_led_init(ndev); |
| 825 | 829 | ||
| 826 | dev_info(&pdev->dev, "device registered (reg_base=%p, irq=%u)\n", | 830 | dev_info(&pdev->dev, "device registered (regs @ %p, IRQ%d)\n", |
| 827 | priv->regs, ndev->irq); | ||
