diff options
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/tg3.c | 35 | ||||
-rw-r--r-- | drivers/net/tg3.h | 4 |
2 files changed, 20 insertions, 19 deletions
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c index 281cd7aff8fe..e0ff49bb8d01 100644 --- a/drivers/net/tg3.c +++ b/drivers/net/tg3.c | |||
@@ -1543,8 +1543,8 @@ static void tg3_phy_start(struct tg3 *tp) | |||
1543 | 1543 | ||
1544 | phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; | 1544 | phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; |
1545 | 1545 | ||
1546 | if (tp->link_config.phy_is_low_power) { | 1546 | if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) { |
1547 | tp->link_config.phy_is_low_power = 0; | 1547 | tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER; |
1548 | phydev->speed = tp->link_config.orig_speed; | 1548 | phydev->speed = tp->link_config.orig_speed; |
1549 | phydev->duplex = tp->link_config.orig_duplex; | 1549 | phydev->duplex = tp->link_config.orig_duplex; |
1550 | phydev->autoneg = tp->link_config.orig_autoneg; | 1550 | phydev->autoneg = tp->link_config.orig_autoneg; |
@@ -2559,13 +2559,13 @@ static int tg3_set_power_state(struct tg3 *tp, pci_power_t state) | |||
2559 | if (tp->tg3_flags3 & TG3_FLG3_USE_PHYLIB) { | 2559 | if (tp->tg3_flags3 & TG3_FLG3_USE_PHYLIB) { |
2560 | do_low_power = false; | 2560 | do_low_power = false; |
2561 | if ((tp->tg3_flags3 & TG3_FLG3_PHY_CONNECTED) && | 2561 | if ((tp->tg3_flags3 & TG3_FLG3_PHY_CONNECTED) && |
2562 | !tp->link_config.phy_is_low_power) { | 2562 | !(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) { |
2563 | struct phy_device *phydev; | 2563 | struct phy_device *phydev; |
2564 | u32 phyid, advertising; | 2564 | u32 phyid, advertising; |
2565 | 2565 | ||
2566 | phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; | 2566 | phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]; |
2567 | 2567 | ||
2568 | tp->link_config.phy_is_low_power = 1; | 2568 | tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER; |
2569 | 2569 | ||
2570 | tp->link_config.orig_speed = phydev->speed; | 2570 | tp->link_config.orig_speed = phydev->speed; |
2571 | tp->link_config.orig_duplex = phydev->duplex; | 2571 | tp->link_config.orig_duplex = phydev->duplex; |
@@ -2604,8 +2604,8 @@ static int tg3_set_power_state(struct tg3 *tp, pci_power_t state) | |||
2604 | } else { | 2604 | } else { |
2605 | do_low_power = true; | 2605 | do_low_power = true; |
2606 | 2606 | ||
2607 | if (tp->link_config.phy_is_low_power == 0) { | 2607 | if (!(tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) { |
2608 | tp->link_config.phy_is_low_power = 1; | 2608 | tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER; |
2609 | tp->link_config.orig_speed = tp->link_config.speed; | 2609 | tp->link_config.orig_speed = tp->link_config.speed; |
2610 | tp->link_config.orig_duplex = tp->link_config.duplex; | 2610 | tp->link_config.orig_duplex = tp->link_config.duplex; |
2611 | tp->link_config.orig_autoneg = tp->link_config.autoneg; | 2611 | tp->link_config.orig_autoneg = tp->link_config.autoneg; |
@@ -2836,7 +2836,7 @@ static void tg3_phy_copper_begin(struct tg3 *tp) | |||
2836 | u32 new_adv; | 2836 | u32 new_adv; |
2837 | int i; | 2837 | int i; |
2838 | 2838 | ||
2839 | if (tp->link_config.phy_is_low_power) { | 2839 | if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) { |
2840 | /* Entering low power mode. Disable gigabit and | 2840 | /* Entering low power mode. Disable gigabit and |
2841 | * 100baseT advertisements. | 2841 | * 100baseT advertisements. |
2842 | */ | 2842 | */ |
@@ -3237,7 +3237,7 @@ static int tg3_setup_copper_phy(struct tg3 *tp, int force_reset) | |||
3237 | } | 3237 | } |
3238 | 3238 | ||
3239 | relink: | 3239 | relink: |
3240 | if (current_link_up == 0 || tp->link_config.phy_is_low_power) { | 3240 | if (current_link_up == 0 || (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER)) { |
3241 | u32 tmp; | 3241 | u32 tmp; |
3242 | 3242 | ||
3243 | tg3_phy_copper_begin(tp); | 3243 | tg3_phy_copper_begin(tp); |
@@ -8320,8 +8320,8 @@ static int tg3_reset_hw(struct tg3 *tp, int reset_phy) | |||
8320 | } | 8320 | } |
8321 | 8321 | ||
8322 | if (!(tp->tg3_flags3 & TG3_FLG3_USE_PHYLIB)) { | 8322 | if (!(tp->tg3_flags3 & TG3_FLG3_USE_PHYLIB)) { |
8323 | if (tp->link_config.phy_is_low_power) { | 8323 | if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) { |
8324 | tp->link_config.phy_is_low_power = 0; | 8324 | tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER; |
8325 | tp->link_config.speed = tp->link_config.orig_speed; | 8325 | tp->link_config.speed = tp->link_config.orig_speed; |
8326 | tp->link_config.duplex = tp->link_config.orig_duplex; | 8326 | tp->link_config.duplex = tp->link_config.orig_duplex; |
8327 | tp->link_config.autoneg = tp->link_config.orig_autoneg; | 8327 | tp->link_config.autoneg = tp->link_config.orig_autoneg; |
@@ -9368,7 +9368,7 @@ static void tg3_get_regs(struct net_device *dev, | |||
9368 | 9368 | ||
9369 | memset(p, 0, TG3_REGDUMP_LEN); | 9369 | memset(p, 0, TG3_REGDUMP_LEN); |
9370 | 9370 | ||
9371 | if (tp->link_config.phy_is_low_power) | 9371 | if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) |
9372 | return; | 9372 | return; |
9373 | 9373 | ||
9374 | tg3_full_lock(tp, 0); | 9374 | tg3_full_lock(tp, 0); |
@@ -9447,7 +9447,7 @@ static int tg3_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, | |||
9447 | if (tp->tg3_flags3 & TG3_FLG3_NO_NVRAM) | 9447 | if (tp->tg3_flags3 & TG3_FLG3_NO_NVRAM) |
9448 | return -EINVAL; | 9448 | return -EINVAL; |
9449 | 9449 | ||
9450 | if (tp->link_config.phy_is_low_power) | 9450 | if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) |
9451 | return -EAGAIN; | 9451 | return -EAGAIN; |
9452 | 9452 | ||
9453 | offset = eeprom->offset; | 9453 | offset = eeprom->offset; |
@@ -9509,7 +9509,7 @@ static int tg3_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, | |||
9509 | u8 *buf; | 9509 | u8 *buf; |
9510 | __be32 start, end; | 9510 | __be32 start, end; |
9511 | 9511 | ||
9512 | if (tp->link_config.phy_is_low_power) | 9512 | if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) |
9513 | return -EAGAIN; | 9513 | return -EAGAIN; |
9514 | 9514 | ||
9515 | if ((tp->tg3_flags3 & TG3_FLG3_NO_NVRAM) || | 9515 | if ((tp->tg3_flags3 & TG3_FLG3_NO_NVRAM) || |
@@ -10849,7 +10849,7 @@ static void tg3_self_test(struct net_device *dev, struct ethtool_test *etest, | |||
10849 | { | 10849 | { |
10850 | struct tg3 *tp = netdev_priv(dev); | 10850 | struct tg3 *tp = netdev_priv(dev); |
10851 | 10851 | ||
10852 | if (tp->link_config.phy_is_low_power) | 10852 | if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) |
10853 | tg3_set_power_state(tp, PCI_D0); | 10853 | tg3_set_power_state(tp, PCI_D0); |
10854 | 10854 | ||
10855 | memset(data, 0, sizeof(u64) * TG3_NUM_TEST); | 10855 | memset(data, 0, sizeof(u64) * TG3_NUM_TEST); |
@@ -10917,7 +10917,7 @@ static void tg3_self_test(struct net_device *dev, struct ethtool_test *etest, | |||
10917 | if (irq_sync && !err2) | 10917 | if (irq_sync && !err2) |
10918 | tg3_phy_start(tp); | 10918 | tg3_phy_start(tp); |
10919 | } | 10919 | } |
10920 | if (tp->link_config.phy_is_low_power) | 10920 | if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) |
10921 | tg3_set_power_state(tp, PCI_D3hot); | 10921 | tg3_set_power_state(tp, PCI_D3hot); |
10922 | 10922 | ||
10923 | } | 10923 | } |
@@ -10947,7 +10947,7 @@ static int tg3_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) | |||
10947 | if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) | 10947 | if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) |
10948 | break; /* We have no PHY */ | 10948 | break; /* We have no PHY */ |
10949 | 10949 | ||
10950 | if (tp->link_config.phy_is_low_power) | 10950 | if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) |
10951 | return -EAGAIN; | 10951 | return -EAGAIN; |
10952 | 10952 | ||
10953 | spin_lock_bh(&tp->lock); | 10953 | spin_lock_bh(&tp->lock); |
@@ -10963,7 +10963,7 @@ static int tg3_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) | |||
10963 | if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) | 10963 | if (tp->tg3_flags2 & TG3_FLG2_PHY_SERDES) |
10964 | break; /* We have no PHY */ | 10964 | break; /* We have no PHY */ |
10965 | 10965 | ||
10966 | if (tp->link_config.phy_is_low_power) | 10966 | if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) |
10967 | return -EAGAIN; | 10967 | return -EAGAIN; |
10968 | 10968 | ||
10969 | spin_lock_bh(&tp->lock); | 10969 | spin_lock_bh(&tp->lock); |
@@ -14109,7 +14109,6 @@ static void __devinit tg3_init_link_config(struct tg3 *tp) | |||
14109 | tp->link_config.autoneg = AUTONEG_ENABLE; | 14109 | tp->link_config.autoneg = AUTONEG_ENABLE; |
14110 | tp->link_config.active_speed = SPEED_INVALID; | 14110 | tp->link_config.active_speed = SPEED_INVALID; |
14111 | tp->link_config.active_duplex = DUPLEX_INVALID; | 14111 | tp->link_config.active_duplex = DUPLEX_INVALID; |
14112 | tp->link_config.phy_is_low_power = 0; | ||
14113 | tp->link_config.orig_speed = SPEED_INVALID; | 14112 | tp->link_config.orig_speed = SPEED_INVALID; |
14114 | tp->link_config.orig_duplex = DUPLEX_INVALID; | 14113 | tp->link_config.orig_duplex = DUPLEX_INVALID; |
14115 | tp->link_config.orig_autoneg = AUTONEG_INVALID; | 14114 | tp->link_config.orig_autoneg = AUTONEG_INVALID; |
diff --git a/drivers/net/tg3.h b/drivers/net/tg3.h index d40c380802b0..5d684d2b4034 100644 --- a/drivers/net/tg3.h +++ b/drivers/net/tg3.h | |||
@@ -2534,7 +2534,6 @@ struct tg3_link_config { | |||
2534 | /* When we go in and out of low power mode we need | 2534 | /* When we go in and out of low power mode we need |
2535 | * to swap with this state. | 2535 | * to swap with this state. |
2536 | */ | 2536 | */ |
2537 | int phy_is_low_power; | ||
2538 | u16 orig_speed; | 2537 | u16 orig_speed; |
2539 | u8 orig_duplex; | 2538 | u8 orig_duplex; |
2540 | u8 orig_autoneg; | 2539 | u8 orig_autoneg; |
@@ -2965,6 +2964,9 @@ struct tg3 { | |||
2965 | (X) == TG3_PHY_ID_BCM57765 || (X) == TG3_PHY_ID_BCM5719C || \ | 2964 | (X) == TG3_PHY_ID_BCM57765 || (X) == TG3_PHY_ID_BCM5719C || \ |
2966 | (X) == TG3_PHY_ID_BCM8002) | 2965 | (X) == TG3_PHY_ID_BCM8002) |
2967 | 2966 | ||
2967 | u32 phy_flags; | ||
2968 | #define TG3_PHYFLG_IS_LOW_POWER 0x00000001 | ||
2969 | |||
2968 | u32 led_ctrl; | 2970 | u32 led_ctrl; |
2969 | u32 phy_otp; | 2971 | u32 phy_otp; |
2970 | 2972 | ||