diff options
Diffstat (limited to 'drivers/net')
22 files changed, 163 insertions, 160 deletions
diff --git a/drivers/net/ethernet/3com/3c59x.c b/drivers/net/ethernet/3com/3c59x.c index 1282f048dfad..e463d1036829 100644 --- a/drivers/net/ethernet/3com/3c59x.c +++ b/drivers/net/ethernet/3com/3c59x.c | |||
@@ -1841,7 +1841,7 @@ vortex_timer(unsigned long data) | |||
1841 | ok = 1; | 1841 | ok = 1; |
1842 | } | 1842 | } |
1843 | 1843 | ||
1844 | if (!netif_carrier_ok(dev)) | 1844 | if (dev->flags & IFF_SLAVE || !netif_carrier_ok(dev)) |
1845 | next_tick = 5*HZ; | 1845 | next_tick = 5*HZ; |
1846 | 1846 | ||
1847 | if (vp->medialock) | 1847 | if (vp->medialock) |
diff --git a/drivers/net/ethernet/broadcom/bcm63xx_enet.c b/drivers/net/ethernet/broadcom/bcm63xx_enet.c index 986019b2c849..c7ca7ec065ee 100644 --- a/drivers/net/ethernet/broadcom/bcm63xx_enet.c +++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.c | |||
@@ -797,7 +797,7 @@ static int bcm_enet_open(struct net_device *dev) | |||
797 | if (priv->has_phy) { | 797 | if (priv->has_phy) { |
798 | /* connect to PHY */ | 798 | /* connect to PHY */ |
799 | snprintf(phy_id, sizeof(phy_id), PHY_ID_FMT, | 799 | snprintf(phy_id, sizeof(phy_id), PHY_ID_FMT, |
800 | priv->mac_id ? "1" : "0", priv->phy_id); | 800 | priv->mii_bus->id, priv->phy_id); |
801 | 801 | ||
802 | phydev = phy_connect(dev, phy_id, bcm_enet_adjust_phy_link, 0, | 802 | phydev = phy_connect(dev, phy_id, bcm_enet_adjust_phy_link, 0, |
803 | PHY_INTERFACE_MODE_MII); | 803 | PHY_INTERFACE_MODE_MII); |
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c index 8e809c1408b4..644d8e9f61b1 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c | |||
@@ -117,10 +117,6 @@ static int dropless_fc; | |||
117 | module_param(dropless_fc, int, 0); | 117 | module_param(dropless_fc, int, 0); |
118 | MODULE_PARM_DESC(dropless_fc, " Pause on exhausted host ring"); | 118 | MODULE_PARM_DESC(dropless_fc, " Pause on exhausted host ring"); |
119 | 119 | ||
120 | static int poll; | ||
121 | module_param(poll, int, 0); | ||
122 | MODULE_PARM_DESC(poll, " Use polling (for debug)"); | ||
123 | |||
124 | static int mrrs = -1; | 120 | static int mrrs = -1; |
125 | module_param(mrrs, int, 0); | 121 | module_param(mrrs, int, 0); |
126 | MODULE_PARM_DESC(mrrs, " Force Max Read Req Size (0..3) (for debug)"); | 122 | MODULE_PARM_DESC(mrrs, " Force Max Read Req Size (0..3) (for debug)"); |
@@ -4853,20 +4849,11 @@ void bnx2x_drv_pulse(struct bnx2x *bp) | |||
4853 | 4849 | ||
4854 | static void bnx2x_timer(unsigned long data) | 4850 | static void bnx2x_timer(unsigned long data) |
4855 | { | 4851 | { |
4856 | u8 cos; | ||
4857 | struct bnx2x *bp = (struct bnx2x *) data; | 4852 | struct bnx2x *bp = (struct bnx2x *) data; |
4858 | 4853 | ||
4859 | if (!netif_running(bp->dev)) | 4854 | if (!netif_running(bp->dev)) |
4860 | return; | 4855 | return; |
4861 | 4856 | ||
4862 | if (poll) { | ||
4863 | struct bnx2x_fastpath *fp = &bp->fp[0]; | ||
4864 | |||
4865 | for_each_cos_in_tx_queue(fp, cos) | ||
4866 | bnx2x_tx_int(bp, &fp->txdata[cos]); | ||
4867 | bnx2x_rx_int(fp, 1000); | ||
4868 | } | ||
4869 | |||
4870 | if (!BP_NOMCP(bp)) { | 4857 | if (!BP_NOMCP(bp)) { |
4871 | int mb_idx = BP_FW_MB_IDX(bp); | 4858 | int mb_idx = BP_FW_MB_IDX(bp); |
4872 | u32 drv_pulse; | 4859 | u32 drv_pulse; |
@@ -10131,7 +10118,6 @@ static void __devinit bnx2x_set_modes_bitmap(struct bnx2x *bp) | |||
10131 | static int __devinit bnx2x_init_bp(struct bnx2x *bp) | 10118 | static int __devinit bnx2x_init_bp(struct bnx2x *bp) |
10132 | { | 10119 | { |
10133 | int func; | 10120 | int func; |
10134 | int timer_interval; | ||
10135 | int rc; | 10121 | int rc; |
10136 | 10122 | ||
10137 | mutex_init(&bp->port.phy_mutex); | 10123 | mutex_init(&bp->port.phy_mutex); |
@@ -10199,8 +10185,7 @@ static int __devinit bnx2x_init_bp(struct bnx2x *bp) | |||
10199 | bp->tx_ticks = (50 / BNX2X_BTR) * BNX2X_BTR; | 10185 | bp->tx_ticks = (50 / BNX2X_BTR) * BNX2X_BTR; |
10200 | bp->rx_ticks = (25 / BNX2X_BTR) * BNX2X_BTR; | 10186 | bp->rx_ticks = (25 / BNX2X_BTR) * BNX2X_BTR; |
10201 | 10187 | ||
10202 | timer_interval = (CHIP_REV_IS_SLOW(bp) ? 5*HZ : HZ); | 10188 | bp->current_interval = CHIP_REV_IS_SLOW(bp) ? 5*HZ : HZ; |
10203 | bp->current_interval = (poll ? poll : timer_interval); | ||
10204 | 10189 | ||
10205 | init_timer(&bp->timer); | 10190 | init_timer(&bp->timer); |
10206 | bp->timer.expires = jiffies + bp->current_interval; | 10191 | bp->timer.expires = jiffies + bp->current_interval; |
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c index abd310d71512..14c961beaadb 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c | |||
@@ -1006,14 +1006,14 @@ static int bnx2x_storm_stats_update(struct bnx2x *bp) | |||
1006 | estats->rx_stat_ifhcinbadoctets_lo); | 1006 | estats->rx_stat_ifhcinbadoctets_lo); |
1007 | 1007 | ||
1008 | ADD_64(estats->total_bytes_received_hi, | 1008 | ADD_64(estats->total_bytes_received_hi, |
1009 | tfunc->rcv_error_bytes.hi, | 1009 | le32_to_cpu(tfunc->rcv_error_bytes.hi), |
1010 | estats->total_bytes_received_lo, | 1010 | estats->total_bytes_received_lo, |
1011 | tfunc->rcv_error_bytes.lo); | 1011 | le32_to_cpu(tfunc->rcv_error_bytes.lo)); |
1012 | 1012 | ||
1013 | ADD_64(estats->error_bytes_received_hi, | 1013 | ADD_64(estats->error_bytes_received_hi, |
1014 | tfunc->rcv_error_bytes.hi, | 1014 | le32_to_cpu(tfunc->rcv_error_bytes.hi), |
1015 | estats->error_bytes_received_lo, | 1015 | estats->error_bytes_received_lo, |
1016 | tfunc->rcv_error_bytes.lo); | 1016 | le32_to_cpu(tfunc->rcv_error_bytes.lo)); |
1017 | 1017 | ||
1018 | UPDATE_ESTAT(etherstatsoverrsizepkts, rx_stat_dot3statsframestoolong); | 1018 | UPDATE_ESTAT(etherstatsoverrsizepkts, rx_stat_dot3statsframestoolong); |
1019 | 1019 | ||
diff --git a/drivers/net/ethernet/freescale/fec.c b/drivers/net/ethernet/freescale/fec.c index 0ee2ca7baaf3..a12b3f5bc025 100644 --- a/drivers/net/ethernet/freescale/fec.c +++ b/drivers/net/ethernet/freescale/fec.c | |||
@@ -986,7 +986,7 @@ static int fec_enet_mii_probe(struct net_device *ndev) | |||
986 | printk(KERN_INFO | 986 | printk(KERN_INFO |
987 | "%s: no PHY, assuming direct connection to switch\n", | 987 | "%s: no PHY, assuming direct connection to switch\n", |
988 | ndev->name); | 988 | ndev->name); |
989 | strncpy(mdio_bus_id, "0", MII_BUS_ID_SIZE); | 989 | strncpy(mdio_bus_id, "fixed-0", MII_BUS_ID_SIZE); |
990 | phy_id = 0; | 990 | phy_id = 0; |
991 | } | 991 | } |
992 | 992 | ||
diff --git a/drivers/net/ethernet/mellanox/mlx4/eq.c b/drivers/net/ethernet/mellanox/mlx4/eq.c index 55d7bd4e210a..8fa41f3082cf 100644 --- a/drivers/net/ethernet/mellanox/mlx4/eq.c +++ b/drivers/net/ethernet/mellanox/mlx4/eq.c | |||
@@ -815,8 +815,9 @@ int mlx4_init_eq_table(struct mlx4_dev *dev) | |||
815 | int err; | 815 | int err; |
816 | int i; | 816 | int i; |
817 | 817 | ||
818 | priv->eq_table.uar_map = kcalloc(sizeof *priv->eq_table.uar_map, | 818 | priv->eq_table.uar_map = kcalloc(mlx4_num_eq_uar(dev), |
819 | mlx4_num_eq_uar(dev), GFP_KERNEL); | 819 | sizeof *priv->eq_table.uar_map, |
820 | GFP_KERNEL); | ||
820 | if (!priv->eq_table.uar_map) { | 821 | if (!priv->eq_table.uar_map) { |
821 | err = -ENOMEM; | 822 | err = -ENOMEM; |
822 | goto err_out_free; | 823 | goto err_out_free; |
diff --git a/drivers/net/ethernet/micrel/ks8851.c b/drivers/net/ethernet/micrel/ks8851.c index 42a6a20efb15..c722aa607d07 100644 --- a/drivers/net/ethernet/micrel/ks8851.c +++ b/drivers/net/ethernet/micrel/ks8851.c | |||
@@ -583,7 +583,7 @@ static void ks8851_rx_pkts(struct ks8851_net *ks) | |||
583 | ks8851_dbg_dumpkkt(ks, rxpkt); | 583 | ks8851_dbg_dumpkkt(ks, rxpkt); |
584 | 584 | ||
585 | skb->protocol = eth_type_trans(skb, ks->netdev); | 585 | skb->protocol = eth_type_trans(skb, ks->netdev); |
586 | netif_rx(skb); | 586 | netif_rx_ni(skb); |
587 | 587 | ||
588 | ks->netdev->stats.rx_packets++; | 588 | ks->netdev->stats.rx_packets++; |
589 | ks->netdev->stats.rx_bytes += rxlen; | 589 | ks->netdev->stats.rx_bytes += rxlen; |
diff --git a/drivers/net/ethernet/micrel/ks8851_mll.c b/drivers/net/ethernet/micrel/ks8851_mll.c index 180460f4e41f..10d57983df05 100644 --- a/drivers/net/ethernet/micrel/ks8851_mll.c +++ b/drivers/net/ethernet/micrel/ks8851_mll.c | |||
@@ -394,7 +394,6 @@ union ks_tx_hdr { | |||
394 | * @msg_enable : The message flags controlling driver output (see ethtool). | 394 | * @msg_enable : The message flags controlling driver output (see ethtool). |
395 | * @frame_cnt : number of frames received. | 395 | * @frame_cnt : number of frames received. |
396 | * @bus_width : i/o bus width. | 396 | * @bus_width : i/o bus width. |
397 | * @irq : irq number assigned to this device. | ||
398 | * @rc_rxqcr : Cached copy of KS_RXQCR. | 397 | * @rc_rxqcr : Cached copy of KS_RXQCR. |
399 | * @rc_txcr : Cached copy of KS_TXCR. | 398 | * @rc_txcr : Cached copy of KS_TXCR. |
400 | * @rc_ier : Cached copy of KS_IER. | 399 | * @rc_ier : Cached copy of KS_IER. |
@@ -441,7 +440,6 @@ struct ks_net { | |||
441 | u32 msg_enable; | 440 | u32 msg_enable; |
442 | u32 frame_cnt; | 441 | u32 frame_cnt; |
443 | int bus_width; | 442 | int bus_width; |
444 | int irq; | ||
445 | 443 | ||
446 | u16 rc_rxqcr; | 444 | u16 rc_rxqcr; |
447 | u16 rc_txcr; | 445 | u16 rc_txcr; |
@@ -907,10 +905,10 @@ static int ks_net_open(struct net_device *netdev) | |||
907 | netif_dbg(ks, ifup, ks->netdev, "%s - entry\n", __func__); | 905 | netif_dbg(ks, ifup, ks->netdev, "%s - entry\n", __func__); |
908 | 906 | ||
909 | /* reset the HW */ | 907 | /* reset the HW */ |
910 | err = request_irq(ks->irq, ks_irq, KS_INT_FLAGS, DRV_NAME, netdev); | 908 | err = request_irq(netdev->irq, ks_irq, KS_INT_FLAGS, DRV_NAME, netdev); |
911 | 909 | ||
912 | if (err) { | 910 | if (err) { |
913 | pr_err("Failed to request IRQ: %d: %d\n", ks->irq, err); | 911 | pr_err("Failed to request IRQ: %d: %d\n", netdev->irq, err); |
914 | return err; | 912 | return err; |
915 | } | 913 | } |
916 | 914 | ||
@@ -955,7 +953,7 @@ static int ks_net_stop(struct net_device *netdev) | |||
955 | 953 | ||
956 | /* set powermode to soft power down to save power */ | 954 | /* set powermode to soft power down to save power */ |
957 | ks_set_powermode(ks, PMECR_PM_SOFTDOWN); | 955 | ks_set_powermode(ks, PMECR_PM_SOFTDOWN); |
958 | free_irq(ks->irq, netdev); | 956 | free_irq(netdev->irq, netdev); |
959 | mutex_unlock(&ks->lock); | 957 | mutex_unlock(&ks->lock); |
960 | return 0; | 958 | return 0; |
961 | } | 959 | } |
@@ -1544,10 +1542,10 @@ static int __devinit ks8851_probe(struct platform_device *pdev) | |||
1544 | if (!ks->hw_addr_cmd) | 1542 | if (!ks->hw_addr_cmd) |
1545 | goto err_ioremap1; | 1543 | goto err_ioremap1; |
1546 | 1544 | ||
1547 | ks->irq = platform_get_irq(pdev, 0); | 1545 | netdev->irq = platform_get_irq(pdev, 0); |
1548 | 1546 | ||
1549 | if (ks->irq < 0) { | 1547 | if (netdev->irq < 0) { |
1550 | err = ks->irq; | 1548 | err = netdev->irq; |
1551 | goto err_get_irq; | 1549 | goto err_get_irq; |
1552 | } | 1550 | } |
1553 | 1551 | ||
diff --git a/drivers/net/ethernet/octeon/octeon_mgmt.c b/drivers/net/ethernet/octeon/octeon_mgmt.c index 212f43b308a3..cd827ff4a021 100644 --- a/drivers/net/ethernet/octeon/octeon_mgmt.c +++ b/drivers/net/ethernet/octeon/octeon_mgmt.c | |||
@@ -670,7 +670,7 @@ static void octeon_mgmt_adjust_link(struct net_device *netdev) | |||
670 | static int octeon_mgmt_init_phy(struct net_device *netdev) | 670 | static int octeon_mgmt_init_phy(struct net_device *netdev) |
671 | { | 671 | { |
672 | struct octeon_mgmt *p = netdev_priv(netdev); | 672 | struct octeon_mgmt *p = netdev_priv(netdev); |
673 | char phy_id[20]; | 673 | char phy_id[MII_BUS_ID_SIZE + 3]; |
674 | 674 | ||
675 | if (octeon_is_simulation()) { | 675 | if (octeon_is_simulation()) { |
676 | /* No PHYs in the simulator. */ | 676 | /* No PHYs in the simulator. */ |
@@ -678,7 +678,7 @@ static int octeon_mgmt_init_phy(struct net_device *netdev) | |||
678 | return 0; | 678 | return 0; |
679 | } | 679 | } |
680 | 680 | ||
681 | snprintf(phy_id, sizeof(phy_id), PHY_ID_FMT, "0", p->port); | 681 | snprintf(phy_id, sizeof(phy_id), PHY_ID_FMT, "mdio-octeon-0", p->port); |
682 | 682 | ||
683 | p->phydev = phy_connect(netdev, phy_id, octeon_mgmt_adjust_link, 0, | 683 | p->phydev = phy_connect(netdev, phy_id, octeon_mgmt_adjust_link, 0, |
684 | PHY_INTERFACE_MODE_MII); | 684 | PHY_INTERFACE_MODE_MII); |
diff --git a/drivers/net/ethernet/stmicro/stmmac/common.h b/drivers/net/ethernet/stmicro/stmmac/common.h index d0b814ef0675..0319d640f728 100644 --- a/drivers/net/ethernet/stmicro/stmmac/common.h +++ b/drivers/net/ethernet/stmicro/stmmac/common.h | |||
@@ -67,6 +67,7 @@ struct stmmac_extra_stats { | |||
67 | unsigned long ipc_csum_error; | 67 | unsigned long ipc_csum_error; |
68 | unsigned long rx_collision; | 68 | unsigned long rx_collision; |
69 | unsigned long rx_crc; | 69 | unsigned long rx_crc; |
70 | unsigned long dribbling_bit; | ||
70 | unsigned long rx_length; | 71 | unsigned long rx_length; |
71 | unsigned long rx_mii; | 72 | unsigned long rx_mii; |
72 | unsigned long rx_multicast; | 73 | unsigned long rx_multicast; |
diff --git a/drivers/net/ethernet/stmicro/stmmac/enh_desc.c b/drivers/net/ethernet/stmicro/stmmac/enh_desc.c index d87976364ec5..ad1b627f8ec2 100644 --- a/drivers/net/ethernet/stmicro/stmmac/enh_desc.c +++ b/drivers/net/ethernet/stmicro/stmmac/enh_desc.c | |||
@@ -201,7 +201,7 @@ static int enh_desc_get_rx_status(void *data, struct stmmac_extra_stats *x, | |||
201 | 201 | ||
202 | if (unlikely(p->des01.erx.dribbling)) { | 202 | if (unlikely(p->des01.erx.dribbling)) { |
203 | CHIP_DBG(KERN_ERR "GMAC RX: dribbling error\n"); | 203 | CHIP_DBG(KERN_ERR "GMAC RX: dribbling error\n"); |
204 | ret = discard_frame; | 204 | x->dribbling_bit++; |
205 | } | 205 | } |
206 | if (unlikely(p->des01.erx.sa_filter_fail)) { | 206 | if (unlikely(p->des01.erx.sa_filter_fail)) { |
207 | CHIP_DBG(KERN_ERR "GMAC RX : Source Address filter fail\n"); | 207 | CHIP_DBG(KERN_ERR "GMAC RX : Source Address filter fail\n"); |
diff --git a/drivers/net/ethernet/stmicro/stmmac/norm_desc.c b/drivers/net/ethernet/stmicro/stmmac/norm_desc.c index fda5d2b31d3a..25953bb45a73 100644 --- a/drivers/net/ethernet/stmicro/stmmac/norm_desc.c +++ b/drivers/net/ethernet/stmicro/stmmac/norm_desc.c | |||
@@ -104,7 +104,7 @@ static int ndesc_get_rx_status(void *data, struct stmmac_extra_stats *x, | |||
104 | ret = discard_frame; | 104 | ret = discard_frame; |
105 | } | 105 | } |
106 | if (unlikely(p->des01.rx.dribbling)) | 106 | if (unlikely(p->des01.rx.dribbling)) |
107 | ret = discard_frame; | 107 | x->dribbling_bit++; |
108 | 108 | ||
109 | if (unlikely(p->des01.rx.length_error)) { | 109 | if (unlikely(p->des01.rx.length_error)) { |
110 | x->rx_length++; | 110 | x->rx_length++; |
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac.h b/drivers/net/ethernet/stmicro/stmmac/stmmac.h index 120740020e2c..b4b095fdcf29 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac.h +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac.h | |||
@@ -21,7 +21,7 @@ | |||
21 | *******************************************************************************/ | 21 | *******************************************************************************/ |
22 | 22 | ||
23 | #define STMMAC_RESOURCE_NAME "stmmaceth" | 23 | #define STMMAC_RESOURCE_NAME "stmmaceth" |
24 | #define DRV_MODULE_VERSION "Dec_2011" | 24 | #define DRV_MODULE_VERSION "Feb_2012" |
25 | #include <linux/stmmac.h> | 25 | #include <linux/stmmac.h> |
26 | #include <linux/phy.h> | 26 | #include <linux/phy.h> |
27 | #include "common.h" | 27 | #include "common.h" |
@@ -97,4 +97,5 @@ int stmmac_resume(struct net_device *ndev); | |||
97 | int stmmac_suspend(struct net_device *ndev); | 97 | int stmmac_suspend(struct net_device *ndev); |
98 | int stmmac_dvr_remove(struct net_device *ndev); | 98 | int stmmac_dvr_remove(struct net_device *ndev); |
99 | struct stmmac_priv *stmmac_dvr_probe(struct device *device, | 99 | struct stmmac_priv *stmmac_dvr_probe(struct device *device, |
100 | struct plat_stmmacenet_data *plat_dat); | 100 | struct plat_stmmacenet_data *plat_dat, |
101 | void __iomem *addr); | ||
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c index 9573303a706b..f98e1511660f 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c | |||
@@ -47,23 +47,25 @@ struct stmmac_stats { | |||
47 | offsetof(struct stmmac_priv, xstats.m)} | 47 | offsetof(struct stmmac_priv, xstats.m)} |
48 | 48 | ||
49 | static const struct stmmac_stats stmmac_gstrings_stats[] = { | 49 | static const struct stmmac_stats stmmac_gstrings_stats[] = { |
50 | /* Transmit errors */ | ||
50 | STMMAC_STAT(tx_underflow), | 51 | STMMAC_STAT(tx_underflow), |
51 | STMMAC_STAT(tx_carrier), | 52 | STMMAC_STAT(tx_carrier), |
52 | STMMAC_STAT(tx_losscarrier), | 53 | STMMAC_STAT(tx_losscarrier), |
53 | STMMAC_STAT(vlan_tag), | 54 | STMMAC_STAT(vlan_tag), |
54 | STMMAC_STAT(tx_deferred), | 55 | STMMAC_STAT(tx_deferred), |
55 | STMMAC_STAT(tx_vlan), | 56 | STMMAC_STAT(tx_vlan), |
56 | STMMAC_STAT(rx_vlan), | ||
57 | STMMAC_STAT(tx_jabber), | 57 | STMMAC_STAT(tx_jabber), |
58 | STMMAC_STAT(tx_frame_flushed), | 58 | STMMAC_STAT(tx_frame_flushed), |
59 | STMMAC_STAT(tx_payload_error), | 59 | STMMAC_STAT(tx_payload_error), |
60 | STMMAC_STAT(tx_ip_header_error), | 60 | STMMAC_STAT(tx_ip_header_error), |
61 | /* Receive errors */ | ||
61 | STMMAC_STAT(rx_desc), | 62 | STMMAC_STAT(rx_desc), |
62 | STMMAC_STAT(sa_filter_fail), | 63 | STMMAC_STAT(sa_filter_fail), |
63 | STMMAC_STAT(overflow_error), | 64 | STMMAC_STAT(overflow_error), |
64 | STMMAC_STAT(ipc_csum_error), | 65 | STMMAC_STAT(ipc_csum_error), |
65 | STMMAC_STAT(rx_collision), | 66 | STMMAC_STAT(rx_collision), |
66 | STMMAC_STAT(rx_crc), | 67 | STMMAC_STAT(rx_crc), |
68 | STMMAC_STAT(dribbling_bit), | ||
67 | STMMAC_STAT(rx_length), | 69 | STMMAC_STAT(rx_length), |
68 | STMMAC_STAT(rx_mii), | 70 | STMMAC_STAT(rx_mii), |
69 | STMMAC_STAT(rx_multicast), | 71 | STMMAC_STAT(rx_multicast), |
@@ -73,6 +75,8 @@ static const struct stmmac_stats stmmac_gstrings_stats[] = { | |||
73 | STMMAC_STAT(sa_rx_filter_fail), | 75 | STMMAC_STAT(sa_rx_filter_fail), |
74 | STMMAC_STAT(rx_missed_cntr), | 76 | STMMAC_STAT(rx_missed_cntr), |
75 | STMMAC_STAT(rx_overflow_cntr), | 77 | STMMAC_STAT(rx_overflow_cntr), |
78 | STMMAC_STAT(rx_vlan), | ||
79 | /* Tx/Rx IRQ errors */ | ||
76 | STMMAC_STAT(tx_undeflow_irq), | 80 | STMMAC_STAT(tx_undeflow_irq), |
77 | STMMAC_STAT(tx_process_stopped_irq), | 81 | STMMAC_STAT(tx_process_stopped_irq), |
78 | STMMAC_STAT(tx_jabber_irq), | 82 | STMMAC_STAT(tx_jabber_irq), |
@@ -82,6 +86,7 @@ static const struct stmmac_stats stmmac_gstrings_stats[] = { | |||
82 | STMMAC_STAT(rx_watchdog_irq), | 86 | STMMAC_STAT(rx_watchdog_irq), |
83 | STMMAC_STAT(tx_early_irq), | 87 | STMMAC_STAT(tx_early_irq), |
84 | STMMAC_STAT(fatal_bus_error_irq), | 88 | STMMAC_STAT(fatal_bus_error_irq), |
89 | /* Extra info */ | ||
85 | STMMAC_STAT(threshold), | 90 | STMMAC_STAT(threshold), |
86 | STMMAC_STAT(tx_pkt_n), | 91 | STMMAC_STAT(tx_pkt_n), |
87 | STMMAC_STAT(rx_pkt_n), | 92 | STMMAC_STAT(rx_pkt_n), |
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c index ab36dfcbd817..e85ffbd54830 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | |||
@@ -241,7 +241,7 @@ static void stmmac_adjust_link(struct net_device *dev) | |||
241 | case 1000: | 241 | case 1000: |
242 | if (likely(priv->plat->has_gmac)) | 242 | if (likely(priv->plat->has_gmac)) |
243 | ctrl &= ~priv->hw->link.port; | 243 | ctrl &= ~priv->hw->link.port; |
244 | stmmac_hw_fix_mac_speed(priv); | 244 | stmmac_hw_fix_mac_speed(priv); |
245 | break; | 245 | break; |
246 | case 100: | 246 | case 100: |
247 | case 10: | 247 | case 10: |
@@ -785,7 +785,7 @@ static u32 stmmac_get_synopsys_id(struct stmmac_priv *priv) | |||
785 | u32 uid = ((hwid & 0x0000ff00) >> 8); | 785 | u32 uid = ((hwid & 0x0000ff00) >> 8); |
786 | u32 synid = (hwid & 0x000000ff); | 786 | u32 synid = (hwid & 0x000000ff); |
787 | 787 | ||
788 | pr_info("STMMAC - user ID: 0x%x, Synopsys ID: 0x%x\n", | 788 | pr_info("stmmac - user ID: 0x%x, Synopsys ID: 0x%x\n", |
789 | uid, synid); | 789 | uid, synid); |
790 | 790 | ||
791 | return synid; | 791 | return synid; |
@@ -869,38 +869,6 @@ static int stmmac_get_hw_features(struct stmmac_priv *priv) | |||
869 | return hw_cap; | 869 | return hw_cap; |
870 | } | 870 | } |
871 | 871 | ||
872 | /** | ||
873 | * stmmac_mac_device_setup | ||
874 | * @dev : device pointer | ||
875 | * Description: this is to attach the GMAC or MAC 10/100 | ||
876 | * main core structures that will be completed during the | ||
877 | * open step. | ||
878 | */ | ||
879 | static int stmmac_mac_device_setup(struct net_device *dev) | ||
880 | { | ||
881 | struct stmmac_priv *priv = netdev_priv(dev); | ||
882 | |||
883 | struct mac_device_info *device; | ||
884 | |||
885 | if (priv->plat->has_gmac) | ||
886 | device = dwmac1000_setup(priv->ioaddr); | ||
887 | else | ||
888 | device = dwmac100_setup(priv->ioaddr); | ||
889 | |||
890 | if (!device) | ||
891 | return -ENOMEM; | ||
892 | |||
893 | priv->hw = device; | ||
894 | priv->hw->ring = &ring_mode_ops; | ||
895 | |||
896 | if (device_can_wakeup(priv->device)) { | ||
897 | priv->wolopts = WAKE_MAGIC; /* Magic Frame as default */ | ||
898 | enable_irq_wake(priv->wol_irq); | ||
899 | } | ||
900 | |||
901 | return 0; | ||
902 | } | ||
903 | |||
904 | static void stmmac_check_ether_addr(struct stmmac_priv *priv) | 872 | static void stmmac_check_ether_addr(struct stmmac_priv *priv) |
905 | { | 873 | { |
906 | /* verify if the MAC address is valid, in case of failures it | 874 | /* verify if the MAC address is valid, in case of failures it |
@@ -930,20 +898,8 @@ static int stmmac_open(struct net_device *dev) | |||
930 | struct stmmac_priv *priv = netdev_priv(dev); | 898 | struct stmmac_priv *priv = netdev_priv(dev); |
931 | int ret; | 899 | int ret; |
932 | 900 | ||
933 | /* MAC HW device setup */ | ||
934 | ret = stmmac_mac_device_setup(dev); | ||
935 | if (ret < 0) | ||
936 | return ret; | ||
937 | |||
938 | stmmac_check_ether_addr(priv); | 901 | stmmac_check_ether_addr(priv); |
939 | 902 | ||
940 | stmmac_verify_args(); | ||
941 | |||
942 | /* Override with kernel parameters if supplied XXX CRS XXX | ||
943 | * this needs to have multiple instances */ | ||
944 | if ((phyaddr >= 0) && (phyaddr <= 31)) | ||
945 | priv->plat->phy_addr = phyaddr; | ||
946 | |||
947 | /* MDIO bus Registration */ | 903 | /* MDIO bus Registration */ |
948 | ret = stmmac_mdio_register(dev); | 904 | ret = stmmac_mdio_register(dev); |
949 | if (ret < 0) { | 905 | if (ret < 0) { |
@@ -975,44 +931,6 @@ static int stmmac_open(struct net_device *dev) | |||
975 | goto open_error; | 931 | goto open_error; |
976 | } | 932 | } |
977 | 933 | ||
978 | stmmac_get_synopsys_id(priv); | ||
979 | |||
980 | priv->hw_cap_support = stmmac_get_hw_features(priv); | ||
981 | |||
982 | if (priv->hw_cap_support) { | ||
983 | pr_info(" Support DMA HW capability register"); | ||
984 | |||
985 | /* We can override some gmac/dma configuration fields: e.g. | ||
986 | * enh_desc, tx_coe (e.g. that are passed through the | ||
987 | * platform) with the values from the HW capability | ||
988 | * register (if supported). | ||
989 | */ | ||
990 | priv->plat->enh_desc = priv->dma_cap.enh_desc; | ||
991 | priv->plat->tx_coe = priv->dma_cap.tx_coe; | ||
992 | priv->plat->pmt = priv->dma_cap.pmt_remote_wake_up; | ||
993 | |||
994 | /* By default disable wol on magic frame if not supported */ | ||
995 | if (!priv->dma_cap.pmt_magic_frame) | ||
996 | priv->wolopts &= ~WAKE_MAGIC; | ||
997 | |||
998 | } else | ||
999 | pr_info(" No HW DMA feature register supported"); | ||
1000 | |||
1001 | /* Select the enhnaced/normal descriptor structures */ | ||
1002 | stmmac_selec_desc_mode(priv); | ||
1003 | |||
1004 | /* PMT module is not integrated in all the MAC devices. */ | ||
1005 | if (priv->plat->pmt) { | ||
1006 | pr_info(" Remote wake-up capable\n"); | ||
1007 | device_set_wakeup_capable(priv->device, 1); | ||
1008 | } | ||
1009 | |||
1010 | priv->rx_coe = priv->hw->mac->rx_coe(priv->ioaddr); | ||
1011 | if (priv->rx_coe) | ||
1012 | pr_info(" Checksum Offload Engine supported\n"); | ||
1013 | if (priv->plat->tx_coe) | ||
1014 | pr_info(" Checksum insertion supported\n"); | ||
1015 | |||
1016 | /* Create and initialize the TX/RX descriptors chains. */ | 934 | /* Create and initialize the TX/RX descriptors chains. */ |
1017 | priv->dma_tx_size = STMMAC_ALIGN(dma_txsize); | 935 | priv->dma_tx_size = STMMAC_ALIGN(dma_txsize); |
1018 | priv->dma_rx_size = STMMAC_ALIGN(dma_rxsize); | 936 | priv->dma_rx_size = STMMAC_ALIGN(dma_rxsize); |
@@ -1029,14 +947,14 @@ static int stmmac_open(struct net_device *dev) | |||
1029 | 947 | ||
1030 | /* Copy the MAC addr into the HW */ | 948 | /* Copy the MAC addr into the HW */ |
1031 | priv->hw->mac->set_umac_addr(priv->ioaddr, dev->dev_addr, 0); | 949 | priv->hw->mac->set_umac_addr(priv->ioaddr, dev->dev_addr, 0); |
950 | |||
1032 | /* If required, perform hw setup of the bus. */ | 951 | /* If required, perform hw setup of the bus. */ |
1033 | if (priv->plat->bus_setup) | 952 | if (priv->plat->bus_setup) |
1034 | priv->plat->bus_setup(priv->ioaddr); | 953 | priv->plat->bus_setup(priv->ioaddr); |
954 | |||
1035 | /* Initialize the MAC Core */ | 955 | /* Initialize the MAC Core */ |
1036 | priv->hw->mac->core_init(priv->ioaddr); | 956 | priv->hw->mac->core_init(priv->ioaddr); |
1037 | 957 | ||
1038 | netdev_update_features(dev); | ||
1039 | |||
1040 | /* Request the IRQ lines */ | 958 | /* Request the IRQ lines */ |
1041 | ret = request_irq(dev->irq, stmmac_interrupt, | 959 | ret = request_irq(dev->irq, stmmac_interrupt, |
1042 | IRQF_SHARED, dev->name, dev); | 960 | IRQF_SHARED, dev->name, dev); |
@@ -1046,6 +964,17 @@ static int stmmac_open(struct net_device *dev) | |||
1046 | goto open_error; | 964 | goto open_error; |
1047 | } | 965 | } |
1048 | 966 | ||
967 | /* Request the Wake IRQ in case of another line is used for WoL */ | ||
968 | if (priv->wol_irq != dev->irq) { | ||
969 | ret = request_irq(priv->wol_irq, stmmac_interrupt, | ||
970 | IRQF_SHARED, dev->name, dev); | ||
971 | if (unlikely(ret < 0)) { | ||
972 | pr_err("%s: ERROR: allocating the ext WoL IRQ %d " | ||
973 | "(error: %d)\n", __func__, priv->wol_irq, ret); | ||
974 | goto open_error_wolirq; | ||
975 | } | ||
976 | } | ||
977 | |||
1049 | /* Enable the MAC Rx/Tx */ | 978 | /* Enable the MAC Rx/Tx */ |
1050 | stmmac_set_mac(priv->ioaddr, true); | 979 | stmmac_set_mac(priv->ioaddr, true); |
1051 | 980 | ||
@@ -1061,7 +990,7 @@ static int stmmac_open(struct net_device *dev) | |||
1061 | #ifdef CONFIG_STMMAC_DEBUG_FS | 990 | #ifdef CONFIG_STMMAC_DEBUG_FS |
1062 | ret = stmmac_init_fs(dev); | 991 | ret = stmmac_init_fs(dev); |
1063 | if (ret < 0) | 992 | if (ret < 0) |
1064 | pr_warning("\tFailed debugFS registration"); | 993 | pr_warning("%s: failed debugFS registration\n", __func__); |
1065 | #endif | 994 | #endif |
1066 | /* Start the ball rolling... */ | 995 | /* Start the ball rolling... */ |
1067 | DBG(probe, DEBUG, "%s: DMA RX/TX processes started...\n", dev->name); | 996 | DBG(probe, DEBUG, "%s: DMA RX/TX processes started...\n", dev->name); |
@@ -1071,6 +1000,7 @@ static int stmmac_open(struct net_device *dev) | |||
1071 | #ifdef CONFIG_STMMAC_TIMER | 1000 | #ifdef CONFIG_STMMAC_TIMER |
1072 | priv->tm->timer_start(tmrate); | 1001 | priv->tm->timer_start(tmrate); |
1073 | #endif | 1002 | #endif |
1003 | |||
1074 | /* Dump DMA/MAC registers */ | 1004 | /* Dump DMA/MAC registers */ |
1075 | if (netif_msg_hw(priv)) { | 1005 | if (netif_msg_hw(priv)) { |
1076 | priv->hw->mac->dump_regs(priv->ioaddr); | 1006 | priv->hw->mac->dump_regs(priv->ioaddr); |
@@ -1086,6 +1016,9 @@ static int stmmac_open(struct net_device *dev) | |||
1086 | 1016 | ||
1087 | return 0; | 1017 | return 0; |
1088 | 1018 | ||
1019 | open_error_wolirq: | ||
1020 | free_irq(dev->irq, dev); | ||
1021 | |||
1089 | open_error: | 1022 | open_error: |
1090 | #ifdef CONFIG_STMMAC_TIMER | 1023 | #ifdef CONFIG_STMMAC_TIMER |
1091 | kfree(priv->tm); | 1024 | kfree(priv->tm); |
@@ -1126,6 +1059,8 @@ static int stmmac_release(struct net_device *dev) | |||
1126 | 1059 | ||
1127 | /* Free the IRQ lines */ | 1060 | /* Free the IRQ lines */ |
1128 | free_irq(dev->irq, dev); | 1061 | free_irq(dev->irq, dev); |
1062 | if (priv->wol_irq != dev->irq) | ||
1063 | free_irq(priv->wol_irq, dev); | ||
1129 | 1064 | ||
1130 | /* Stop TX/RX DMA and clear the descriptors */ | 1065 | /* Stop TX/RX DMA and clear the descriptors */ |
1131 | priv->hw->dma->stop_tx(priv->ioaddr); | 1066 | priv->hw->dma->stop_tx(priv->ioaddr); |
@@ -1788,13 +1723,77 @@ static const struct net_device_ops stmmac_netdev_ops = { | |||
1788 | }; | 1723 | }; |
1789 | 1724 | ||
1790 | /** | 1725 | /** |
1726 | * stmmac_hw_init - Init the MAC device | ||
1727 | * @priv : pointer to the private device structure. | ||
1728 | * Description: this function detects which MAC device | ||
1729 | * (GMAC/MAC10-100) has to attached, checks the HW capability | ||
1730 | * (if supported) and sets the driver's features (for example | ||
1731 | * to use the ring or chaine mode or support the normal/enh | ||
1732 | * descriptor structure). | ||
1733 | */ | ||
1734 | static int stmmac_hw_init(struct stmmac_priv *priv) | ||
1735 | { | ||
1736 | int ret = 0; | ||
1737 | struct mac_device_info *mac; | ||
1738 | |||
1739 | /* Identify the MAC HW device */ | ||
1740 | if (priv->plat->has_gmac) | ||
1741 | mac = dwmac1000_setup(priv->ioaddr); | ||
1742 | else | ||
1743 | mac = dwmac100_setup(priv->ioaddr); | ||
1744 | if (!mac) | ||
1745 | return -ENOMEM; | ||
1746 | |||
1747 | priv->hw = mac; | ||
1748 | |||
1749 | /* To use the chained or ring mode */ | ||
1750 | priv->hw->ring = &ring_mode_ops; | ||
1751 | |||
1752 | /* Get and dump the chip ID */ | ||
1753 | stmmac_get_synopsys_id(priv); | ||
1754 | |||
1755 | /* Get the HW capability (new GMAC newer than 3.50a) */ | ||
1756 | priv->hw_cap_support = stmmac_get_hw_features(priv); | ||
1757 | if (priv->hw_cap_support) { | ||
1758 | pr_info(" DMA HW capability register supported"); | ||
1759 | |||
1760 | /* We can override some gmac/dma configuration fields: e.g. | ||
1761 | * enh_desc, tx_coe (e.g. that are passed through the | ||
1762 | * platform) with the values from the HW capability | ||
1763 | * register (if supported). | ||
1764 | */ | ||
1765 | priv->plat->enh_desc = priv->dma_cap.enh_desc; | ||
1766 | priv->plat->tx_coe = priv->dma_cap.tx_coe; | ||
1767 | priv->plat->pmt = priv->dma_cap.pmt_remote_wake_up; | ||
1768 | } else | ||
1769 | pr_info(" No HW DMA feature register supported"); | ||
1770 | |||
1771 | /* Select the enhnaced/normal descriptor structures */ | ||
1772 | stmmac_selec_desc_mode(priv); | ||
1773 | |||
1774 | priv->rx_coe = priv->hw->mac->rx_coe(priv->ioaddr); | ||
1775 | if (priv->rx_coe) | ||
1776 | pr_info(" RX Checksum Offload Engine supported\n"); | ||
1777 | if (priv->plat->tx_coe) | ||
1778 | pr_info(" TX Checksum insertion supported\n"); | ||
1779 | |||
1780 | if (priv->plat->pmt) { | ||
1781 | pr_info(" Wake-Up On Lan supported\n"); | ||
1782 | device_set_wakeup_capable(priv->device, 1); | ||
1783 | } | ||
1784 | |||
1785 | return ret; | ||
1786 | } | ||
1787 | |||
1788 | /** | ||
1791 | * stmmac_dvr_probe | 1789 | * stmmac_dvr_probe |
1792 | * @device: device pointer | 1790 | * @device: device pointer |
1793 | * Description: this is the main probe function used to | 1791 | * Description: this is the main probe function used to |
1794 | * call the alloc_etherdev, allocate the priv structure. | 1792 | * call the alloc_etherdev, allocate the priv structure. |
1795 | */ | 1793 | */ |
1796 | struct stmmac_priv *stmmac_dvr_probe(struct device *device, | 1794 | struct stmmac_priv *stmmac_dvr_probe(struct device *device, |
1797 | struct plat_stmmacenet_data *plat_dat) | 1795 | struct plat_stmmacenet_data *plat_dat, |
1796 | void __iomem *addr) | ||
1798 | { | 1797 | { |
1799 | int ret = 0; | 1798 | int ret = 0; |
1800 | struct net_device *ndev = NULL; | 1799 | struct net_device *ndev = NULL; |
@@ -1812,10 +1811,27 @@ struct stmmac_priv *stmmac_dvr_probe(struct device *device, | |||
1812 | 1811 | ||
1813 | ether_setup(ndev); | 1812 | ether_setup(ndev); |
1814 | 1813 | ||
1815 | ndev->netdev_ops = &stmmac_netdev_ops; | ||
1816 | stmmac_set_ethtool_ops(ndev); | 1814 | stmmac_set_ethtool_ops(ndev); |
1815 | priv->pause = pause; | ||
1816 | priv->plat = plat_dat; | ||
1817 | priv->ioaddr = addr; | ||
1818 | priv->dev->base_addr = (unsigned long)addr; | ||
1819 | |||
1820 | /* Verify driver arguments */ | ||
1821 | stmmac_verify_args(); | ||
1822 | |||
1823 | /* Override with kernel parameters if supplied XXX CRS XXX | ||
1824 | * this needs to have multiple instances */ | ||
1825 | if ((phyaddr >= 0) && (phyaddr <= 31)) | ||
1826 | priv->plat->phy_addr = phyaddr; | ||
1827 | |||
1828 | /* Init MAC and get the capabilities */ | ||
1829 | stmmac_hw_init(priv); | ||
1830 | |||
1831 | ndev->netdev_ops = &stmmac_netdev_ops; | ||
1817 | 1832 | ||
1818 | ndev->hw_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM; | 1833 | ndev->hw_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | |
1834 | NETIF_F_RXCSUM; | ||
1819 | ndev->features |= ndev->hw_features | NETIF_F_HIGHDMA; | 1835 | ndev->features |= ndev->hw_features | NETIF_F_HIGHDMA; |
1820 | ndev->watchdog_timeo = msecs_to_jiffies(watchdog); | 1836 | ndev->watchdog_timeo = msecs_to_jiffies(watchdog); |
1821 | #ifdef STMMAC_VLAN_TAG_USED | 1837 | #ifdef STMMAC_VLAN_TAG_USED |
@@ -1827,8 +1843,6 @@ struct stmmac_priv *stmmac_dvr_probe(struct device *device, | |||
1827 | if (flow_ctrl) | 1843 | if (flow_ctrl) |
1828 | priv->flow_ctrl = FLOW_AUTO; /* RX/TX pause on */ | 1844 | priv->flow_ctrl = FLOW_AUTO; /* RX/TX pause on */ |
1829 | 1845 | ||
1830 | priv->pause = pause; | ||
1831 | priv->plat = plat_dat; | ||
1832 | netif_napi_add(ndev, &priv->napi, stmmac_poll, 64); | 1846 | netif_napi_add(ndev, &priv->napi, stmmac_poll, 64); |
1833 | 1847 | ||
1834 | spin_lock_init(&priv->lock); | 1848 | spin_lock_init(&priv->lock); |
@@ -1836,15 +1850,10 @@ struct stmmac_priv *stmmac_dvr_probe(struct device *device, | |||
1836 | 1850 | ||
1837 | ret = register_netdev(ndev); | 1851 | ret = register_netdev(ndev); |
1838 | if (ret) { | 1852 | if (ret) { |
1839 | pr_err("%s: ERROR %i registering the device\n", | 1853 | pr_err("%s: ERROR %i registering the device\n", __func__, ret); |
1840 | __func__, ret); | ||
1841 | goto error; | 1854 | goto error; |
1842 | } | 1855 | } |
1843 | 1856 | ||
1844 | DBG(probe, DEBUG, "%s: Scatter/Gather: %s - HW checksums: %s\n", | ||
1845 | ndev->name, (ndev->features & NETIF_F_SG) ? "on" : "off", | ||
1846 | (ndev->features & NETIF_F_IP_CSUM) ? "on" : "off"); | ||
1847 | |||
1848 | return priv; | 1857 | return priv; |
1849 | 1858 | ||
1850 | error: | 1859 | error: |
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c index 4e12884bab39..da66ed7c3c5d 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c | |||
@@ -96,13 +96,11 @@ static int __devinit stmmac_pci_probe(struct pci_dev *pdev, | |||
96 | 96 | ||
97 | stmmac_default_data(); | 97 | stmmac_default_data(); |
98 | 98 | ||
99 | priv = stmmac_dvr_probe(&(pdev->dev), &plat_dat); | 99 | priv = stmmac_dvr_probe(&(pdev->dev), &plat_dat, addr); |
100 | if (!priv) { | 100 | if (!priv) { |
101 | pr_err("%s: main driver probe failed", __func__); | 101 | pr_err("%s: main driver probe failed", __func__); |
102 | goto err_out; | 102 | goto err_out; |
103 | } | 103 | } |
104 | priv->ioaddr = addr; | ||
105 | priv->dev->base_addr = (unsigned long)addr; | ||
106 | priv->dev->irq = pdev->irq; | 104 | priv->dev->irq = pdev->irq; |
107 | priv->wol_irq = pdev->irq; | 105 | priv->wol_irq = pdev->irq; |
108 | 106 | ||
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c index 11af27ef4930..3aad9810237c 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c | |||
@@ -59,16 +59,20 @@ static int stmmac_pltfr_probe(struct platform_device *pdev) | |||
59 | goto out_release_region; | 59 | goto out_release_region; |
60 | } | 60 | } |
61 | plat_dat = pdev->dev.platform_data; | 61 | plat_dat = pdev->dev.platform_data; |
62 | priv = stmmac_dvr_probe(&(pdev->dev), plat_dat); | 62 | |
63 | /* Custom initialisation (if needed)*/ | ||
64 | if (plat_dat->init) { | ||
65 | ret = plat_dat->init(pdev); | ||
66 | if (unlikely(ret)) | ||
67 | goto out_unmap; | ||
68 | } | ||
69 | |||
70 | priv = stmmac_dvr_probe(&(pdev->dev), plat_dat, addr); | ||
63 | if (!priv) { | 71 | if (!priv) { |
64 | pr_err("%s: main driver probe failed", __func__); | 72 | pr_err("%s: main driver probe failed", __func__); |
65 | goto out_unmap; | 73 | goto out_unmap; |
66 | } | 74 | } |
67 | 75 | ||
68 | priv->ioaddr = addr; | ||
69 | /* Set the I/O base addr */ | ||
70 | priv->dev->base_addr = (unsigned long)addr; | ||
71 | |||
72 | /* Get the MAC information */ | 76 | /* Get the MAC information */ |
73 | priv->dev->irq = platform_get_irq_byname(pdev, "macirq"); | 77 | priv->dev->irq = platform_get_irq_byname(pdev, "macirq"); |
74 | if (priv->dev->irq == -ENXIO) { | 78 | if (priv->dev->irq == -ENXIO) { |
@@ -92,13 +96,6 @@ static int stmmac_pltfr_probe(struct platform_device *pdev) | |||
92 | 96 | ||
93 | platform_set_drvdata(pdev, priv->dev); | 97 | platform_set_drvdata(pdev, priv->dev); |
94 | 98 | ||
95 | /* Custom initialisation */ | ||
96 | if (priv->plat->init) { | ||
97 | ret = priv->plat->init(pdev); | ||
98 | if (unlikely(ret)) | ||
99 | goto out_unmap; | ||
100 | } | ||
101 | |||
102 | pr_debug("STMMAC platform driver registration completed"); | 99 | pr_debug("STMMAC platform driver registration completed"); |
103 | 100 | ||
104 | return 0; | 101 | return 0; |
diff --git a/drivers/net/ethernet/ti/cpmac.c b/drivers/net/ethernet/ti/cpmac.c index 97e1df330a17..860c2526f08d 100644 --- a/drivers/net/ethernet/ti/cpmac.c +++ b/drivers/net/ethernet/ti/cpmac.c | |||
@@ -1122,7 +1122,7 @@ static int __devinit cpmac_probe(struct platform_device *pdev) | |||
1122 | pdata = pdev->dev.platform_data; | 1122 | pdata = pdev->dev.platform_data; |
1123 | 1123 | ||
1124 | if (external_switch || dumb_switch) { | 1124 | if (external_switch || dumb_switch) { |
1125 | strncpy(mdio_bus_id, "0", MII_BUS_ID_SIZE); /* fixed phys bus */ | 1125 | strncpy(mdio_bus_id, "fixed-0", MII_BUS_ID_SIZE); /* fixed phys bus */ |
1126 | phy_id = pdev->id; | 1126 | phy_id = pdev->id; |
1127 | } else { | 1127 | } else { |
1128 | for (phy_id = 0; phy_id < PHY_MAX_ADDR; phy_id++) { | 1128 | for (phy_id = 0; phy_id < PHY_MAX_ADDR; phy_id++) { |
@@ -1138,7 +1138,7 @@ static int __devinit cpmac_probe(struct platform_device *pdev) | |||
1138 | if (phy_id == PHY_MAX_ADDR) { | 1138 | if (phy_id == PHY_MAX_ADDR) { |
1139 | dev_err(&pdev->dev, "no PHY present, falling back " | 1139 | dev_err(&pdev->dev, "no PHY present, falling back " |
1140 | "to switch on MDIO bus 0\n"); | 1140 | "to switch on MDIO bus 0\n"); |
1141 | strncpy(mdio_bus_id, "0", MII_BUS_ID_SIZE); /* fixed phys bus */ | 1141 | strncpy(mdio_bus_id, "fixed-0", MII_BUS_ID_SIZE); /* fixed phys bus */ |
1142 | phy_id = pdev->id; | 1142 | phy_id = pdev->id; |
1143 | } | 1143 | } |
1144 | 1144 | ||
diff --git a/drivers/net/ethernet/xscale/ixp4xx_eth.c b/drivers/net/ethernet/xscale/ixp4xx_eth.c index 72a854f05bb8..41a8b5a9849e 100644 --- a/drivers/net/ethernet/xscale/ixp4xx_eth.c +++ b/drivers/net/ethernet/xscale/ixp4xx_eth.c | |||
@@ -1416,7 +1416,8 @@ static int __devinit eth_init_one(struct platform_device *pdev) | |||
1416 | __raw_writel(DEFAULT_CORE_CNTRL, &port->regs->core_control); | 1416 | __raw_writel(DEFAULT_CORE_CNTRL, &port->regs->core_control); |
1417 | udelay(50); | 1417 | udelay(50); |
1418 | 1418 | ||
1419 | snprintf(phy_id, MII_BUS_ID_SIZE + 3, PHY_ID_FMT, "0", plat->phy); | 1419 | snprintf(phy_id, MII_BUS_ID_SIZE + 3, PHY_ID_FMT, |
1420 | mdio_bus->id, plat->phy); | ||
1420 | port->phydev = phy_connect(dev, phy_id, &ixp4xx_adjust_link, 0, | 1421 | port->phydev = phy_connect(dev, phy_id, &ixp4xx_adjust_link, 0, |
1421 | PHY_INTERFACE_MODE_MII); | 1422 | PHY_INTERFACE_MODE_MII); |
1422 | if (IS_ERR(port->phydev)) { | 1423 | if (IS_ERR(port->phydev)) { |
diff --git a/drivers/net/usb/ipheth.c b/drivers/net/usb/ipheth.c index e84662db51cc..dd78c4cbd459 100644 --- a/drivers/net/usb/ipheth.c +++ b/drivers/net/usb/ipheth.c | |||
@@ -60,6 +60,7 @@ | |||
60 | #define USB_PRODUCT_IPHONE_3GS 0x1294 | 60 | #define USB_PRODUCT_IPHONE_3GS 0x1294 |
61 | #define USB_PRODUCT_IPHONE_4 0x1297 | 61 | #define USB_PRODUCT_IPHONE_4 0x1297 |
62 | #define USB_PRODUCT_IPHONE_4_VZW 0x129c | 62 | #define USB_PRODUCT_IPHONE_4_VZW 0x129c |
63 | #define USB_PRODUCT_IPHONE_4S 0x12a0 | ||
63 | 64 | ||
64 | #define IPHETH_USBINTF_CLASS 255 | 65 | #define IPHETH_USBINTF_CLASS 255 |
65 | #define IPHETH_USBINTF_SUBCLASS 253 | 66 | #define IPHETH_USBINTF_SUBCLASS 253 |
@@ -103,6 +104,10 @@ static struct usb_device_id ipheth_table[] = { | |||
103 | USB_VENDOR_APPLE, USB_PRODUCT_IPHONE_4_VZW, | 104 | USB_VENDOR_APPLE, USB_PRODUCT_IPHONE_4_VZW, |
104 | IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS, | 105 | IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS, |
105 | IPHETH_USBINTF_PROTO) }, | 106 | IPHETH_USBINTF_PROTO) }, |
107 | { USB_DEVICE_AND_INTERFACE_INFO( | ||
108 | USB_VENDOR_APPLE, USB_PRODUCT_IPHONE_4S, | ||
109 | IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS, | ||
110 | IPHETH_USBINTF_PROTO) }, | ||
106 | { } | 111 | { } |
107 | }; | 112 | }; |
108 | MODULE_DEVICE_TABLE(usb, ipheth_table); | 113 | MODULE_DEVICE_TABLE(usb, ipheth_table); |
diff --git a/drivers/net/veth.c b/drivers/net/veth.c index b8a697f5cb69..5852361032c4 100644 --- a/drivers/net/veth.c +++ b/drivers/net/veth.c | |||
@@ -422,7 +422,9 @@ static void veth_dellink(struct net_device *dev, struct list_head *head) | |||
422 | unregister_netdevice_queue(peer, head); | 422 | unregister_netdevice_queue(peer, head); |
423 | } | 423 | } |
424 | 424 | ||
425 | static const struct nla_policy veth_policy[VETH_INFO_MAX + 1]; | 425 | static const struct nla_policy veth_policy[VETH_INFO_MAX + 1] = { |
426 | [VETH_INFO_PEER] = { .len = sizeof(struct ifinfomsg) }, | ||
427 | }; | ||
426 | 428 | ||
427 | static struct rtnl_link_ops veth_link_ops = { | 429 | static struct rtnl_link_ops veth_link_ops = { |
428 | .kind = DRV_NAME, | 430 | .kind = DRV_NAME, |
diff --git a/drivers/net/wireless/rtlwifi/pci.c b/drivers/net/wireless/rtlwifi/pci.c index 5cb2199435d2..653fe728e4a2 100644 --- a/drivers/net/wireless/rtlwifi/pci.c +++ b/drivers/net/wireless/rtlwifi/pci.c | |||
@@ -1493,7 +1493,7 @@ static int rtl_pci_init(struct ieee80211_hw *hw, struct pci_dev *pdev) | |||
1493 | return err; | 1493 | return err; |
1494 | } | 1494 | } |
1495 | 1495 | ||
1496 | return 1; | 1496 | return 0; |
1497 | } | 1497 | } |
1498 | 1498 | ||
1499 | static int rtl_pci_start(struct ieee80211_hw *hw) | 1499 | static int rtl_pci_start(struct ieee80211_hw *hw) |
@@ -1860,7 +1860,7 @@ int __devinit rtl_pci_probe(struct pci_dev *pdev, | |||
1860 | } | 1860 | } |
1861 | 1861 | ||
1862 | /* Init PCI sw */ | 1862 | /* Init PCI sw */ |
1863 | err = !rtl_pci_init(hw, pdev); | 1863 | err = rtl_pci_init(hw, pdev); |
1864 | if (err) { | 1864 | if (err) { |
1865 | RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, "Failed to init PCI\n"); | 1865 | RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, "Failed to init PCI\n"); |
1866 | goto fail3; | 1866 | goto fail3; |