On Sat, 2013-04-13 at 12:27 +0200, Francois Romieu wrote: > From: Hayes Wang <[email protected]> > > 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 <[email protected]> > Acked-by: Francois Romieu <[email protected]> > Signed-off-by: David S. Miller <[email protected]>
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.
signature.asc
Description: This is a digitally signed message part
