提交 21a00ab2 编写于 作者: M Matt Carlson 提交者: David S. Miller

tg3: Fix EEE interoperability issue

This patch fixes a problem where EEE will fail to work in certain
environments.
Signed-off-by: NMatt Carlson <mcarlson@broadcom.com>
Reviewed-by: NMichael Chan <mchan@broadcom.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 ab789046
...@@ -1776,9 +1776,29 @@ static void tg3_phy_eee_adjust(struct tg3 *tp, u32 current_link_up) ...@@ -1776,9 +1776,29 @@ static void tg3_phy_eee_adjust(struct tg3 *tp, u32 current_link_up)
tg3_phy_cl45_read(tp, MDIO_MMD_AN, tg3_phy_cl45_read(tp, MDIO_MMD_AN,
TG3_CL45_D7_EEERES_STAT, &val); TG3_CL45_D7_EEERES_STAT, &val);
if (val == TG3_CL45_D7_EEERES_STAT_LP_1000T || switch (val) {
val == TG3_CL45_D7_EEERES_STAT_LP_100TX) case TG3_CL45_D7_EEERES_STAT_LP_1000T:
switch (GET_ASIC_REV(tp->pci_chip_rev_id)) {
case ASIC_REV_5717:
case ASIC_REV_5719:
case ASIC_REV_57765:
/* Enable SM_DSP clock and tx 6dB coding. */
val = MII_TG3_AUXCTL_SHDWSEL_AUXCTL |
MII_TG3_AUXCTL_ACTL_SMDSP_ENA |
MII_TG3_AUXCTL_ACTL_TX_6DB;
tg3_writephy(tp, MII_TG3_AUX_CTRL, val);
tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, 0x0000);
/* Turn off SM_DSP clock. */
val = MII_TG3_AUXCTL_SHDWSEL_AUXCTL |
MII_TG3_AUXCTL_ACTL_TX_6DB;
tg3_writephy(tp, MII_TG3_AUX_CTRL, val);
}
/* Fallthrough */
case TG3_CL45_D7_EEERES_STAT_LP_100TX:
tp->setlpicnt = 2; tp->setlpicnt = 2;
}
} }
if (!tp->setlpicnt) { if (!tp->setlpicnt) {
...@@ -2968,11 +2988,19 @@ static void tg3_phy_copper_begin(struct tg3 *tp) ...@@ -2968,11 +2988,19 @@ static void tg3_phy_copper_begin(struct tg3 *tp)
MII_TG3_AUXCTL_ACTL_TX_6DB; MII_TG3_AUXCTL_ACTL_TX_6DB;
tg3_writephy(tp, MII_TG3_AUX_CTRL, val); tg3_writephy(tp, MII_TG3_AUX_CTRL, val);
if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 || switch (GET_ASIC_REV(tp->pci_chip_rev_id)) {
GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765) && case ASIC_REV_5717:
!tg3_phydsp_read(tp, MII_TG3_DSP_CH34TP2, &val)) case ASIC_REV_57765:
tg3_phydsp_write(tp, MII_TG3_DSP_CH34TP2, if (!tg3_phydsp_read(tp, MII_TG3_DSP_CH34TP2, &val))
val | MII_TG3_DSP_CH34TP2_HIBW01); tg3_phydsp_write(tp, MII_TG3_DSP_CH34TP2, val |
MII_TG3_DSP_CH34TP2_HIBW01);
/* Fall through */
case ASIC_REV_5719:
val = MII_TG3_DSP_TAP26_ALNOKO |
MII_TG3_DSP_TAP26_RMRXSTO |
MII_TG3_DSP_TAP26_OPCSINPT;
tg3_phydsp_write(tp, MII_TG3_DSP_TAP26, val);
}
val = 0; val = 0;
if (tp->link_config.autoneg == AUTONEG_ENABLE) { if (tp->link_config.autoneg == AUTONEG_ENABLE) {
......
...@@ -2113,6 +2113,10 @@ ...@@ -2113,6 +2113,10 @@
#define MII_TG3_DSP_TAP1 0x0001 #define MII_TG3_DSP_TAP1 0x0001
#define MII_TG3_DSP_TAP1_AGCTGT_DFLT 0x0007 #define MII_TG3_DSP_TAP1_AGCTGT_DFLT 0x0007
#define MII_TG3_DSP_TAP26 0x001a
#define MII_TG3_DSP_TAP26_ALNOKO 0x0001
#define MII_TG3_DSP_TAP26_RMRXSTO 0x0002
#define MII_TG3_DSP_TAP26_OPCSINPT 0x0004
#define MII_TG3_DSP_AADJ1CH0 0x001f #define MII_TG3_DSP_AADJ1CH0 0x001f
#define MII_TG3_DSP_CH34TP2 0x4022 #define MII_TG3_DSP_CH34TP2 0x4022
#define MII_TG3_DSP_CH34TP2_HIBW01 0x0010 #define MII_TG3_DSP_CH34TP2_HIBW01 0x0010
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册