On Sat, 2013-04-13 at 12:27 +0200, Francois Romieu wrote: > From: Hayes Wang <hayeswang@xxxxxxxxxxx> > > 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@xxxxxxxxxxx> > Acked-by: Francois Romieu <romieu@xxxxxxxxxxxxx> > Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx> Added to my queue, thanks. Ben. > --- > drivers/net/ethernet/realtek/r8169.c | 28 +++++++++++++++++++++++++--- > 1 file changed, 25 insertions(+), 3 deletions(-) > > diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c > index a6153f1..d812790 100644 > --- a/drivers/net/ethernet/realtek/r8169.c > +++ b/drivers/net/ethernet/realtek/r8169.c > @@ -3516,6 +3516,30 @@ static void __devinit rtl_init_mdio_ops(struct rtl8169_private *tp) > } > } > > +static void rtl_speed_down(struct rtl8169_private *tp) > +{ > + u32 adv; > + int lpa; > + > + rtl_writephy(tp, 0x1f, 0x0000); > + lpa = rtl_readphy(tp, MII_LPA); > + > + if (lpa & (LPA_10HALF | LPA_10FULL)) > + adv = ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full; > + else if (lpa & (LPA_100HALF | LPA_100FULL)) > + adv = ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full | > + ADVERTISED_100baseT_Half | ADVERTISED_100baseT_Full; > + else > + adv = ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full | > + ADVERTISED_100baseT_Half | ADVERTISED_100baseT_Full | > + (tp->mii.supports_gmii ? > + ADVERTISED_1000baseT_Half | > + ADVERTISED_1000baseT_Full : 0); > + > + rtl8169_set_speed(tp->dev, AUTONEG_ENABLE, SPEED_1000, DUPLEX_FULL, > + adv); > +} > + > static void rtl_wol_suspend_quirk(struct rtl8169_private *tp) > { > void __iomem *ioaddr = tp->mmio_addr; > @@ -3541,9 +3565,7 @@ static bool rtl_wol_pll_power_down(struct rtl8169_private *tp) > if (!(__rtl8169_get_wol(tp) & WAKE_ANY)) > return false; > > - rtl_writephy(tp, 0x1f, 0x0000); > - rtl_writephy(tp, MII_BMCR, 0x0000); > - > + rtl_speed_down(tp); > rtl_wol_suspend_quirk(tp); > > return true; -- Ben Hutchings Klipstein's 4th Law of Prototyping and Production: A fail-safe circuit will destroy others.
Attachment:
signature.asc
Description: This is a digitally signed message part