diff options
Diffstat (limited to 'drivers/net/tg3.c')
-rw-r--r-- | drivers/net/tg3.c | 41 |
1 files changed, 21 insertions, 20 deletions
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c index 6c53e2c4aa7c..695dab274d1e 100644 --- a/drivers/net/tg3.c +++ b/drivers/net/tg3.c | |||
@@ -1822,22 +1822,9 @@ static void tg3_phy_eee_adjust(struct tg3 *tp, u32 current_link_up) | |||
1822 | tg3_phy_cl45_read(tp, MDIO_MMD_AN, | 1822 | tg3_phy_cl45_read(tp, MDIO_MMD_AN, |
1823 | TG3_CL45_D7_EEERES_STAT, &val); | 1823 | TG3_CL45_D7_EEERES_STAT, &val); |
1824 | 1824 | ||
1825 | switch (val) { | 1825 | if (val == TG3_CL45_D7_EEERES_STAT_LP_1000T || |
1826 | case TG3_CL45_D7_EEERES_STAT_LP_1000T: | 1826 | val == TG3_CL45_D7_EEERES_STAT_LP_100TX) |
1827 | switch (GET_ASIC_REV(tp->pci_chip_rev_id)) { | ||
1828 | case ASIC_REV_5717: | ||
1829 | case ASIC_REV_5719: | ||
1830 | case ASIC_REV_57765: | ||
1831 | if (!TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) { | ||
1832 | tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, | ||
1833 | 0x0000); | ||
1834 | TG3_PHY_AUXCTL_SMDSP_DISABLE(tp); | ||
1835 | } | ||
1836 | } | ||
1837 | /* Fallthrough */ | ||
1838 | case TG3_CL45_D7_EEERES_STAT_LP_100TX: | ||
1839 | tp->setlpicnt = 2; | 1827 | tp->setlpicnt = 2; |
1840 | } | ||
1841 | } | 1828 | } |
1842 | 1829 | ||
1843 | if (!tp->setlpicnt) { | 1830 | if (!tp->setlpicnt) { |
@@ -1846,6 +1833,23 @@ static void tg3_phy_eee_adjust(struct tg3 *tp, u32 current_link_up) | |||
1846 | } | 1833 | } |
1847 | } | 1834 | } |
1848 | 1835 | ||
1836 | static void tg3_phy_eee_enable(struct tg3 *tp) | ||
1837 | { | ||
1838 | u32 val; | ||
1839 | |||
1840 | if (tp->link_config.active_speed == SPEED_1000 && | ||
1841 | (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || | ||
1842 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5719 || | ||
1843 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765) && | ||
1844 | !TG3_PHY_AUXCTL_SMDSP_ENABLE(tp)) { | ||
1845 | tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, 0x0003); | ||
1846 | TG3_PHY_AUXCTL_SMDSP_DISABLE(tp); | ||
1847 | } | ||
1848 | |||
1849 | val = tr32(TG3_CPMU_EEE_MODE); | ||
1850 | tw32(TG3_CPMU_EEE_MODE, val | TG3_CPMU_EEEMD_LPI_ENABLE); | ||
1851 | } | ||
1852 | |||
1849 | static int tg3_wait_macro_done(struct tg3 *tp) | 1853 | static int tg3_wait_macro_done(struct tg3 *tp) |
1850 | { | 1854 | { |
1851 | int limit = 100; | 1855 | int limit = 100; |
@@ -8844,11 +8848,8 @@ static void tg3_timer(unsigned long __opaque) | |||
8844 | if (tg3_flag(tp, 5705_PLUS)) | 8848 | if (tg3_flag(tp, 5705_PLUS)) |
8845 | tg3_periodic_fetch_stats(tp); | 8849 | tg3_periodic_fetch_stats(tp); |
8846 | 8850 | ||
8847 | if (tp->setlpicnt && !--tp->setlpicnt) { | 8851 | if (tp->setlpicnt && !--tp->setlpicnt) |
8848 | u32 val = tr32(TG3_CPMU_EEE_MODE); | 8852 | tg3_phy_eee_enable(tp); |
8849 | tw32(TG3_CPMU_EEE_MODE, | ||
8850 | val | TG3_CPMU_EEEMD_LPI_ENABLE); | ||
8851 | } | ||
8852 | 8853 | ||
8853 | if (tg3_flag(tp, USE_LINKCHG_REG)) { | 8854 | if (tg3_flag(tp, USE_LINKCHG_REG)) { |
8854 | u32 mac_stat; | 8855 | u32 mac_stat; |