| .. | .. |
|---|
| 66 | 66 | #include <uapi/linux/net_tstamp.h> |
|---|
| 67 | 67 | #include <linux/ptp_clock_kernel.h> |
|---|
| 68 | 68 | |
|---|
| 69 | | -#ifdef CONFIG_SPARC |
|---|
| 70 | | -#include <asm/idprom.h> |
|---|
| 71 | | -#include <asm/prom.h> |
|---|
| 72 | | -#endif |
|---|
| 73 | | - |
|---|
| 74 | 69 | #define BAR_0 0 |
|---|
| 75 | 70 | #define BAR_2 2 |
|---|
| 76 | 71 | |
|---|
| .. | .. |
|---|
| 101 | 96 | _tg3_flag_clear(TG3_FLAG_##flag, (tp)->tg3_flags) |
|---|
| 102 | 97 | |
|---|
| 103 | 98 | #define DRV_MODULE_NAME "tg3" |
|---|
| 99 | +/* DO NOT UPDATE TG3_*_NUM defines */ |
|---|
| 104 | 100 | #define TG3_MAJ_NUM 3 |
|---|
| 105 | 101 | #define TG3_MIN_NUM 137 |
|---|
| 106 | | -#define DRV_MODULE_VERSION \ |
|---|
| 107 | | - __stringify(TG3_MAJ_NUM) "." __stringify(TG3_MIN_NUM) |
|---|
| 108 | | -#define DRV_MODULE_RELDATE "May 11, 2014" |
|---|
| 109 | 102 | |
|---|
| 110 | 103 | #define RESET_KIND_SHUTDOWN 0 |
|---|
| 111 | 104 | #define RESET_KIND_INIT 1 |
|---|
| .. | .. |
|---|
| 227 | 220 | #define FIRMWARE_TG3TSO "tigon/tg3_tso.bin" |
|---|
| 228 | 221 | #define FIRMWARE_TG3TSO5 "tigon/tg3_tso5.bin" |
|---|
| 229 | 222 | |
|---|
| 230 | | -static char version[] = |
|---|
| 231 | | - DRV_MODULE_NAME ".c:v" DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")"; |
|---|
| 232 | | - |
|---|
| 233 | 223 | MODULE_AUTHOR("David S. Miller (davem@redhat.com) and Jeff Garzik (jgarzik@pobox.com)"); |
|---|
| 234 | 224 | MODULE_DESCRIPTION("Broadcom Tigon3 ethernet driver"); |
|---|
| 235 | 225 | MODULE_LICENSE("GPL"); |
|---|
| 236 | | -MODULE_VERSION(DRV_MODULE_VERSION); |
|---|
| 237 | 226 | MODULE_FIRMWARE(FIRMWARE_TG3); |
|---|
| 227 | +MODULE_FIRMWARE(FIRMWARE_TG357766); |
|---|
| 238 | 228 | MODULE_FIRMWARE(FIRMWARE_TG3TSO); |
|---|
| 239 | 229 | MODULE_FIRMWARE(FIRMWARE_TG3TSO5); |
|---|
| 240 | 230 | |
|---|
| .. | .. |
|---|
| 726 | 716 | case TG3_APE_LOCK_GPIO: |
|---|
| 727 | 717 | if (tg3_asic_rev(tp) == ASIC_REV_5761) |
|---|
| 728 | 718 | return 0; |
|---|
| 729 | | - /* else: fall through */ |
|---|
| 719 | + fallthrough; |
|---|
| 730 | 720 | case TG3_APE_LOCK_GRC: |
|---|
| 731 | 721 | case TG3_APE_LOCK_MEM: |
|---|
| 732 | 722 | if (!tp->pci_fn) |
|---|
| .. | .. |
|---|
| 787 | 777 | case TG3_APE_LOCK_GPIO: |
|---|
| 788 | 778 | if (tg3_asic_rev(tp) == ASIC_REV_5761) |
|---|
| 789 | 779 | return; |
|---|
| 790 | | - /* else: fall through */ |
|---|
| 780 | + fallthrough; |
|---|
| 791 | 781 | case TG3_APE_LOCK_GRC: |
|---|
| 792 | 782 | case TG3_APE_LOCK_MEM: |
|---|
| 793 | 783 | if (!tp->pci_fn) |
|---|
| .. | .. |
|---|
| 1078 | 1068 | struct tg3 *tp = tnapi->tp; |
|---|
| 1079 | 1069 | |
|---|
| 1080 | 1070 | tw32_mailbox(tnapi->int_mbox, tnapi->last_tag << 24); |
|---|
| 1081 | | - mmiowb(); |
|---|
| 1082 | 1071 | |
|---|
| 1083 | 1072 | /* When doing tagged status, this work check is unnecessary. |
|---|
| 1084 | 1073 | * The last_tag we write above tells the chip which piece of |
|---|
| .. | .. |
|---|
| 1598 | 1587 | phydev->dev_flags |= PHY_BRCM_EXT_IBND_RX_ENABLE; |
|---|
| 1599 | 1588 | if (tg3_flag(tp, RGMII_EXT_IBND_TX_EN)) |
|---|
| 1600 | 1589 | phydev->dev_flags |= PHY_BRCM_EXT_IBND_TX_ENABLE; |
|---|
| 1601 | | - /* fallthru */ |
|---|
| 1590 | + fallthrough; |
|---|
| 1602 | 1591 | case PHY_ID_RTL8211C: |
|---|
| 1603 | 1592 | phydev->interface = PHY_INTERFACE_MODE_RGMII; |
|---|
| 1604 | 1593 | break; |
|---|
| .. | .. |
|---|
| 2122 | 2111 | case PHY_INTERFACE_MODE_GMII: |
|---|
| 2123 | 2112 | case PHY_INTERFACE_MODE_RGMII: |
|---|
| 2124 | 2113 | if (!(tp->phy_flags & TG3_PHYFLG_10_100_ONLY)) { |
|---|
| 2125 | | - phydev->supported &= (PHY_GBIT_FEATURES | |
|---|
| 2126 | | - SUPPORTED_Pause | |
|---|
| 2127 | | - SUPPORTED_Asym_Pause); |
|---|
| 2114 | + phy_set_max_speed(phydev, SPEED_1000); |
|---|
| 2115 | + phy_support_asym_pause(phydev); |
|---|
| 2128 | 2116 | break; |
|---|
| 2129 | 2117 | } |
|---|
| 2130 | | - /* fallthru */ |
|---|
| 2118 | + fallthrough; |
|---|
| 2131 | 2119 | case PHY_INTERFACE_MODE_MII: |
|---|
| 2132 | | - phydev->supported &= (PHY_BASIC_FEATURES | |
|---|
| 2133 | | - SUPPORTED_Pause | |
|---|
| 2134 | | - SUPPORTED_Asym_Pause); |
|---|
| 2120 | + phy_set_max_speed(phydev, SPEED_100); |
|---|
| 2121 | + phy_support_asym_pause(phydev); |
|---|
| 2135 | 2122 | break; |
|---|
| 2136 | 2123 | default: |
|---|
| 2137 | 2124 | phy_disconnect(mdiobus_get_phy(tp->mdio_bus, tp->phy_addr)); |
|---|
| .. | .. |
|---|
| 2139 | 2126 | } |
|---|
| 2140 | 2127 | |
|---|
| 2141 | 2128 | tp->phy_flags |= TG3_PHYFLG_IS_CONNECTED; |
|---|
| 2142 | | - |
|---|
| 2143 | | - phydev->advertising = phydev->supported; |
|---|
| 2144 | 2129 | |
|---|
| 2145 | 2130 | phy_attached_info(phydev); |
|---|
| 2146 | 2131 | |
|---|
| .. | .. |
|---|
| 2161 | 2146 | phydev->speed = tp->link_config.speed; |
|---|
| 2162 | 2147 | phydev->duplex = tp->link_config.duplex; |
|---|
| 2163 | 2148 | phydev->autoneg = tp->link_config.autoneg; |
|---|
| 2164 | | - phydev->advertising = tp->link_config.advertising; |
|---|
| 2149 | + ethtool_convert_legacy_u32_to_link_mode( |
|---|
| 2150 | + phydev->advertising, tp->link_config.advertising); |
|---|
| 2165 | 2151 | } |
|---|
| 2166 | 2152 | |
|---|
| 2167 | 2153 | phy_start(phydev); |
|---|
| .. | .. |
|---|
| 4061 | 4047 | do_low_power = false; |
|---|
| 4062 | 4048 | if ((tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) && |
|---|
| 4063 | 4049 | !(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) { |
|---|
| 4050 | + __ETHTOOL_DECLARE_LINK_MODE_MASK(advertising) = { 0, }; |
|---|
| 4064 | 4051 | struct phy_device *phydev; |
|---|
| 4065 | | - u32 phyid, advertising; |
|---|
| 4052 | + u32 phyid; |
|---|
| 4066 | 4053 | |
|---|
| 4067 | 4054 | phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); |
|---|
| 4068 | 4055 | |
|---|
| .. | .. |
|---|
| 4071 | 4058 | tp->link_config.speed = phydev->speed; |
|---|
| 4072 | 4059 | tp->link_config.duplex = phydev->duplex; |
|---|
| 4073 | 4060 | tp->link_config.autoneg = phydev->autoneg; |
|---|
| 4074 | | - tp->link_config.advertising = phydev->advertising; |
|---|
| 4061 | + ethtool_convert_link_mode_to_legacy_u32( |
|---|
| 4062 | + &tp->link_config.advertising, |
|---|
| 4063 | + phydev->advertising); |
|---|
| 4075 | 4064 | |
|---|
| 4076 | | - advertising = ADVERTISED_TP | |
|---|
| 4077 | | - ADVERTISED_Pause | |
|---|
| 4078 | | - ADVERTISED_Autoneg | |
|---|
| 4079 | | - ADVERTISED_10baseT_Half; |
|---|
| 4065 | + linkmode_set_bit(ETHTOOL_LINK_MODE_TP_BIT, advertising); |
|---|
| 4066 | + linkmode_set_bit(ETHTOOL_LINK_MODE_Pause_BIT, |
|---|
| 4067 | + advertising); |
|---|
| 4068 | + linkmode_set_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, |
|---|
| 4069 | + advertising); |
|---|
| 4070 | + linkmode_set_bit(ETHTOOL_LINK_MODE_10baseT_Half_BIT, |
|---|
| 4071 | + advertising); |
|---|
| 4080 | 4072 | |
|---|
| 4081 | 4073 | if (tg3_flag(tp, ENABLE_ASF) || device_should_wake) { |
|---|
| 4082 | | - if (tg3_flag(tp, WOL_SPEED_100MB)) |
|---|
| 4083 | | - advertising |= |
|---|
| 4084 | | - ADVERTISED_100baseT_Half | |
|---|
| 4085 | | - ADVERTISED_100baseT_Full | |
|---|
| 4086 | | - ADVERTISED_10baseT_Full; |
|---|
| 4087 | | - else |
|---|
| 4088 | | - advertising |= ADVERTISED_10baseT_Full; |
|---|
| 4074 | + if (tg3_flag(tp, WOL_SPEED_100MB)) { |
|---|
| 4075 | + linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Half_BIT, |
|---|
| 4076 | + advertising); |
|---|
| 4077 | + linkmode_set_bit(ETHTOOL_LINK_MODE_100baseT_Full_BIT, |
|---|
| 4078 | + advertising); |
|---|
| 4079 | + linkmode_set_bit(ETHTOOL_LINK_MODE_10baseT_Full_BIT, |
|---|
| 4080 | + advertising); |
|---|
| 4081 | + } else { |
|---|
| 4082 | + linkmode_set_bit(ETHTOOL_LINK_MODE_10baseT_Full_BIT, |
|---|
| 4083 | + advertising); |
|---|
| 4084 | + } |
|---|
| 4089 | 4085 | } |
|---|
| 4090 | 4086 | |
|---|
| 4091 | | - phydev->advertising = advertising; |
|---|
| 4092 | | - |
|---|
| 4087 | + linkmode_copy(phydev->advertising, advertising); |
|---|
| 4093 | 4088 | phy_start_aneg(phydev); |
|---|
| 4094 | 4089 | |
|---|
| 4095 | 4090 | phyid = phydev->drv->phy_id & phydev->drv->phy_id_mask; |
|---|
| .. | .. |
|---|
| 4282 | 4277 | pci_set_power_state(tp->pdev, PCI_D3hot); |
|---|
| 4283 | 4278 | } |
|---|
| 4284 | 4279 | |
|---|
| 4285 | | -static void tg3_aux_stat_to_speed_duplex(struct tg3 *tp, u32 val, u16 *speed, u8 *duplex) |
|---|
| 4280 | +static void tg3_aux_stat_to_speed_duplex(struct tg3 *tp, u32 val, u32 *speed, u8 *duplex) |
|---|
| 4286 | 4281 | { |
|---|
| 4287 | 4282 | switch (val & MII_TG3_AUX_STAT_SPDMASK) { |
|---|
| 4288 | 4283 | case MII_TG3_AUX_STAT_10HALF: |
|---|
| .. | .. |
|---|
| 4396 | 4391 | MII_TG3_DSP_TAP26_RMRXSTO | |
|---|
| 4397 | 4392 | MII_TG3_DSP_TAP26_OPCSINPT; |
|---|
| 4398 | 4393 | tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val); |
|---|
| 4399 | | - /* Fall through */ |
|---|
| 4394 | + fallthrough; |
|---|
| 4400 | 4395 | case ASIC_REV_5720: |
|---|
| 4401 | 4396 | case ASIC_REV_5762: |
|---|
| 4402 | 4397 | if (!tg3_phydsp_read(tp, MII_TG3_DSP_CH34TP2, &val)) |
|---|
| .. | .. |
|---|
| 4544 | 4539 | tp->link_config.speed = SPEED_1000; |
|---|
| 4545 | 4540 | break; |
|---|
| 4546 | 4541 | } |
|---|
| 4547 | | - /* Fall through */ |
|---|
| 4542 | + fallthrough; |
|---|
| 4548 | 4543 | default: |
|---|
| 4549 | 4544 | goto done; |
|---|
| 4550 | 4545 | } |
|---|
| .. | .. |
|---|
| 4786 | 4781 | bool current_link_up; |
|---|
| 4787 | 4782 | u32 bmsr, val; |
|---|
| 4788 | 4783 | u32 lcl_adv, rmt_adv; |
|---|
| 4789 | | - u16 current_speed; |
|---|
| 4784 | + u32 current_speed; |
|---|
| 4790 | 4785 | u8 current_duplex; |
|---|
| 4791 | 4786 | int i, err; |
|---|
| 4792 | 4787 | |
|---|
| .. | .. |
|---|
| 5215 | 5210 | if (ap->flags & (MR_AN_ENABLE | MR_RESTART_AN)) |
|---|
| 5216 | 5211 | ap->state = ANEG_STATE_AN_ENABLE; |
|---|
| 5217 | 5212 | |
|---|
| 5218 | | - /* fallthru */ |
|---|
| 5213 | + fallthrough; |
|---|
| 5219 | 5214 | case ANEG_STATE_AN_ENABLE: |
|---|
| 5220 | 5215 | ap->flags &= ~(MR_AN_COMPLETE | MR_PAGE_RX); |
|---|
| 5221 | 5216 | if (ap->flags & MR_AN_ENABLE) { |
|---|
| .. | .. |
|---|
| 5245 | 5240 | ret = ANEG_TIMER_ENAB; |
|---|
| 5246 | 5241 | ap->state = ANEG_STATE_RESTART; |
|---|
| 5247 | 5242 | |
|---|
| 5248 | | - /* fallthru */ |
|---|
| 5243 | + fallthrough; |
|---|
| 5249 | 5244 | case ANEG_STATE_RESTART: |
|---|
| 5250 | 5245 | delta = ap->cur_time - ap->link_time; |
|---|
| 5251 | 5246 | if (delta > ANEG_STATE_SETTLE_TIME) |
|---|
| .. | .. |
|---|
| 5288 | 5283 | |
|---|
| 5289 | 5284 | ap->state = ANEG_STATE_ACK_DETECT; |
|---|
| 5290 | 5285 | |
|---|
| 5291 | | - /* fallthru */ |
|---|
| 5286 | + fallthrough; |
|---|
| 5292 | 5287 | case ANEG_STATE_ACK_DETECT: |
|---|
| 5293 | 5288 | if (ap->ack_match != 0) { |
|---|
| 5294 | 5289 | if ((ap->rxconfig & ~ANEG_CFG_ACK) == |
|---|
| .. | .. |
|---|
| 5718 | 5713 | static int tg3_setup_fiber_phy(struct tg3 *tp, bool force_reset) |
|---|
| 5719 | 5714 | { |
|---|
| 5720 | 5715 | u32 orig_pause_cfg; |
|---|
| 5721 | | - u16 orig_active_speed; |
|---|
| 5716 | + u32 orig_active_speed; |
|---|
| 5722 | 5717 | u8 orig_active_duplex; |
|---|
| 5723 | 5718 | u32 mac_status; |
|---|
| 5724 | 5719 | bool current_link_up; |
|---|
| .. | .. |
|---|
| 5822 | 5817 | { |
|---|
| 5823 | 5818 | int err = 0; |
|---|
| 5824 | 5819 | u32 bmsr, bmcr; |
|---|
| 5825 | | - u16 current_speed = SPEED_UNKNOWN; |
|---|
| 5820 | + u32 current_speed = SPEED_UNKNOWN; |
|---|
| 5826 | 5821 | u8 current_duplex = DUPLEX_UNKNOWN; |
|---|
| 5827 | 5822 | bool current_link_up = false; |
|---|
| 5828 | 5823 | u32 local_adv, remote_adv, sgsr; |
|---|
| .. | .. |
|---|
| 6139 | 6134 | } |
|---|
| 6140 | 6135 | |
|---|
| 6141 | 6136 | /* tp->lock must be held */ |
|---|
| 6142 | | -static u64 tg3_refclk_read(struct tg3 *tp) |
|---|
| 6137 | +static u64 tg3_refclk_read(struct tg3 *tp, struct ptp_system_timestamp *sts) |
|---|
| 6143 | 6138 | { |
|---|
| 6144 | | - u64 stamp = tr32(TG3_EAV_REF_CLCK_LSB); |
|---|
| 6145 | | - return stamp | (u64)tr32(TG3_EAV_REF_CLCK_MSB) << 32; |
|---|
| 6139 | + u64 stamp; |
|---|
| 6140 | + |
|---|
| 6141 | + ptp_read_system_prets(sts); |
|---|
| 6142 | + stamp = tr32(TG3_EAV_REF_CLCK_LSB); |
|---|
| 6143 | + ptp_read_system_postts(sts); |
|---|
| 6144 | + stamp |= (u64)tr32(TG3_EAV_REF_CLCK_MSB) << 32; |
|---|
| 6145 | + |
|---|
| 6146 | + return stamp; |
|---|
| 6146 | 6147 | } |
|---|
| 6147 | 6148 | |
|---|
| 6148 | 6149 | /* tp->lock must be held */ |
|---|
| .. | .. |
|---|
| 6233 | 6234 | return 0; |
|---|
| 6234 | 6235 | } |
|---|
| 6235 | 6236 | |
|---|
| 6236 | | -static int tg3_ptp_gettime(struct ptp_clock_info *ptp, struct timespec64 *ts) |
|---|
| 6237 | +static int tg3_ptp_gettimex(struct ptp_clock_info *ptp, struct timespec64 *ts, |
|---|
| 6238 | + struct ptp_system_timestamp *sts) |
|---|
| 6237 | 6239 | { |
|---|
| 6238 | 6240 | u64 ns; |
|---|
| 6239 | 6241 | struct tg3 *tp = container_of(ptp, struct tg3, ptp_info); |
|---|
| 6240 | 6242 | |
|---|
| 6241 | 6243 | tg3_full_lock(tp, 0); |
|---|
| 6242 | | - ns = tg3_refclk_read(tp); |
|---|
| 6244 | + ns = tg3_refclk_read(tp, sts); |
|---|
| 6243 | 6245 | ns += tp->ptp_adjust; |
|---|
| 6244 | 6246 | tg3_full_unlock(tp); |
|---|
| 6245 | 6247 | |
|---|
| .. | .. |
|---|
| 6273 | 6275 | |
|---|
| 6274 | 6276 | switch (rq->type) { |
|---|
| 6275 | 6277 | case PTP_CLK_REQ_PEROUT: |
|---|
| 6278 | + /* Reject requests with unsupported flags */ |
|---|
| 6279 | + if (rq->perout.flags) |
|---|
| 6280 | + return -EOPNOTSUPP; |
|---|
| 6281 | + |
|---|
| 6276 | 6282 | if (rq->perout.index != 0) |
|---|
| 6277 | 6283 | return -EINVAL; |
|---|
| 6278 | 6284 | |
|---|
| .. | .. |
|---|
| 6334 | 6340 | .pps = 0, |
|---|
| 6335 | 6341 | .adjfreq = tg3_ptp_adjfreq, |
|---|
| 6336 | 6342 | .adjtime = tg3_ptp_adjtime, |
|---|
| 6337 | | - .gettime64 = tg3_ptp_gettime, |
|---|
| 6343 | + .gettimex64 = tg3_ptp_gettimex, |
|---|
| 6338 | 6344 | .settime64 = tg3_ptp_settime, |
|---|
| 6339 | 6345 | .enable = tg3_ptp_enable, |
|---|
| 6340 | 6346 | }; |
|---|
| .. | .. |
|---|
| 6703 | 6709 | skb_size = SKB_DATA_ALIGN(data_size + TG3_RX_OFFSET(tp)) + |
|---|
| 6704 | 6710 | SKB_DATA_ALIGN(sizeof(struct skb_shared_info)); |
|---|
| 6705 | 6711 | if (skb_size <= PAGE_SIZE) { |
|---|
| 6706 | | - data = netdev_alloc_frag(skb_size); |
|---|
| 6712 | + data = napi_alloc_frag(skb_size); |
|---|
| 6707 | 6713 | *frag_size = skb_size; |
|---|
| 6708 | 6714 | } else { |
|---|
| 6709 | 6715 | data = kmalloc(skb_size, GFP_ATOMIC); |
|---|
| .. | .. |
|---|
| 6991 | 6997 | tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG, |
|---|
| 6992 | 6998 | tpr->rx_jmb_prod_idx); |
|---|
| 6993 | 6999 | } |
|---|
| 6994 | | - mmiowb(); |
|---|
| 6995 | 7000 | } else if (work_mask) { |
|---|
| 6996 | 7001 | /* rx_std_buffers[] and rx_jmb_buffers[] entries must be |
|---|
| 6997 | 7002 | * updated before the producer indices can be updated. |
|---|
| .. | .. |
|---|
| 7202 | 7207 | tw32_rx_mbox(TG3_RX_JMB_PROD_IDX_REG, |
|---|
| 7203 | 7208 | dpr->rx_jmb_prod_idx); |
|---|
| 7204 | 7209 | |
|---|
| 7205 | | - mmiowb(); |
|---|
| 7206 | | - |
|---|
| 7207 | 7210 | if (err) |
|---|
| 7208 | 7211 | tw32_f(HOSTCC_MODE, tp->coal_now); |
|---|
| 7209 | 7212 | } |
|---|
| .. | .. |
|---|
| 7270 | 7273 | HOSTCC_MODE_ENABLE | |
|---|
| 7271 | 7274 | tnapi->coal_now); |
|---|
| 7272 | 7275 | } |
|---|
| 7273 | | - mmiowb(); |
|---|
| 7274 | 7276 | break; |
|---|
| 7275 | 7277 | } |
|---|
| 7276 | 7278 | } |
|---|
| .. | .. |
|---|
| 7638 | 7640 | } |
|---|
| 7639 | 7641 | #endif |
|---|
| 7640 | 7642 | |
|---|
| 7641 | | -static void tg3_tx_timeout(struct net_device *dev) |
|---|
| 7643 | +static void tg3_tx_timeout(struct net_device *dev, unsigned int txqueue) |
|---|
| 7642 | 7644 | { |
|---|
| 7643 | 7645 | struct tg3 *tp = netdev_priv(dev); |
|---|
| 7644 | 7646 | |
|---|
| .. | .. |
|---|
| 7867 | 7869 | static int tg3_tso_bug(struct tg3 *tp, struct tg3_napi *tnapi, |
|---|
| 7868 | 7870 | struct netdev_queue *txq, struct sk_buff *skb) |
|---|
| 7869 | 7871 | { |
|---|
| 7870 | | - struct sk_buff *segs, *nskb; |
|---|
| 7871 | 7872 | u32 frag_cnt_est = skb_shinfo(skb)->gso_segs * 3; |
|---|
| 7873 | + struct sk_buff *segs, *seg, *next; |
|---|
| 7872 | 7874 | |
|---|
| 7873 | 7875 | /* Estimate the number of fragments in the worst case */ |
|---|
| 7874 | 7876 | if (unlikely(tg3_tx_avail(tnapi) <= frag_cnt_est)) { |
|---|
| .. | .. |
|---|
| 7891 | 7893 | if (IS_ERR(segs) || !segs) |
|---|
| 7892 | 7894 | goto tg3_tso_bug_end; |
|---|
| 7893 | 7895 | |
|---|
| 7894 | | - do { |
|---|
| 7895 | | - nskb = segs; |
|---|
| 7896 | | - segs = segs->next; |
|---|
| 7897 | | - nskb->next = NULL; |
|---|
| 7898 | | - tg3_start_xmit(nskb, tp->dev); |
|---|
| 7899 | | - } while (segs); |
|---|
| 7896 | + skb_list_walk_safe(segs, seg, next) { |
|---|
| 7897 | + skb_mark_not_on_list(seg); |
|---|
| 7898 | + tg3_start_xmit(seg, tp->dev); |
|---|
| 7899 | + } |
|---|
| 7900 | 7900 | |
|---|
| 7901 | 7901 | tg3_tso_bug_end: |
|---|
| 7902 | 7902 | dev_consume_skb_any(skb); |
|---|
| .. | .. |
|---|
| 8148 | 8148 | netif_tx_wake_queue(txq); |
|---|
| 8149 | 8149 | } |
|---|
| 8150 | 8150 | |
|---|
| 8151 | | - if (!skb->xmit_more || netif_xmit_stopped(txq)) { |
|---|
| 8151 | + if (!netdev_xmit_more() || netif_xmit_stopped(txq)) { |
|---|
| 8152 | 8152 | /* Packets are ready, update Tx producer idx on card. */ |
|---|
| 8153 | 8153 | tw32_tx_mbox(tnapi->prodmbox, entry); |
|---|
| 8154 | | - mmiowb(); |
|---|
| 8155 | 8154 | } |
|---|
| 8156 | 8155 | |
|---|
| 8157 | 8156 | return NETDEV_TX_OK; |
|---|
| .. | .. |
|---|
| 8704 | 8703 | if (!i && tg3_flag(tp, ENABLE_RSS)) |
|---|
| 8705 | 8704 | continue; |
|---|
| 8706 | 8705 | |
|---|
| 8707 | | - tnapi->rx_rcb = dma_zalloc_coherent(&tp->pdev->dev, |
|---|
| 8708 | | - TG3_RX_RCB_RING_BYTES(tp), |
|---|
| 8709 | | - &tnapi->rx_rcb_mapping, |
|---|
| 8710 | | - GFP_KERNEL); |
|---|
| 8706 | + tnapi->rx_rcb = dma_alloc_coherent(&tp->pdev->dev, |
|---|
| 8707 | + TG3_RX_RCB_RING_BYTES(tp), |
|---|
| 8708 | + &tnapi->rx_rcb_mapping, |
|---|
| 8709 | + GFP_KERNEL); |
|---|
| 8711 | 8710 | if (!tnapi->rx_rcb) |
|---|
| 8712 | 8711 | goto err_out; |
|---|
| 8713 | 8712 | } |
|---|
| .. | .. |
|---|
| 8760 | 8759 | { |
|---|
| 8761 | 8760 | int i; |
|---|
| 8762 | 8761 | |
|---|
| 8763 | | - tp->hw_stats = dma_zalloc_coherent(&tp->pdev->dev, |
|---|
| 8764 | | - sizeof(struct tg3_hw_stats), |
|---|
| 8765 | | - &tp->stats_mapping, GFP_KERNEL); |
|---|
| 8762 | + tp->hw_stats = dma_alloc_coherent(&tp->pdev->dev, |
|---|
| 8763 | + sizeof(struct tg3_hw_stats), |
|---|
| 8764 | + &tp->stats_mapping, GFP_KERNEL); |
|---|
| 8766 | 8765 | if (!tp->hw_stats) |
|---|
| 8767 | 8766 | goto err_out; |
|---|
| 8768 | 8767 | |
|---|
| .. | .. |
|---|
| 8770 | 8769 | struct tg3_napi *tnapi = &tp->napi[i]; |
|---|
| 8771 | 8770 | struct tg3_hw_status *sblk; |
|---|
| 8772 | 8771 | |
|---|
| 8773 | | - tnapi->hw_status = dma_zalloc_coherent(&tp->pdev->dev, |
|---|
| 8774 | | - TG3_HW_STATUS_SIZE, |
|---|
| 8775 | | - &tnapi->status_mapping, |
|---|
| 8776 | | - GFP_KERNEL); |
|---|
| 8772 | + tnapi->hw_status = dma_alloc_coherent(&tp->pdev->dev, |
|---|
| 8773 | + TG3_HW_STATUS_SIZE, |
|---|
| 8774 | + &tnapi->status_mapping, |
|---|
| 8775 | + GFP_KERNEL); |
|---|
| 8777 | 8776 | if (!tnapi->hw_status) |
|---|
| 8778 | 8777 | goto err_out; |
|---|
| 8779 | 8778 | |
|---|
| .. | .. |
|---|
| 10722 | 10721 | switch (limit) { |
|---|
| 10723 | 10722 | case 16: |
|---|
| 10724 | 10723 | tw32(MAC_RCV_RULE_15, 0); tw32(MAC_RCV_VALUE_15, 0); |
|---|
| 10725 | | - /* fall through */ |
|---|
| 10724 | + fallthrough; |
|---|
| 10726 | 10725 | case 15: |
|---|
| 10727 | 10726 | tw32(MAC_RCV_RULE_14, 0); tw32(MAC_RCV_VALUE_14, 0); |
|---|
| 10728 | | - /* fall through */ |
|---|
| 10727 | + fallthrough; |
|---|
| 10729 | 10728 | case 14: |
|---|
| 10730 | 10729 | tw32(MAC_RCV_RULE_13, 0); tw32(MAC_RCV_VALUE_13, 0); |
|---|
| 10731 | | - /* fall through */ |
|---|
| 10730 | + fallthrough; |
|---|
| 10732 | 10731 | case 13: |
|---|
| 10733 | 10732 | tw32(MAC_RCV_RULE_12, 0); tw32(MAC_RCV_VALUE_12, 0); |
|---|
| 10734 | | - /* fall through */ |
|---|
| 10733 | + fallthrough; |
|---|
| 10735 | 10734 | case 12: |
|---|
| 10736 | 10735 | tw32(MAC_RCV_RULE_11, 0); tw32(MAC_RCV_VALUE_11, 0); |
|---|
| 10737 | | - /* fall through */ |
|---|
| 10736 | + fallthrough; |
|---|
| 10738 | 10737 | case 11: |
|---|
| 10739 | 10738 | tw32(MAC_RCV_RULE_10, 0); tw32(MAC_RCV_VALUE_10, 0); |
|---|
| 10740 | | - /* fall through */ |
|---|
| 10739 | + fallthrough; |
|---|
| 10741 | 10740 | case 10: |
|---|
| 10742 | 10741 | tw32(MAC_RCV_RULE_9, 0); tw32(MAC_RCV_VALUE_9, 0); |
|---|
| 10743 | | - /* fall through */ |
|---|
| 10742 | + fallthrough; |
|---|
| 10744 | 10743 | case 9: |
|---|
| 10745 | 10744 | tw32(MAC_RCV_RULE_8, 0); tw32(MAC_RCV_VALUE_8, 0); |
|---|
| 10746 | | - /* fall through */ |
|---|
| 10745 | + fallthrough; |
|---|
| 10747 | 10746 | case 8: |
|---|
| 10748 | 10747 | tw32(MAC_RCV_RULE_7, 0); tw32(MAC_RCV_VALUE_7, 0); |
|---|
| 10749 | | - /* fall through */ |
|---|
| 10748 | + fallthrough; |
|---|
| 10750 | 10749 | case 7: |
|---|
| 10751 | 10750 | tw32(MAC_RCV_RULE_6, 0); tw32(MAC_RCV_VALUE_6, 0); |
|---|
| 10752 | | - /* fall through */ |
|---|
| 10751 | + fallthrough; |
|---|
| 10753 | 10752 | case 6: |
|---|
| 10754 | 10753 | tw32(MAC_RCV_RULE_5, 0); tw32(MAC_RCV_VALUE_5, 0); |
|---|
| 10755 | | - /* fall through */ |
|---|
| 10754 | + fallthrough; |
|---|
| 10756 | 10755 | case 5: |
|---|
| 10757 | 10756 | tw32(MAC_RCV_RULE_4, 0); tw32(MAC_RCV_VALUE_4, 0); |
|---|
| 10758 | | - /* fall through */ |
|---|
| 10757 | + fallthrough; |
|---|
| 10759 | 10758 | case 4: |
|---|
| 10760 | 10759 | /* tw32(MAC_RCV_RULE_3, 0); tw32(MAC_RCV_VALUE_3, 0); */ |
|---|
| 10761 | 10760 | case 3: |
|---|
| .. | .. |
|---|
| 10799 | 10798 | #ifdef CONFIG_TIGON3_HWMON |
|---|
| 10800 | 10799 | static void tg3_sd_scan_scratchpad(struct tg3 *tp, struct tg3_ocir *ocir) |
|---|
| 10801 | 10800 | { |
|---|
| 10801 | + u32 off, len = TG3_OCIR_LEN; |
|---|
| 10802 | 10802 | int i; |
|---|
| 10803 | 10803 | |
|---|
| 10804 | | - for (i = 0; i < TG3_SD_NUM_RECS; i++, ocir++) { |
|---|
| 10805 | | - u32 off = i * TG3_OCIR_LEN, len = TG3_OCIR_LEN; |
|---|
| 10806 | | - |
|---|
| 10804 | + for (i = 0, off = 0; i < TG3_SD_NUM_RECS; i++, ocir++, off += len) { |
|---|
| 10807 | 10805 | tg3_ape_scratchpad_read(tp, (u32 *) ocir, off, len); |
|---|
| 10808 | | - off += len; |
|---|
| 10809 | 10806 | |
|---|
| 10810 | 10807 | if (ocir->signature != TG3_OCIR_SIG_MAGIC || |
|---|
| 10811 | 10808 | !(ocir->version_flags & TG3_OCIR_FLAG_ACTIVE)) |
|---|
| 10812 | | - memset(ocir, 0, TG3_OCIR_LEN); |
|---|
| 10809 | + memset(ocir, 0, len); |
|---|
| 10813 | 10810 | } |
|---|
| 10814 | 10811 | } |
|---|
| 10815 | 10812 | |
|---|
| .. | .. |
|---|
| 11189 | 11186 | rtnl_lock(); |
|---|
| 11190 | 11187 | tg3_full_lock(tp, 0); |
|---|
| 11191 | 11188 | |
|---|
| 11192 | | - if (!netif_running(tp->dev)) { |
|---|
| 11189 | + if (tp->pcierr_recovery || !netif_running(tp->dev)) { |
|---|
| 11193 | 11190 | tg3_flag_clear(tp, RESET_TASK_PENDING); |
|---|
| 11194 | 11191 | tg3_full_unlock(tp); |
|---|
| 11195 | 11192 | rtnl_unlock(); |
|---|
| .. | .. |
|---|
| 12322 | 12319 | struct tg3 *tp = netdev_priv(dev); |
|---|
| 12323 | 12320 | |
|---|
| 12324 | 12321 | strlcpy(info->driver, DRV_MODULE_NAME, sizeof(info->driver)); |
|---|
| 12325 | | - strlcpy(info->version, DRV_MODULE_VERSION, sizeof(info->version)); |
|---|
| 12326 | 12322 | strlcpy(info->fw_version, tp->fw_ver, sizeof(info->fw_version)); |
|---|
| 12327 | 12323 | strlcpy(info->bus_info, pci_name(tp->pdev), sizeof(info->bus_info)); |
|---|
| 12328 | 12324 | } |
|---|
| .. | .. |
|---|
| 12513 | 12509 | tg3_warn_mgmt_link_flap(tp); |
|---|
| 12514 | 12510 | |
|---|
| 12515 | 12511 | if (tg3_flag(tp, USE_PHYLIB)) { |
|---|
| 12516 | | - u32 newadv; |
|---|
| 12517 | 12512 | struct phy_device *phydev; |
|---|
| 12518 | 12513 | |
|---|
| 12519 | 12514 | phydev = mdiobus_get_phy(tp->mdio_bus, tp->phy_addr); |
|---|
| 12520 | 12515 | |
|---|
| 12521 | | - if (!(phydev->supported & SUPPORTED_Pause) || |
|---|
| 12522 | | - (!(phydev->supported & SUPPORTED_Asym_Pause) && |
|---|
| 12523 | | - (epause->rx_pause != epause->tx_pause))) |
|---|
| 12516 | + if (!phy_validate_pause(phydev, epause)) |
|---|
| 12524 | 12517 | return -EINVAL; |
|---|
| 12525 | 12518 | |
|---|
| 12526 | 12519 | tp->link_config.flowctrl = 0; |
|---|
| 12520 | + phy_set_asym_pause(phydev, epause->rx_pause, epause->tx_pause); |
|---|
| 12527 | 12521 | if (epause->rx_pause) { |
|---|
| 12528 | 12522 | tp->link_config.flowctrl |= FLOW_CTRL_RX; |
|---|
| 12529 | 12523 | |
|---|
| 12530 | 12524 | if (epause->tx_pause) { |
|---|
| 12531 | 12525 | tp->link_config.flowctrl |= FLOW_CTRL_TX; |
|---|
| 12532 | | - newadv = ADVERTISED_Pause; |
|---|
| 12533 | | - } else |
|---|
| 12534 | | - newadv = ADVERTISED_Pause | |
|---|
| 12535 | | - ADVERTISED_Asym_Pause; |
|---|
| 12526 | + } |
|---|
| 12536 | 12527 | } else if (epause->tx_pause) { |
|---|
| 12537 | 12528 | tp->link_config.flowctrl |= FLOW_CTRL_TX; |
|---|
| 12538 | | - newadv = ADVERTISED_Asym_Pause; |
|---|
| 12539 | | - } else |
|---|
| 12540 | | - newadv = 0; |
|---|
| 12529 | + } |
|---|
| 12541 | 12530 | |
|---|
| 12542 | 12531 | if (epause->autoneg) |
|---|
| 12543 | 12532 | tg3_flag_set(tp, PAUSE_AUTONEG); |
|---|
| .. | .. |
|---|
| 12545 | 12534 | tg3_flag_clear(tp, PAUSE_AUTONEG); |
|---|
| 12546 | 12535 | |
|---|
| 12547 | 12536 | if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) { |
|---|
| 12548 | | - u32 oldadv = phydev->advertising & |
|---|
| 12549 | | - (ADVERTISED_Pause | ADVERTISED_Asym_Pause); |
|---|
| 12550 | | - if (oldadv != newadv) { |
|---|
| 12551 | | - phydev->advertising &= |
|---|
| 12552 | | - ~(ADVERTISED_Pause | |
|---|
| 12553 | | - ADVERTISED_Asym_Pause); |
|---|
| 12554 | | - phydev->advertising |= newadv; |
|---|
| 12555 | | - if (phydev->autoneg) { |
|---|
| 12556 | | - /* |
|---|
| 12557 | | - * Always renegotiate the link to |
|---|
| 12558 | | - * inform our link partner of our |
|---|
| 12559 | | - * flow control settings, even if the |
|---|
| 12560 | | - * flow control is forced. Let |
|---|
| 12561 | | - * tg3_adjust_link() do the final |
|---|
| 12562 | | - * flow control setup. |
|---|
| 12563 | | - */ |
|---|
| 12564 | | - return phy_start_aneg(phydev); |
|---|
| 12565 | | - } |
|---|
| 12537 | + if (phydev->autoneg) { |
|---|
| 12538 | + /* phy_set_asym_pause() will |
|---|
| 12539 | + * renegotiate the link to inform our |
|---|
| 12540 | + * link partner of our flow control |
|---|
| 12541 | + * settings, even if the flow control |
|---|
| 12542 | + * is forced. Let tg3_adjust_link() |
|---|
| 12543 | + * do the final flow control setup. |
|---|
| 12544 | + */ |
|---|
| 12545 | + return 0; |
|---|
| 12566 | 12546 | } |
|---|
| 12567 | 12547 | |
|---|
| 12568 | 12548 | if (!epause->autoneg) |
|---|
| 12569 | 12549 | tg3_setup_flow_control(tp, 0, 0); |
|---|
| 12570 | | - } else { |
|---|
| 12571 | | - tp->link_config.advertising &= |
|---|
| 12572 | | - ~(ADVERTISED_Pause | |
|---|
| 12573 | | - ADVERTISED_Asym_Pause); |
|---|
| 12574 | | - tp->link_config.advertising |= newadv; |
|---|
| 12575 | 12550 | } |
|---|
| 12576 | 12551 | } else { |
|---|
| 12577 | 12552 | int irq_sync = 0; |
|---|
| .. | .. |
|---|
| 12784 | 12759 | enum ethtool_phys_id_state state) |
|---|
| 12785 | 12760 | { |
|---|
| 12786 | 12761 | struct tg3 *tp = netdev_priv(dev); |
|---|
| 12787 | | - |
|---|
| 12788 | | - if (!netif_running(tp->dev)) |
|---|
| 12789 | | - return -EAGAIN; |
|---|
| 12790 | 12762 | |
|---|
| 12791 | 12763 | switch (state) { |
|---|
| 12792 | 12764 | case ETHTOOL_ID_ACTIVE: |
|---|
| .. | .. |
|---|
| 14036 | 14008 | case SIOCGMIIPHY: |
|---|
| 14037 | 14009 | data->phy_id = tp->phy_addr; |
|---|
| 14038 | 14010 | |
|---|
| 14039 | | - /* fallthru */ |
|---|
| 14011 | + fallthrough; |
|---|
| 14040 | 14012 | case SIOCGMIIREG: { |
|---|
| 14041 | 14013 | u32 mii_regval; |
|---|
| 14042 | 14014 | |
|---|
| .. | .. |
|---|
| 14189 | 14161 | } |
|---|
| 14190 | 14162 | |
|---|
| 14191 | 14163 | static const struct ethtool_ops tg3_ethtool_ops = { |
|---|
| 14164 | + .supported_coalesce_params = ETHTOOL_COALESCE_USECS | |
|---|
| 14165 | + ETHTOOL_COALESCE_MAX_FRAMES | |
|---|
| 14166 | + ETHTOOL_COALESCE_USECS_IRQ | |
|---|
| 14167 | + ETHTOOL_COALESCE_MAX_FRAMES_IRQ | |
|---|
| 14168 | + ETHTOOL_COALESCE_STATS_BLOCK_USECS, |
|---|
| 14192 | 14169 | .get_drvinfo = tg3_get_drvinfo, |
|---|
| 14193 | 14170 | .get_regs_len = tg3_get_regs_len, |
|---|
| 14194 | 14171 | .get_regs = tg3_get_regs, |
|---|
| .. | .. |
|---|
| 17007 | 16984 | return err; |
|---|
| 17008 | 16985 | } |
|---|
| 17009 | 16986 | |
|---|
| 17010 | | -#ifdef CONFIG_SPARC |
|---|
| 17011 | | -static int tg3_get_macaddr_sparc(struct tg3 *tp) |
|---|
| 17012 | | -{ |
|---|
| 17013 | | - struct net_device *dev = tp->dev; |
|---|
| 17014 | | - struct pci_dev *pdev = tp->pdev; |
|---|
| 17015 | | - struct device_node *dp = pci_device_to_OF_node(pdev); |
|---|
| 17016 | | - const unsigned char *addr; |
|---|
| 17017 | | - int len; |
|---|
| 17018 | | - |
|---|
| 17019 | | - addr = of_get_property(dp, "local-mac-address", &len); |
|---|
| 17020 | | - if (addr && len == ETH_ALEN) { |
|---|
| 17021 | | - memcpy(dev->dev_addr, addr, ETH_ALEN); |
|---|
| 17022 | | - return 0; |
|---|
| 17023 | | - } |
|---|
| 17024 | | - return -ENODEV; |
|---|
| 17025 | | -} |
|---|
| 17026 | | - |
|---|
| 17027 | | -static int tg3_get_default_macaddr_sparc(struct tg3 *tp) |
|---|
| 17028 | | -{ |
|---|
| 17029 | | - struct net_device *dev = tp->dev; |
|---|
| 17030 | | - |
|---|
| 17031 | | - memcpy(dev->dev_addr, idprom->id_ethaddr, ETH_ALEN); |
|---|
| 17032 | | - return 0; |
|---|
| 17033 | | -} |
|---|
| 17034 | | -#endif |
|---|
| 17035 | | - |
|---|
| 17036 | 16987 | static int tg3_get_device_address(struct tg3 *tp) |
|---|
| 17037 | 16988 | { |
|---|
| 17038 | 16989 | struct net_device *dev = tp->dev; |
|---|
| .. | .. |
|---|
| 17040 | 16991 | int addr_ok = 0; |
|---|
| 17041 | 16992 | int err; |
|---|
| 17042 | 16993 | |
|---|
| 17043 | | -#ifdef CONFIG_SPARC |
|---|
| 17044 | | - if (!tg3_get_macaddr_sparc(tp)) |
|---|
| 16994 | + if (!eth_platform_get_mac_address(&tp->pdev->dev, dev->dev_addr)) |
|---|
| 17045 | 16995 | return 0; |
|---|
| 17046 | | -#endif |
|---|
| 17047 | 16996 | |
|---|
| 17048 | 16997 | if (tg3_flag(tp, IS_SSB_CORE)) { |
|---|
| 17049 | 16998 | err = ssb_gige_get_macaddr(tp->pdev, &dev->dev_addr[0]); |
|---|
| .. | .. |
|---|
| 17105 | 17054 | } |
|---|
| 17106 | 17055 | } |
|---|
| 17107 | 17056 | |
|---|
| 17108 | | - if (!is_valid_ether_addr(&dev->dev_addr[0])) { |
|---|
| 17109 | | -#ifdef CONFIG_SPARC |
|---|
| 17110 | | - if (!tg3_get_default_macaddr_sparc(tp)) |
|---|
| 17111 | | - return 0; |
|---|
| 17112 | | -#endif |
|---|
| 17057 | + if (!is_valid_ether_addr(&dev->dev_addr[0])) |
|---|
| 17113 | 17058 | return -EINVAL; |
|---|
| 17114 | | - } |
|---|
| 17115 | 17059 | return 0; |
|---|
| 17116 | 17060 | } |
|---|
| 17117 | 17061 | |
|---|
| .. | .. |
|---|
| 17202 | 17146 | val |= DMA_RWCTRL_WRITE_BNDRY_64_PCIE; |
|---|
| 17203 | 17147 | break; |
|---|
| 17204 | 17148 | } |
|---|
| 17205 | | - /* fallthrough */ |
|---|
| 17149 | + fallthrough; |
|---|
| 17206 | 17150 | case 128: |
|---|
| 17207 | 17151 | default: |
|---|
| 17208 | 17152 | val &= ~DMA_RWCTRL_WRITE_BNDRY_DISAB_PCIE; |
|---|
| .. | .. |
|---|
| 17217 | 17161 | DMA_RWCTRL_WRITE_BNDRY_16); |
|---|
| 17218 | 17162 | break; |
|---|
| 17219 | 17163 | } |
|---|
| 17220 | | - /* fallthrough */ |
|---|
| 17164 | + fallthrough; |
|---|
| 17221 | 17165 | case 32: |
|---|
| 17222 | 17166 | if (goal == BOUNDARY_SINGLE_CACHELINE) { |
|---|
| 17223 | 17167 | val |= (DMA_RWCTRL_READ_BNDRY_32 | |
|---|
| 17224 | 17168 | DMA_RWCTRL_WRITE_BNDRY_32); |
|---|
| 17225 | 17169 | break; |
|---|
| 17226 | 17170 | } |
|---|
| 17227 | | - /* fallthrough */ |
|---|
| 17171 | + fallthrough; |
|---|
| 17228 | 17172 | case 64: |
|---|
| 17229 | 17173 | if (goal == BOUNDARY_SINGLE_CACHELINE) { |
|---|
| 17230 | 17174 | val |= (DMA_RWCTRL_READ_BNDRY_64 | |
|---|
| 17231 | 17175 | DMA_RWCTRL_WRITE_BNDRY_64); |
|---|
| 17232 | 17176 | break; |
|---|
| 17233 | 17177 | } |
|---|
| 17234 | | - /* fallthrough */ |
|---|
| 17178 | + fallthrough; |
|---|
| 17235 | 17179 | case 128: |
|---|
| 17236 | 17180 | if (goal == BOUNDARY_SINGLE_CACHELINE) { |
|---|
| 17237 | 17181 | val |= (DMA_RWCTRL_READ_BNDRY_128 | |
|---|
| 17238 | 17182 | DMA_RWCTRL_WRITE_BNDRY_128); |
|---|
| 17239 | 17183 | break; |
|---|
| 17240 | 17184 | } |
|---|
| 17241 | | - /* fallthrough */ |
|---|
| 17185 | + fallthrough; |
|---|
| 17242 | 17186 | case 256: |
|---|
| 17243 | 17187 | val |= (DMA_RWCTRL_READ_BNDRY_256 | |
|---|
| 17244 | 17188 | DMA_RWCTRL_WRITE_BNDRY_256); |
|---|
| .. | .. |
|---|
| 17687 | 17631 | u64 dma_mask, persist_dma_mask; |
|---|
| 17688 | 17632 | netdev_features_t features = 0; |
|---|
| 17689 | 17633 | |
|---|
| 17690 | | - printk_once(KERN_INFO "%s\n", version); |
|---|
| 17691 | | - |
|---|
| 17692 | 17634 | err = pci_enable_device(pdev); |
|---|
| 17693 | 17635 | if (err) { |
|---|
| 17694 | 17636 | dev_err(&pdev->dev, "Cannot enable PCI device, aborting\n"); |
|---|
| .. | .. |
|---|
| 18105 | 18047 | #ifdef CONFIG_PM_SLEEP |
|---|
| 18106 | 18048 | static int tg3_suspend(struct device *device) |
|---|
| 18107 | 18049 | { |
|---|
| 18108 | | - struct pci_dev *pdev = to_pci_dev(device); |
|---|
| 18109 | | - struct net_device *dev = pci_get_drvdata(pdev); |
|---|
| 18050 | + struct net_device *dev = dev_get_drvdata(device); |
|---|
| 18110 | 18051 | struct tg3 *tp = netdev_priv(dev); |
|---|
| 18111 | 18052 | int err = 0; |
|---|
| 18112 | 18053 | |
|---|
| .. | .. |
|---|
| 18162 | 18103 | |
|---|
| 18163 | 18104 | static int tg3_resume(struct device *device) |
|---|
| 18164 | 18105 | { |
|---|
| 18165 | | - struct pci_dev *pdev = to_pci_dev(device); |
|---|
| 18166 | | - struct net_device *dev = pci_get_drvdata(pdev); |
|---|
| 18106 | + struct net_device *dev = dev_get_drvdata(device); |
|---|
| 18167 | 18107 | struct tg3 *tp = netdev_priv(dev); |
|---|
| 18168 | 18108 | int err = 0; |
|---|
| 18169 | 18109 | |
|---|
| .. | .. |
|---|
| 18207 | 18147 | struct net_device *dev = pci_get_drvdata(pdev); |
|---|
| 18208 | 18148 | struct tg3 *tp = netdev_priv(dev); |
|---|
| 18209 | 18149 | |
|---|
| 18150 | + tg3_reset_task_cancel(tp); |
|---|
| 18151 | + |
|---|
| 18210 | 18152 | rtnl_lock(); |
|---|
| 18153 | + |
|---|
| 18211 | 18154 | netif_device_detach(dev); |
|---|
| 18212 | 18155 | |
|---|
| 18213 | 18156 | if (netif_running(dev)) |
|---|
| 18214 | 18157 | dev_close(dev); |
|---|
| 18215 | 18158 | |
|---|
| 18216 | | - if (system_state == SYSTEM_POWER_OFF) |
|---|
| 18217 | | - tg3_power_down(tp); |
|---|
| 18159 | + tg3_power_down(tp); |
|---|
| 18218 | 18160 | |
|---|
| 18219 | 18161 | rtnl_unlock(); |
|---|
| 18162 | + |
|---|
| 18163 | + pci_disable_device(pdev); |
|---|
| 18220 | 18164 | } |
|---|
| 18221 | 18165 | |
|---|
| 18222 | 18166 | /** |
|---|
| .. | .. |
|---|
| 18236 | 18180 | |
|---|
| 18237 | 18181 | netdev_info(netdev, "PCI I/O error detected\n"); |
|---|
| 18238 | 18182 | |
|---|
| 18183 | + /* Want to make sure that the reset task doesn't run */ |
|---|
| 18184 | + tg3_reset_task_cancel(tp); |
|---|
| 18185 | + |
|---|
| 18239 | 18186 | rtnl_lock(); |
|---|
| 18240 | 18187 | |
|---|
| 18241 | 18188 | /* Could be second call or maybe we don't have netdev yet */ |
|---|
| .. | .. |
|---|
| 18251 | 18198 | tg3_netif_stop(tp); |
|---|
| 18252 | 18199 | |
|---|
| 18253 | 18200 | tg3_timer_stop(tp); |
|---|
| 18254 | | - |
|---|
| 18255 | | - /* Want to make sure that the reset task doesn't run */ |
|---|
| 18256 | | - tg3_reset_task_cancel(tp); |
|---|
| 18257 | 18201 | |
|---|
| 18258 | 18202 | netif_device_detach(netdev); |
|---|
| 18259 | 18203 | |
|---|