diff options
-rw-r--r-- | drivers/net/tg3.c | 41 | ||||
-rw-r--r-- | drivers/net/tg3.h | 2 |
2 files changed, 22 insertions, 21 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; |
diff --git a/drivers/net/tg3.h b/drivers/net/tg3.h index 330959b9cfbc..83f45bf0a08e 100644 --- a/drivers/net/tg3.h +++ b/drivers/net/tg3.h | |||
@@ -2186,7 +2186,7 @@ | |||
2186 | #define MII_TG3_DSP_TAP26_OPCSINPT 0x0004 | 2186 | #define MII_TG3_DSP_TAP26_OPCSINPT 0x0004 |
2187 | #define MII_TG3_DSP_AADJ1CH0 0x001f | 2187 | #define MII_TG3_DSP_AADJ1CH0 0x001f |
2188 | #define MII_TG3_DSP_CH34TP2 0x4022 | 2188 | #define MII_TG3_DSP_CH34TP2 0x4022 |
2189 | #define MII_TG3_DSP_CH34TP2_HIBW01 0x0010 | 2189 | #define MII_TG3_DSP_CH34TP2_HIBW01 0x017b |
2190 | #define MII_TG3_DSP_AADJ1CH3 0x601f | 2190 | #define MII_TG3_DSP_AADJ1CH3 0x601f |
2191 | #define MII_TG3_DSP_AADJ1CH3_ADCCKADJ 0x0002 | 2191 | #define MII_TG3_DSP_AADJ1CH3_ADCCKADJ 0x0002 |
2192 | #define MII_TG3_DSP_EXP1_INT_STAT 0x0f01 | 2192 | #define MII_TG3_DSP_EXP1_INT_STAT 0x0f01 |