diff options
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/can/dev.c | 27 | ||||
-rw-r--r-- | drivers/net/ethernet/broadcom/genet/bcmgenet.c | 45 | ||||
-rw-r--r-- | drivers/net/ethernet/broadcom/genet/bcmgenet.h | 1 | ||||
-rw-r--r-- | drivers/net/ethernet/broadcom/genet/bcmmii.c | 24 | ||||
-rw-r--r-- | drivers/net/ethernet/broadcom/tg3.c | 10 | ||||
-rw-r--r-- | drivers/net/ethernet/freescale/fec_main.c | 15 |
6 files changed, 73 insertions, 49 deletions
diff --git a/drivers/net/can/dev.c b/drivers/net/can/dev.c index e21f7cc5ae4d..8d6208c0b400 100644 --- a/drivers/net/can/dev.c +++ b/drivers/net/can/dev.c | |||
@@ -21,6 +21,7 @@ | |||
21 | #include <linux/slab.h> | 21 | #include <linux/slab.h> |
22 | #include <linux/netdevice.h> | 22 | #include <linux/netdevice.h> |
23 | #include <linux/if_arp.h> | 23 | #include <linux/if_arp.h> |
24 | #include <linux/workqueue.h> | ||
24 | #include <linux/can.h> | 25 | #include <linux/can.h> |
25 | #include <linux/can/dev.h> | 26 | #include <linux/can/dev.h> |
26 | #include <linux/can/skb.h> | 27 | #include <linux/can/skb.h> |
@@ -501,9 +502,8 @@ EXPORT_SYMBOL_GPL(can_free_echo_skb); | |||
501 | /* | 502 | /* |
502 | * CAN device restart for bus-off recovery | 503 | * CAN device restart for bus-off recovery |
503 | */ | 504 | */ |
504 | static void can_restart(unsigned long data) | 505 | static void can_restart(struct net_device *dev) |
505 | { | 506 | { |
506 | struct net_device *dev = (struct net_device *)data; | ||
507 | struct can_priv *priv = netdev_priv(dev); | 507 | struct can_priv *priv = netdev_priv(dev); |
508 | struct net_device_stats *stats = &dev->stats; | 508 | struct net_device_stats *stats = &dev->stats; |
509 | struct sk_buff *skb; | 509 | struct sk_buff *skb; |
@@ -543,6 +543,14 @@ restart: | |||
543 | netdev_err(dev, "Error %d during restart", err); | 543 | netdev_err(dev, "Error %d during restart", err); |
544 | } | 544 | } |
545 | 545 | ||
546 | static void can_restart_work(struct work_struct *work) | ||
547 | { | ||
548 | struct delayed_work *dwork = to_delayed_work(work); | ||
549 | struct can_priv *priv = container_of(dwork, struct can_priv, restart_work); | ||
550 | |||
551 | can_restart(priv->dev); | ||
552 | } | ||
553 | |||
546 | int can_restart_now(struct net_device *dev) | 554 | int can_restart_now(struct net_device *dev) |
547 | { | 555 | { |
548 | struct can_priv *priv = netdev_priv(dev); | 556 | struct can_priv *priv = netdev_priv(dev); |
@@ -556,8 +564,8 @@ int can_restart_now(struct net_device *dev) | |||
556 | if (priv->state != CAN_STATE_BUS_OFF) | 564 | if (priv->state != CAN_STATE_BUS_OFF) |
557 | return -EBUSY; | 565 | return -EBUSY; |
558 | 566 | ||
559 | /* Runs as soon as possible in the timer context */ | 567 | cancel_delayed_work_sync(&priv->restart_work); |
560 | mod_timer(&priv->restart_timer, jiffies); | 568 | can_restart(dev); |
561 | 569 | ||
562 | return 0; | 570 | return 0; |
563 | } | 571 | } |
@@ -578,8 +586,8 @@ void can_bus_off(struct net_device *dev) | |||
578 | netif_carrier_off(dev); | 586 | netif_carrier_off(dev); |
579 | 587 | ||
580 | if (priv->restart_ms) | 588 | if (priv->restart_ms) |
581 | mod_timer(&priv->restart_timer, | 589 | schedule_delayed_work(&priv->restart_work, |
582 | jiffies + (priv->restart_ms * HZ) / 1000); | 590 | msecs_to_jiffies(priv->restart_ms)); |
583 | } | 591 | } |
584 | EXPORT_SYMBOL_GPL(can_bus_off); | 592 | EXPORT_SYMBOL_GPL(can_bus_off); |
585 | 593 | ||
@@ -688,6 +696,7 @@ struct net_device *alloc_candev(int sizeof_priv, unsigned int echo_skb_max) | |||
688 | return NULL; | 696 | return NULL; |
689 | 697 | ||
690 | priv = netdev_priv(dev); | 698 | priv = netdev_priv(dev); |
699 | priv->dev = dev; | ||
691 | 700 | ||
692 | if (echo_skb_max) { | 701 | if (echo_skb_max) { |
693 | priv->echo_skb_max = echo_skb_max; | 702 | priv->echo_skb_max = echo_skb_max; |
@@ -697,7 +706,7 @@ struct net_device *alloc_candev(int sizeof_priv, unsigned int echo_skb_max) | |||
697 | 706 | ||
698 | priv->state = CAN_STATE_STOPPED; | 707 | priv->state = CAN_STATE_STOPPED; |
699 | 708 | ||
700 | init_timer(&priv->restart_timer); | 709 | INIT_DELAYED_WORK(&priv->restart_work, can_restart_work); |
701 | 710 | ||
702 | return dev; | 711 | return dev; |
703 | } | 712 | } |
@@ -778,8 +787,6 @@ int open_candev(struct net_device *dev) | |||
778 | if (!netif_carrier_ok(dev)) | 787 | if (!netif_carrier_ok(dev)) |
779 | netif_carrier_on(dev); | 788 | netif_carrier_on(dev); |
780 | 789 | ||
781 | setup_timer(&priv->restart_timer, can_restart, (unsigned long)dev); | ||
782 | |||
783 | return 0; | 790 | return 0; |
784 | } | 791 | } |
785 | EXPORT_SYMBOL_GPL(open_candev); | 792 | EXPORT_SYMBOL_GPL(open_candev); |
@@ -794,7 +801,7 @@ void close_candev(struct net_device *dev) | |||
794 | { | 801 | { |
795 | struct can_priv *priv = netdev_priv(dev); | 802 | struct can_priv *priv = netdev_priv(dev); |
796 | 803 | ||
797 | del_timer_sync(&priv->restart_timer); | 804 | cancel_delayed_work_sync(&priv->restart_work); |
798 | can_flush_echo_skb(dev); | 805 | can_flush_echo_skb(dev); |
799 | } | 806 | } |
800 | EXPORT_SYMBOL_GPL(close_candev); | 807 | EXPORT_SYMBOL_GPL(close_candev); |
diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c index 8d4f8495dbb3..541456398dfb 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c | |||
@@ -453,25 +453,29 @@ static inline void bcmgenet_rdma_ring_writel(struct bcmgenet_priv *priv, | |||
453 | static int bcmgenet_get_settings(struct net_device *dev, | 453 | static int bcmgenet_get_settings(struct net_device *dev, |
454 | struct ethtool_cmd *cmd) | 454 | struct ethtool_cmd *cmd) |
455 | { | 455 | { |
456 | struct bcmgenet_priv *priv = netdev_priv(dev); | ||
457 | |||
456 | if (!netif_running(dev)) | 458 | if (!netif_running(dev)) |
457 | return -EINVAL; | 459 | return -EINVAL; |
458 | 460 | ||
459 | if (!dev->phydev) | 461 | if (!priv->phydev) |
460 | return -ENODEV; | 462 | return -ENODEV; |
461 | 463 | ||
462 | return phy_ethtool_gset(dev->phydev, cmd); | 464 | return phy_ethtool_gset(priv->phydev, cmd); |
463 | } | 465 | } |
464 | 466 | ||
465 | static int bcmgenet_set_settings(struct net_device *dev, | 467 | static int bcmgenet_set_settings(struct net_device *dev, |
466 | struct ethtool_cmd *cmd) | 468 | struct ethtool_cmd *cmd) |
467 | { | 469 | { |
470 | struct bcmgenet_priv *priv = netdev_priv(dev); | ||
471 | |||
468 | if (!netif_running(dev)) | 472 | if (!netif_running(dev)) |
469 | return -EINVAL; | 473 | return -EINVAL; |
470 | 474 | ||
471 | if (!dev->phydev) | 475 | if (!priv->phydev) |
472 | return -ENODEV; | 476 | return -ENODEV; |
473 | 477 | ||
474 | return phy_ethtool_sset(dev->phydev, cmd); | 478 | return phy_ethtool_sset(priv->phydev, cmd); |
475 | } | 479 | } |
476 | 480 | ||
477 | static int bcmgenet_set_rx_csum(struct net_device *dev, | 481 | static int bcmgenet_set_rx_csum(struct net_device *dev, |
@@ -937,7 +941,7 @@ static int bcmgenet_get_eee(struct net_device *dev, struct ethtool_eee *e) | |||
937 | e->eee_active = p->eee_active; | 941 | e->eee_active = p->eee_active; |
938 | e->tx_lpi_timer = bcmgenet_umac_readl(priv, UMAC_EEE_LPI_TIMER); | 942 | e->tx_lpi_timer = bcmgenet_umac_readl(priv, UMAC_EEE_LPI_TIMER); |
939 | 943 | ||
940 | return phy_ethtool_get_eee(dev->phydev, e); | 944 | return phy_ethtool_get_eee(priv->phydev, e); |
941 | } | 945 | } |
942 | 946 | ||
943 | static int bcmgenet_set_eee(struct net_device *dev, struct ethtool_eee *e) | 947 | static int bcmgenet_set_eee(struct net_device *dev, struct ethtool_eee *e) |
@@ -954,7 +958,7 @@ static int bcmgenet_set_eee(struct net_device *dev, struct ethtool_eee *e) | |||
954 | if (!p->eee_enabled) { | 958 | if (!p->eee_enabled) { |
955 | bcmgenet_eee_enable_set(dev, false); | 959 | bcmgenet_eee_enable_set(dev, false); |
956 | } else { | 960 | } else { |
957 | ret = phy_init_eee(dev->phydev, 0); | 961 | ret = phy_init_eee(priv->phydev, 0); |
958 | if (ret) { | 962 | if (ret) { |
959 | netif_err(priv, hw, dev, "EEE initialization failed\n"); | 963 | netif_err(priv, hw, dev, "EEE initialization failed\n"); |
960 | return ret; | 964 | return ret; |
@@ -964,12 +968,14 @@ static int bcmgenet_set_eee(struct net_device *dev, struct ethtool_eee *e) | |||
964 | bcmgenet_eee_enable_set(dev, true); | 968 | bcmgenet_eee_enable_set(dev, true); |
965 | } | 969 | } |
966 | 970 | ||
967 | return phy_ethtool_set_eee(dev->phydev, e); | 971 | return phy_ethtool_set_eee(priv->phydev, e); |
968 | } | 972 | } |
969 | 973 | ||
970 | static int bcmgenet_nway_reset(struct net_device *dev) | 974 | static int bcmgenet_nway_reset(struct net_device *dev) |
971 | { | 975 | { |
972 | return genphy_restart_aneg(dev->phydev); | 976 | struct bcmgenet_priv *priv = netdev_priv(dev); |
977 | |||
978 | return genphy_restart_aneg(priv->phydev); | ||
973 | } | 979 | } |
974 | 980 | ||
975 | /* standard ethtool support functions. */ | 981 | /* standard ethtool support functions. */ |
@@ -996,13 +1002,12 @@ static struct ethtool_ops bcmgenet_ethtool_ops = { | |||
996 | static int bcmgenet_power_down(struct bcmgenet_priv *priv, | 1002 | static int bcmgenet_power_down(struct bcmgenet_priv *priv, |
997 | enum bcmgenet_power_mode mode) | 1003 | enum bcmgenet_power_mode mode) |
998 | { | 1004 | { |
999 | struct net_device *ndev = priv->dev; | ||
1000 | int ret = 0; | 1005 | int ret = 0; |
1001 | u32 reg; | 1006 | u32 reg; |
1002 | 1007 | ||
1003 | switch (mode) { | 1008 | switch (mode) { |
1004 | case GENET_POWER_CABLE_SENSE: | 1009 | case GENET_POWER_CABLE_SENSE: |
1005 | phy_detach(ndev->phydev); | 1010 | phy_detach(priv->phydev); |
1006 | break; | 1011 | break; |
1007 | 1012 | ||
1008 | case GENET_POWER_WOL_MAGIC: | 1013 | case GENET_POWER_WOL_MAGIC: |
@@ -1063,6 +1068,7 @@ static void bcmgenet_power_up(struct bcmgenet_priv *priv, | |||
1063 | /* ioctl handle special commands that are not present in ethtool. */ | 1068 | /* ioctl handle special commands that are not present in ethtool. */ |
1064 | static int bcmgenet_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) | 1069 | static int bcmgenet_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) |
1065 | { | 1070 | { |
1071 | struct bcmgenet_priv *priv = netdev_priv(dev); | ||
1066 | int val = 0; | 1072 | int val = 0; |
1067 | 1073 | ||
1068 | if (!netif_running(dev)) | 1074 | if (!netif_running(dev)) |
@@ -1072,10 +1078,10 @@ static int bcmgenet_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) | |||
1072 | case SIOCGMIIPHY: | 1078 | case SIOCGMIIPHY: |
1073 | case SIOCGMIIREG: | 1079 | case SIOCGMIIREG: |
1074 | case SIOCSMIIREG: | 1080 | case SIOCSMIIREG: |
1075 | if (!dev->phydev) | 1081 | if (!priv->phydev) |
1076 | val = -ENODEV; | 1082 | val = -ENODEV; |
1077 | else | 1083 | else |
1078 | val = phy_mii_ioctl(dev->phydev, rq, cmd); | 1084 | val = phy_mii_ioctl(priv->phydev, rq, cmd); |
1079 | break; | 1085 | break; |
1080 | 1086 | ||
1081 | default: | 1087 | default: |
@@ -2458,7 +2464,6 @@ static void bcmgenet_irq_task(struct work_struct *work) | |||
2458 | { | 2464 | { |
2459 | struct bcmgenet_priv *priv = container_of( | 2465 | struct bcmgenet_priv *priv = container_of( |
2460 | work, struct bcmgenet_priv, bcmgenet_irq_work); | 2466 | work, struct bcmgenet_priv, bcmgenet_irq_work); |
2461 | struct net_device *ndev = priv->dev; | ||
2462 | 2467 | ||
2463 | netif_dbg(priv, intr, priv->dev, "%s\n", __func__); | 2468 | netif_dbg(priv, intr, priv->dev, "%s\n", __func__); |
2464 | 2469 | ||
@@ -2471,7 +2476,7 @@ static void bcmgenet_irq_task(struct work_struct *work) | |||
2471 | 2476 | ||
2472 | /* Link UP/DOWN event */ | 2477 | /* Link UP/DOWN event */ |
2473 | if (priv->irq0_stat & UMAC_IRQ_LINK_EVENT) { | 2478 | if (priv->irq0_stat & UMAC_IRQ_LINK_EVENT) { |
2474 | phy_mac_interrupt(ndev->phydev, | 2479 | phy_mac_interrupt(priv->phydev, |
2475 | !!(priv->irq0_stat & UMAC_IRQ_LINK_UP)); | 2480 | !!(priv->irq0_stat & UMAC_IRQ_LINK_UP)); |
2476 | priv->irq0_stat &= ~UMAC_IRQ_LINK_EVENT; | 2481 | priv->irq0_stat &= ~UMAC_IRQ_LINK_EVENT; |
2477 | } | 2482 | } |
@@ -2833,7 +2838,7 @@ static void bcmgenet_netif_start(struct net_device *dev) | |||
2833 | /* Monitor link interrupts now */ | 2838 | /* Monitor link interrupts now */ |
2834 | bcmgenet_link_intr_enable(priv); | 2839 | bcmgenet_link_intr_enable(priv); |
2835 | 2840 | ||
2836 | phy_start(dev->phydev); | 2841 | phy_start(priv->phydev); |
2837 | } | 2842 | } |
2838 | 2843 | ||
2839 | static int bcmgenet_open(struct net_device *dev) | 2844 | static int bcmgenet_open(struct net_device *dev) |
@@ -2932,7 +2937,7 @@ static void bcmgenet_netif_stop(struct net_device *dev) | |||
2932 | struct bcmgenet_priv *priv = netdev_priv(dev); | 2937 | struct bcmgenet_priv *priv = netdev_priv(dev); |
2933 | 2938 | ||
2934 | netif_tx_stop_all_queues(dev); | 2939 | netif_tx_stop_all_queues(dev); |
2935 | phy_stop(dev->phydev); | 2940 | phy_stop(priv->phydev); |
2936 | bcmgenet_intr_disable(priv); | 2941 | bcmgenet_intr_disable(priv); |
2937 | bcmgenet_disable_rx_napi(priv); | 2942 | bcmgenet_disable_rx_napi(priv); |
2938 | bcmgenet_disable_tx_napi(priv); | 2943 | bcmgenet_disable_tx_napi(priv); |
@@ -2958,7 +2963,7 @@ static int bcmgenet_close(struct net_device *dev) | |||
2958 | bcmgenet_netif_stop(dev); | 2963 | bcmgenet_netif_stop(dev); |
2959 | 2964 | ||
2960 | /* Really kill the PHY state machine and disconnect from it */ | 2965 | /* Really kill the PHY state machine and disconnect from it */ |
2961 | phy_disconnect(dev->phydev); | 2966 | phy_disconnect(priv->phydev); |
2962 | 2967 | ||
2963 | /* Disable MAC receive */ | 2968 | /* Disable MAC receive */ |
2964 | umac_enable_set(priv, CMD_RX_EN, false); | 2969 | umac_enable_set(priv, CMD_RX_EN, false); |
@@ -3517,7 +3522,7 @@ static int bcmgenet_suspend(struct device *d) | |||
3517 | 3522 | ||
3518 | bcmgenet_netif_stop(dev); | 3523 | bcmgenet_netif_stop(dev); |
3519 | 3524 | ||
3520 | phy_suspend(dev->phydev); | 3525 | phy_suspend(priv->phydev); |
3521 | 3526 | ||
3522 | netif_device_detach(dev); | 3527 | netif_device_detach(dev); |
3523 | 3528 | ||
@@ -3581,7 +3586,7 @@ static int bcmgenet_resume(struct device *d) | |||
3581 | if (priv->wolopts) | 3586 | if (priv->wolopts) |
3582 | clk_disable_unprepare(priv->clk_wol); | 3587 | clk_disable_unprepare(priv->clk_wol); |
3583 | 3588 | ||
3584 | phy_init_hw(dev->phydev); | 3589 | phy_init_hw(priv->phydev); |
3585 | /* Speed settings must be restored */ | 3590 | /* Speed settings must be restored */ |
3586 | bcmgenet_mii_config(priv->dev); | 3591 | bcmgenet_mii_config(priv->dev); |
3587 | 3592 | ||
@@ -3614,7 +3619,7 @@ static int bcmgenet_resume(struct device *d) | |||
3614 | 3619 | ||
3615 | netif_device_attach(dev); | 3620 | netif_device_attach(dev); |
3616 | 3621 | ||
3617 | phy_resume(dev->phydev); | 3622 | phy_resume(priv->phydev); |
3618 | 3623 | ||
3619 | if (priv->eee.eee_enabled) | 3624 | if (priv->eee.eee_enabled) |
3620 | bcmgenet_eee_enable_set(dev, true); | 3625 | bcmgenet_eee_enable_set(dev, true); |
diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.h b/drivers/net/ethernet/broadcom/genet/bcmgenet.h index 0f0868c56f05..1e2dc34d331a 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.h +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.h | |||
@@ -597,6 +597,7 @@ struct bcmgenet_priv { | |||
597 | 597 | ||
598 | /* MDIO bus variables */ | 598 | /* MDIO bus variables */ |
599 | wait_queue_head_t wq; | 599 | wait_queue_head_t wq; |
600 | struct phy_device *phydev; | ||
600 | bool internal_phy; | 601 | bool internal_phy; |
601 | struct device_node *phy_dn; | 602 | struct device_node *phy_dn; |
602 | struct device_node *mdio_dn; | 603 | struct device_node *mdio_dn; |
diff --git a/drivers/net/ethernet/broadcom/genet/bcmmii.c b/drivers/net/ethernet/broadcom/genet/bcmmii.c index e907acd81da9..457c3bc8cfff 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmmii.c +++ b/drivers/net/ethernet/broadcom/genet/bcmmii.c | |||
@@ -86,7 +86,7 @@ static int bcmgenet_mii_write(struct mii_bus *bus, int phy_id, | |||
86 | void bcmgenet_mii_setup(struct net_device *dev) | 86 | void bcmgenet_mii_setup(struct net_device *dev) |
87 | { | 87 | { |
88 | struct bcmgenet_priv *priv = netdev_priv(dev); | 88 | struct bcmgenet_priv *priv = netdev_priv(dev); |
89 | struct phy_device *phydev = dev->phydev; | 89 | struct phy_device *phydev = priv->phydev; |
90 | u32 reg, cmd_bits = 0; | 90 | u32 reg, cmd_bits = 0; |
91 | bool status_changed = false; | 91 | bool status_changed = false; |
92 | 92 | ||
@@ -183,9 +183,9 @@ void bcmgenet_mii_reset(struct net_device *dev) | |||
183 | if (GENET_IS_V4(priv)) | 183 | if (GENET_IS_V4(priv)) |
184 | return; | 184 | return; |
185 | 185 | ||
186 | if (dev->phydev) { | 186 | if (priv->phydev) { |
187 | phy_init_hw(dev->phydev); | 187 | phy_init_hw(priv->phydev); |
188 | phy_start_aneg(dev->phydev); | 188 | phy_start_aneg(priv->phydev); |
189 | } | 189 | } |
190 | } | 190 | } |
191 | 191 | ||
@@ -236,7 +236,6 @@ static void bcmgenet_internal_phy_setup(struct net_device *dev) | |||
236 | 236 | ||
237 | static void bcmgenet_moca_phy_setup(struct bcmgenet_priv *priv) | 237 | static void bcmgenet_moca_phy_setup(struct bcmgenet_priv *priv) |
238 | { | 238 | { |
239 | struct net_device *ndev = priv->dev; | ||
240 | u32 reg; | 239 | u32 reg; |
241 | 240 | ||
242 | /* Speed settings are set in bcmgenet_mii_setup() */ | 241 | /* Speed settings are set in bcmgenet_mii_setup() */ |
@@ -245,14 +244,14 @@ static void bcmgenet_moca_phy_setup(struct bcmgenet_priv *priv) | |||
245 | bcmgenet_sys_writel(priv, reg, SYS_PORT_CTRL); | 244 | bcmgenet_sys_writel(priv, reg, SYS_PORT_CTRL); |
246 | 245 | ||
247 | if (priv->hw_params->flags & GENET_HAS_MOCA_LINK_DET) | 246 | if (priv->hw_params->flags & GENET_HAS_MOCA_LINK_DET) |
248 | fixed_phy_set_link_update(ndev->phydev, | 247 | fixed_phy_set_link_update(priv->phydev, |
249 | bcmgenet_fixed_phy_link_update); | 248 | bcmgenet_fixed_phy_link_update); |
250 | } | 249 | } |
251 | 250 | ||
252 | int bcmgenet_mii_config(struct net_device *dev) | 251 | int bcmgenet_mii_config(struct net_device *dev) |
253 | { | 252 | { |
254 | struct bcmgenet_priv *priv = netdev_priv(dev); | 253 | struct bcmgenet_priv *priv = netdev_priv(dev); |
255 | struct phy_device *phydev = dev->phydev; | 254 | struct phy_device *phydev = priv->phydev; |
256 | struct device *kdev = &priv->pdev->dev; | 255 | struct device *kdev = &priv->pdev->dev; |
257 | const char *phy_name = NULL; | 256 | const char *phy_name = NULL; |
258 | u32 id_mode_dis = 0; | 257 | u32 id_mode_dis = 0; |
@@ -303,7 +302,7 @@ int bcmgenet_mii_config(struct net_device *dev) | |||
303 | * capabilities, use that knowledge to also configure the | 302 | * capabilities, use that knowledge to also configure the |
304 | * Reverse MII interface correctly. | 303 | * Reverse MII interface correctly. |
305 | */ | 304 | */ |
306 | if ((phydev->supported & PHY_BASIC_FEATURES) == | 305 | if ((priv->phydev->supported & PHY_BASIC_FEATURES) == |
307 | PHY_BASIC_FEATURES) | 306 | PHY_BASIC_FEATURES) |
308 | port_ctrl = PORT_MODE_EXT_RVMII_25; | 307 | port_ctrl = PORT_MODE_EXT_RVMII_25; |
309 | else | 308 | else |
@@ -372,7 +371,7 @@ int bcmgenet_mii_probe(struct net_device *dev) | |||
372 | return -ENODEV; | 371 | return -ENODEV; |
373 | } | 372 | } |
374 | } else { | 373 | } else { |
375 | phydev = dev->phydev; | 374 | phydev = priv->phydev; |
376 | phydev->dev_flags = phy_flags; | 375 | phydev->dev_flags = phy_flags; |
377 | 376 | ||
378 | ret = phy_connect_direct(dev, phydev, bcmgenet_mii_setup, | 377 | ret = phy_connect_direct(dev, phydev, bcmgenet_mii_setup, |
@@ -383,6 +382,8 @@ int bcmgenet_mii_probe(struct net_device *dev) | |||
383 | } | 382 | } |
384 | } | 383 | } |
385 | 384 | ||
385 | priv->phydev = phydev; | ||
386 | |||
386 | /* Configure port multiplexer based on what the probed PHY device since | 387 | /* Configure port multiplexer based on what the probed PHY device since |
387 | * reading the 'max-speed' property determines the maximum supported | 388 | * reading the 'max-speed' property determines the maximum supported |
388 | * PHY speed which is needed for bcmgenet_mii_config() to configure | 389 | * PHY speed which is needed for bcmgenet_mii_config() to configure |
@@ -390,7 +391,7 @@ int bcmgenet_mii_probe(struct net_device *dev) | |||
390 | */ | 391 | */ |
391 | ret = bcmgenet_mii_config(dev); | 392 | ret = bcmgenet_mii_config(dev); |
392 | if (ret) { | 393 | if (ret) { |
393 | phy_disconnect(phydev); | 394 | phy_disconnect(priv->phydev); |
394 | return ret; | 395 | return ret; |
395 | } | 396 | } |
396 | 397 | ||
@@ -400,7 +401,7 @@ int bcmgenet_mii_probe(struct net_device *dev) | |||
400 | * Ethernet MAC ISRs | 401 | * Ethernet MAC ISRs |
401 | */ | 402 | */ |
402 | if (priv->internal_phy) | 403 | if (priv->internal_phy) |
403 | phydev->irq = PHY_IGNORE_INTERRUPT; | 404 | priv->phydev->irq = PHY_IGNORE_INTERRUPT; |
404 | 405 | ||
405 | return 0; | 406 | return 0; |
406 | } | 407 | } |
@@ -605,6 +606,7 @@ static int bcmgenet_mii_pd_init(struct bcmgenet_priv *priv) | |||
605 | 606 | ||
606 | } | 607 | } |
607 | 608 | ||
609 | priv->phydev = phydev; | ||
608 | priv->phy_interface = pd->phy_interface; | 610 | priv->phy_interface = pd->phy_interface; |
609 | 611 | ||
610 | return 0; | 612 | return 0; |
diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c index a2551bcd1027..ea967df4b202 100644 --- a/drivers/net/ethernet/broadcom/tg3.c +++ b/drivers/net/ethernet/broadcom/tg3.c | |||
@@ -18122,14 +18122,14 @@ static pci_ers_result_t tg3_io_error_detected(struct pci_dev *pdev, | |||
18122 | 18122 | ||
18123 | rtnl_lock(); | 18123 | rtnl_lock(); |
18124 | 18124 | ||
18125 | /* We needn't recover from permanent error */ | ||
18126 | if (state == pci_channel_io_frozen) | ||
18127 | tp->pcierr_recovery = true; | ||
18128 | |||
18129 | /* We probably don't have netdev yet */ | 18125 | /* We probably don't have netdev yet */ |
18130 | if (!netdev || !netif_running(netdev)) | 18126 | if (!netdev || !netif_running(netdev)) |
18131 | goto done; | 18127 | goto done; |
18132 | 18128 | ||
18129 | /* We needn't recover from permanent error */ | ||
18130 | if (state == pci_channel_io_frozen) | ||
18131 | tp->pcierr_recovery = true; | ||
18132 | |||
18133 | tg3_phy_stop(tp); | 18133 | tg3_phy_stop(tp); |
18134 | 18134 | ||
18135 | tg3_netif_stop(tp); | 18135 | tg3_netif_stop(tp); |
@@ -18226,7 +18226,7 @@ static void tg3_io_resume(struct pci_dev *pdev) | |||
18226 | 18226 | ||
18227 | rtnl_lock(); | 18227 | rtnl_lock(); |
18228 | 18228 | ||
18229 | if (!netif_running(netdev)) | 18229 | if (!netdev || !netif_running(netdev)) |
18230 | goto done; | 18230 | goto done; |
18231 | 18231 | ||
18232 | tg3_full_lock(tp, 0); | 18232 | tg3_full_lock(tp, 0); |
diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c index 01f7e811739b..692ee248e486 100644 --- a/drivers/net/ethernet/freescale/fec_main.c +++ b/drivers/net/ethernet/freescale/fec_main.c | |||
@@ -89,10 +89,10 @@ static struct platform_device_id fec_devtype[] = { | |||
89 | .driver_data = 0, | 89 | .driver_data = 0, |
90 | }, { | 90 | }, { |
91 | .name = "imx25-fec", | 91 | .name = "imx25-fec", |
92 | .driver_data = FEC_QUIRK_USE_GASKET | FEC_QUIRK_HAS_RACC, | 92 | .driver_data = FEC_QUIRK_USE_GASKET, |
93 | }, { | 93 | }, { |
94 | .name = "imx27-fec", | 94 | .name = "imx27-fec", |
95 | .driver_data = FEC_QUIRK_HAS_RACC, | 95 | .driver_data = 0, |
96 | }, { | 96 | }, { |
97 | .name = "imx28-fec", | 97 | .name = "imx28-fec", |
98 | .driver_data = FEC_QUIRK_ENET_MAC | FEC_QUIRK_SWAP_FRAME | | 98 | .driver_data = FEC_QUIRK_ENET_MAC | FEC_QUIRK_SWAP_FRAME | |
@@ -180,6 +180,7 @@ MODULE_PARM_DESC(macaddr, "FEC Ethernet MAC address"); | |||
180 | /* FEC receive acceleration */ | 180 | /* FEC receive acceleration */ |
181 | #define FEC_RACC_IPDIS (1 << 1) | 181 | #define FEC_RACC_IPDIS (1 << 1) |
182 | #define FEC_RACC_PRODIS (1 << 2) | 182 | #define FEC_RACC_PRODIS (1 << 2) |
183 | #define FEC_RACC_SHIFT16 BIT(7) | ||
183 | #define FEC_RACC_OPTIONS (FEC_RACC_IPDIS | FEC_RACC_PRODIS) | 184 | #define FEC_RACC_OPTIONS (FEC_RACC_IPDIS | FEC_RACC_PRODIS) |
184 | 185 | ||
185 | /* | 186 | /* |
@@ -945,9 +946,11 @@ fec_restart(struct net_device *ndev) | |||
945 | 946 | ||
946 | #if !defined(CONFIG_M5272) | 947 | #if !defined(CONFIG_M5272) |
947 | if (fep->quirks & FEC_QUIRK_HAS_RACC) { | 948 | if (fep->quirks & FEC_QUIRK_HAS_RACC) { |
948 | /* set RX checksum */ | ||
949 | val = readl(fep->hwp + FEC_RACC); | 949 | val = readl(fep->hwp + FEC_RACC); |
950 | /* align IP header */ | ||
951 | val |= FEC_RACC_SHIFT16; | ||
950 | if (fep->csum_flags & FLAG_RX_CSUM_ENABLED) | 952 | if (fep->csum_flags & FLAG_RX_CSUM_ENABLED) |
953 | /* set RX checksum */ | ||
951 | val |= FEC_RACC_OPTIONS; | 954 | val |= FEC_RACC_OPTIONS; |
952 | else | 955 | else |
953 | val &= ~FEC_RACC_OPTIONS; | 956 | val &= ~FEC_RACC_OPTIONS; |
@@ -1428,6 +1431,12 @@ fec_enet_rx_queue(struct net_device *ndev, int budget, u16 queue_id) | |||
1428 | prefetch(skb->data - NET_IP_ALIGN); | 1431 | prefetch(skb->data - NET_IP_ALIGN); |
1429 | skb_put(skb, pkt_len - 4); | 1432 | skb_put(skb, pkt_len - 4); |
1430 | data = skb->data; | 1433 | data = skb->data; |
1434 | |||
1435 | #if !defined(CONFIG_M5272) | ||
1436 | if (fep->quirks & FEC_QUIRK_HAS_RACC) | ||
1437 | data = skb_pull_inline(skb, 2); | ||
1438 | #endif | ||
1439 | |||
1431 | if (!is_copybreak && need_swap) | 1440 | if (!is_copybreak && need_swap) |
1432 | swap_buffer(data, pkt_len); | 1441 | swap_buffer(data, pkt_len); |
1433 | 1442 | ||