* [PATCH] r8169: fix auto speed down issue
@ 2013-03-29 7:11 Hayes Wang
2013-03-30 12:43 ` Francois Romieu
2013-04-01 3:02 ` [PATCH v2] " Hayes Wang
0 siblings, 2 replies; 5+ messages in thread
From: Hayes Wang @ 2013-03-29 7:11 UTC (permalink / raw)
To: romieu; +Cc: netdev, linux-kernel, bowgotsai, Hayes Wang
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 if to change the speed
to 10M when suspending or shutdowning. Regardless of keeping the
speed to giga for power saving.
Signed-off-by: Hayes Wang <hayeswang@realtek.com>
---
drivers/net/ethernet/realtek/r8169.c | 19 ++++++++++++++++---
1 file changed, 16 insertions(+), 3 deletions(-)
diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
index 28fb50a..a9eedf7 100644
--- a/drivers/net/ethernet/realtek/r8169.c
+++ b/drivers/net/ethernet/realtek/r8169.c
@@ -3818,6 +3818,21 @@ static void 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);
+
+ adv = ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full;
+ if (!(lpa & (ADVERTISE_10HALF | ADVERTISE_10FULL)))
+ adv |= ADVERTISED_100baseT_Half | ADVERTISED_100baseT_Full;
+
+ rtl8169_set_speed(tp->dev, AUTONEG_ENABLE, SPEED_100, DUPLEX_FULL, adv);
+}
+
static void rtl_wol_suspend_quirk(struct rtl8169_private *tp)
{
void __iomem *ioaddr = tp->mmio_addr;
@@ -3848,9 +3863,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;
--
1.8.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH] r8169: fix auto speed down issue
2013-03-29 7:11 [PATCH] r8169: fix auto speed down issue Hayes Wang
@ 2013-03-30 12:43 ` Francois Romieu
2013-04-01 3:02 ` [PATCH v2] " Hayes Wang
1 sibling, 0 replies; 5+ messages in thread
From: Francois Romieu @ 2013-03-30 12:43 UTC (permalink / raw)
To: Hayes Wang; +Cc: netdev, linux-kernel, bowgotsai
Hayes Wang <hayeswang@realtek.com> :
[...]
> diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
> index 28fb50a..a9eedf7 100644
> --- a/drivers/net/ethernet/realtek/r8169.c
> +++ b/drivers/net/ethernet/realtek/r8169.c
> @@ -3818,6 +3818,21 @@ static void 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);
> +
> + adv = ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full;
> + if (!(lpa & (ADVERTISE_10HALF | ADVERTISE_10FULL)))
You may use the LPA_* #defines here.
--
Ueimor
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v2] r8169: fix auto speed down issue
2013-03-29 7:11 [PATCH] r8169: fix auto speed down issue Hayes Wang
2013-03-30 12:43 ` Francois Romieu
@ 2013-04-01 3:02 ` Hayes Wang
2013-04-02 21:37 ` Francois Romieu
1 sibling, 1 reply; 5+ messages in thread
From: Hayes Wang @ 2013-04-01 3:02 UTC (permalink / raw)
To: romieu; +Cc: netdev, linux-kernel, bowgotsai, Hayes Wang
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>
---
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 28fb50a..bdc03a9 100644
--- a/drivers/net/ethernet/realtek/r8169.c
+++ b/drivers/net/ethernet/realtek/r8169.c
@@ -3818,6 +3818,30 @@ static void 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;
@@ -3848,9 +3872,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;
--
1.8.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v2] r8169: fix auto speed down issue
2013-04-01 3:02 ` [PATCH v2] " Hayes Wang
@ 2013-04-02 21:37 ` Francois Romieu
2013-04-04 21:46 ` David Miller
0 siblings, 1 reply; 5+ messages in thread
From: Francois Romieu @ 2013-04-02 21:37 UTC (permalink / raw)
To: Hayes Wang; +Cc: netdev, linux-kernel, bowgotsai
Hayes Wang <hayeswang@realtek.com> :
> 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>
I have given it a short sanity testing with suspend or shutdown (no rpm)
on 8168evl or 8168e and it did not seem to regress (8168e and 8168evl).
The driver does not do what it is requested to when the r81xx - not the
link partner - forces the link. Not that it ever did but autonegotiation
will now always end up enabled and nothing will prevent a higher than
expected link speed after that.
It could be worth to check MII_BMCR for BMCR_ANENABLE before anything else
in rtl_speed_down.
[...]
> diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
> index 28fb50a..bdc03a9 100644
> --- a/drivers/net/ethernet/realtek/r8169.c
> +++ b/drivers/net/ethernet/realtek/r8169.c
> @@ -3818,6 +3818,30 @@ static void rtl_init_mdio_ops(struct rtl8169_private *tp)
> }
> }
>
> +static void rtl_speed_down(struct rtl8169_private *tp)
> +{
> + u32 adv;
> + int lpa;
^^^^^
Please use a single, true space (no tabs) next time.
--
Ueimor
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2] r8169: fix auto speed down issue
2013-04-02 21:37 ` Francois Romieu
@ 2013-04-04 21:46 ` David Miller
0 siblings, 0 replies; 5+ messages in thread
From: David Miller @ 2013-04-04 21:46 UTC (permalink / raw)
To: romieu; +Cc: hayeswang, netdev, linux-kernel, bowgotsai
From: Francois Romieu <romieu@fr.zoreil.com>
Date: Tue, 2 Apr 2013 23:37:36 +0200
> Hayes Wang <hayeswang@realtek.com> :
>> 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>
Applied.
>> +static void rtl_speed_down(struct rtl8169_private *tp)
>> +{
>> + u32 adv;
>> + int lpa;
> ^^^^^
> Please use a single, true space (no tabs) next time.
I fixed this up when I applied this patch, thanks.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2013-04-04 21:46 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-03-29 7:11 [PATCH] r8169: fix auto speed down issue Hayes Wang
2013-03-30 12:43 ` Francois Romieu
2013-04-01 3:02 ` [PATCH v2] " Hayes Wang
2013-04-02 21:37 ` Francois Romieu
2013-04-04 21:46 ` David Miller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).