Skip to content

Commit e2409d8

Browse files
hayesorzdavem330
authored andcommitted
r8169: fix auto speed down issue
It would cause no link after suspending or shutdowning when the nic changes the speed to 10M and connects to a link partner which forces the speed to 100M. Check the link partner ability to determine which speed to set. Signed-off-by: Hayes Wang <hayeswang@realtek.com> Acked-by: Francois Romieu <romieu@fr.zoreil.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 4f4ecd5 commit e2409d8

File tree

1 file changed

+25
-3
lines changed
  • drivers/net/ethernet/realtek

1 file changed

+25
-3
lines changed

drivers/net/ethernet/realtek/r8169.c

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3818,6 +3818,30 @@ static void rtl_init_mdio_ops(struct rtl8169_private *tp)
38183818
}
38193819
}
38203820

3821+
static void rtl_speed_down(struct rtl8169_private *tp)
3822+
{
3823+
u32 adv;
3824+
int lpa;
3825+
3826+
rtl_writephy(tp, 0x1f, 0x0000);
3827+
lpa = rtl_readphy(tp, MII_LPA);
3828+
3829+
if (lpa & (LPA_10HALF | LPA_10FULL))
3830+
adv = ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full;
3831+
else if (lpa & (LPA_100HALF | LPA_100FULL))
3832+
adv = ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full |
3833+
ADVERTISED_100baseT_Half | ADVERTISED_100baseT_Full;
3834+
else
3835+
adv = ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full |
3836+
ADVERTISED_100baseT_Half | ADVERTISED_100baseT_Full |
3837+
(tp->mii.supports_gmii ?
3838+
ADVERTISED_1000baseT_Half |
3839+
ADVERTISED_1000baseT_Full : 0);
3840+
3841+
rtl8169_set_speed(tp->dev, AUTONEG_ENABLE, SPEED_1000, DUPLEX_FULL,
3842+
adv);
3843+
}
3844+
38213845
static void rtl_wol_suspend_quirk(struct rtl8169_private *tp)
38223846
{
38233847
void __iomem *ioaddr = tp->mmio_addr;
@@ -3848,9 +3872,7 @@ static bool rtl_wol_pll_power_down(struct rtl8169_private *tp)
38483872
if (!(__rtl8169_get_wol(tp) & WAKE_ANY))
38493873
return false;
38503874

3851-
rtl_writephy(tp, 0x1f, 0x0000);
3852-
rtl_writephy(tp, MII_BMCR, 0x0000);
3853-
3875+
rtl_speed_down(tp);
38543876
rtl_wol_suspend_quirk(tp);
38553877

38563878
return true;

0 commit comments

Comments
 (0)