Skip to content

Commit 21a00ab

Browse files
Matt Carlsondavem330
authored andcommitted
tg3: Fix EEE interoperability issue
This patch fixes a problem where EEE will fail to work in certain environments. Signed-off-by: Matt Carlson <mcarlson@broadcom.com> Reviewed-by: Michael Chan <mchan@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent ab78904 commit 21a00ab

File tree

2 files changed

+39
-7
lines changed

2 files changed

+39
-7
lines changed

drivers/net/tg3.c

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1776,9 +1776,29 @@ static void tg3_phy_eee_adjust(struct tg3 *tp, u32 current_link_up)
17761776
tg3_phy_cl45_read(tp, MDIO_MMD_AN,
17771777
TG3_CL45_D7_EEERES_STAT, &val);
17781778

1779-
if (val == TG3_CL45_D7_EEERES_STAT_LP_1000T ||
1780-
val == TG3_CL45_D7_EEERES_STAT_LP_100TX)
1779+
switch (val) {
1780+
case TG3_CL45_D7_EEERES_STAT_LP_1000T:
1781+
switch (GET_ASIC_REV(tp->pci_chip_rev_id)) {
1782+
case ASIC_REV_5717:
1783+
case ASIC_REV_5719:
1784+
case ASIC_REV_57765:
1785+
/* Enable SM_DSP clock and tx 6dB coding. */
1786+
val = MII_TG3_AUXCTL_SHDWSEL_AUXCTL |
1787+
MII_TG3_AUXCTL_ACTL_SMDSP_ENA |
1788+
MII_TG3_AUXCTL_ACTL_TX_6DB;
1789+
tg3_writephy(tp, MII_TG3_AUX_CTRL, val);
1790+
1791+
tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, 0x0000);
1792+
1793+
/* Turn off SM_DSP clock. */
1794+
val = MII_TG3_AUXCTL_SHDWSEL_AUXCTL |
1795+
MII_TG3_AUXCTL_ACTL_TX_6DB;
1796+
tg3_writephy(tp, MII_TG3_AUX_CTRL, val);
1797+
}
1798+
/* Fallthrough */
1799+
case TG3_CL45_D7_EEERES_STAT_LP_100TX:
17811800
tp->setlpicnt = 2;
1801+
}
17821802
}
17831803

17841804
if (!tp->setlpicnt) {
@@ -2968,11 +2988,19 @@ static void tg3_phy_copper_begin(struct tg3 *tp)
29682988
MII_TG3_AUXCTL_ACTL_TX_6DB;
29692989
tg3_writephy(tp, MII_TG3_AUX_CTRL, val);
29702990

2971-
if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 ||
2972-
GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765) &&
2973-
!tg3_phydsp_read(tp, MII_TG3_DSP_CH34TP2, &val))
2974-
tg3_phydsp_write(tp, MII_TG3_DSP_CH34TP2,
2975-
val | MII_TG3_DSP_CH34TP2_HIBW01);
2991+
switch (GET_ASIC_REV(tp->pci_chip_rev_id)) {
2992+
case ASIC_REV_5717:
2993+
case ASIC_REV_57765:
2994+
if (!tg3_phydsp_read(tp, MII_TG3_DSP_CH34TP2, &val))
2995+
tg3_phydsp_write(tp, MII_TG3_DSP_CH34TP2, val |
2996+
MII_TG3_DSP_CH34TP2_HIBW01);
2997+
/* Fall through */
2998+
case ASIC_REV_5719:
2999+
val = MII_TG3_DSP_TAP26_ALNOKO |
3000+
MII_TG3_DSP_TAP26_RMRXSTO |
3001+
MII_TG3_DSP_TAP26_OPCSINPT;
3002+
tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val);
3003+
}
29763004

29773005
val = 0;
29783006
if (tp->link_config.autoneg == AUTONEG_ENABLE) {

drivers/net/tg3.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2113,6 +2113,10 @@
21132113

21142114
#define MII_TG3_DSP_TAP1 0x0001
21152115
#define MII_TG3_DSP_TAP1_AGCTGT_DFLT 0x0007
2116+
#define MII_TG3_DSP_TAP26 0x001a
2117+
#define MII_TG3_DSP_TAP26_ALNOKO 0x0001
2118+
#define MII_TG3_DSP_TAP26_RMRXSTO 0x0002
2119+
#define MII_TG3_DSP_TAP26_OPCSINPT 0x0004
21162120
#define MII_TG3_DSP_AADJ1CH0 0x001f
21172121
#define MII_TG3_DSP_CH34TP2 0x4022
21182122
#define MII_TG3_DSP_CH34TP2_HIBW01 0x0010

0 commit comments

Comments
 (0)