[PATCH 1/2] r8169: Enable WOL from Magic Packet by default

Subsystems: 8169 10/100/1000 gigabit ethernet driver, networking drivers, the rest

STALE5297d

7 messages, 3 authors, 2012-02-16 · open the first message on its own page

[PATCH 1/2] r8169: Enable WOL from Magic Packet by default

From: Sameer Nanda <hidden>
Date: 2012-02-14 18:27:59

Set the WOL config registers to only enable WOL from magic packet by
default. Without this change in place, the WOL config register
settings on warm reboot come up in an inconsistent state since these
registers don't get reset on a warm reboot.

Signed-off-by: Sameer Nanda <redacted>
---
 drivers/net/ethernet/realtek/r8169.c |   11 ++++++-----
 1 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
index 7a0c800..a6921b7 100644
--- a/drivers/net/ethernet/realtek/r8169.c
+++ b/drivers/net/ethernet/realtek/r8169.c
@@ -4073,12 +4073,13 @@ rtl8169_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
 	tp->txd_version = rtl_chip_infos[chipset].txd_version;
 
 	RTL_W8(Cfg9346, Cfg9346_Unlock);
+
+	/* Enable WOL from Magic Packet by default */
 	RTL_W8(Config1, RTL_R8(Config1) | PMEnable);
-	RTL_W8(Config5, RTL_R8(Config5) & PMEStatus);
-	if ((RTL_R8(Config3) & (LinkUp | MagicPacket)) != 0)
-		tp->features |= RTL_FEATURE_WOL;
-	if ((RTL_R8(Config5) & (UWF | BWF | MWF)) != 0)
-		tp->features |= RTL_FEATURE_WOL;
+	RTL_W8(Config3, MagicPacket);
+	RTL_W8(Config5, PMEStatus);
+	tp->features |= RTL_FEATURE_WOL;
+
 	tp->features |= rtl_try_msi(tp, cfg);
 	RTL_W8(Cfg9346, Cfg9346_Lock);
 
-- 
1.7.7.3

Re: [PATCH 1/2] r8169: Enable WOL from Magic Packet by default

From: Sameer Nanda <hidden>
Date: 2012-02-14 18:33:21

Fixed Francois Romieu email address.

On Tue, Feb 14, 2012 at 10:27 AM, Sameer Nanda [off-list ref] wrote:
quoted hunk
Set the WOL config registers to only enable WOL from magic packet by
default. Without this change in place, the WOL config register
settings on warm reboot come up in an inconsistent state since these
registers don't get reset on a warm reboot.

Signed-off-by: Sameer Nanda <redacted>
---
 drivers/net/ethernet/realtek/r8169.c |   11 ++++++-----
 1 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
index 7a0c800..a6921b7 100644
--- a/drivers/net/ethernet/realtek/r8169.c
+++ b/drivers/net/ethernet/realtek/r8169.c
@@ -4073,12 +4073,13 @@ rtl8169_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
       tp->txd_version = rtl_chip_infos[chipset].txd_version;

       RTL_W8(Cfg9346, Cfg9346_Unlock);
+
+       /* Enable WOL from Magic Packet by default */
       RTL_W8(Config1, RTL_R8(Config1) | PMEnable);
-       RTL_W8(Config5, RTL_R8(Config5) & PMEStatus);
-       if ((RTL_R8(Config3) & (LinkUp | MagicPacket)) != 0)
-               tp->features |= RTL_FEATURE_WOL;
-       if ((RTL_R8(Config5) & (UWF | BWF | MWF)) != 0)
-               tp->features |= RTL_FEATURE_WOL;
+       RTL_W8(Config3, MagicPacket);
+       RTL_W8(Config5, PMEStatus);
+       tp->features |= RTL_FEATURE_WOL;
+
       tp->features |= rtl_try_msi(tp, cfg);
       RTL_W8(Cfg9346, Cfg9346_Lock);

--
1.7.7.3


--
Sameer

Re: [PATCH 1/2] r8169: Enable WOL from Magic Packet by default

From: Sameer Nanda <hidden>
Date: 2012-02-14 18:38:24

Fixed Rafael's email address.  Sorry about the dupe emails.

On Tue, Feb 14, 2012 at 10:33 AM, Sameer Nanda [off-list ref] wrote:
Fixed Francois Romieu email address.

On Tue, Feb 14, 2012 at 10:27 AM, Sameer Nanda [off-list ref] wrote:
quoted
Set the WOL config registers to only enable WOL from magic packet by
default. Without this change in place, the WOL config register
settings on warm reboot come up in an inconsistent state since these
registers don't get reset on a warm reboot.

Signed-off-by: Sameer Nanda <redacted>
---
 drivers/net/ethernet/realtek/r8169.c |   11 ++++++-----
 1 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
index 7a0c800..a6921b7 100644
--- a/drivers/net/ethernet/realtek/r8169.c
+++ b/drivers/net/ethernet/realtek/r8169.c
@@ -4073,12 +4073,13 @@ rtl8169_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
       tp->txd_version = rtl_chip_infos[chipset].txd_version;

       RTL_W8(Cfg9346, Cfg9346_Unlock);
+
+       /* Enable WOL from Magic Packet by default */
       RTL_W8(Config1, RTL_R8(Config1) | PMEnable);
-       RTL_W8(Config5, RTL_R8(Config5) & PMEStatus);
-       if ((RTL_R8(Config3) & (LinkUp | MagicPacket)) != 0)
-               tp->features |= RTL_FEATURE_WOL;
-       if ((RTL_R8(Config5) & (UWF | BWF | MWF)) != 0)
-               tp->features |= RTL_FEATURE_WOL;
+       RTL_W8(Config3, MagicPacket);
+       RTL_W8(Config5, PMEStatus);
+       tp->features |= RTL_FEATURE_WOL;
+
       tp->features |= rtl_try_msi(tp, cfg);
       RTL_W8(Cfg9346, Cfg9346_Lock);

--
1.7.7.3


--
Sameer


-- 
Sameer
_______________________________________________
linux-pm mailing list
linux-pm@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/linux-pm

Re: [PATCH 1/2] r8169: Enable WOL from Magic Packet by default

From: Francois Romieu <romieu@fr.zoreil.com>
Date: 2012-02-15 00:13:42

Sameer Nanda [off-list ref] :
Set the WOL config registers to only enable WOL from magic packet by
default. Without this change in place, the WOL config register
settings on warm reboot come up in an inconsistent state since these
registers don't get reset on a warm reboot.
I am not completely convinced, especially as the change of behavior
could be noticed.

Can you elaborate why the previous WoL settings should be ignored ?

-- 
Ueimor

Re: [PATCH 1/2] r8169: Enable WOL from Magic Packet by default

From: Sameer Nanda <hidden>
Date: 2012-02-15 01:00:04

On Tue, Feb 14, 2012 at 4:13 PM, Francois Romieu [off-list ref] wrote:
Sameer Nanda [off-list ref] :
quoted
Set the WOL config registers to only enable WOL from magic packet by
default. Without this change in place, the WOL config register
settings on warm reboot come up in an inconsistent state since these
registers don't get reset on a warm reboot.
I am not completely convinced, especially as the change of behavior
could be noticed.
Agreed that this change could be noticed.  Maybe a module parameter
might be a better way to handle this?
Can you elaborate why the previous WoL settings should be ignored ?
With runtime PM, the "previous" settings may not be what the user had
set up since runtime PM mucks around with WOL settings.  Therefore,
the user could see inconsistent WOL settings upon booting up.

My second patch in this series mitigates this to a large extent by
restoring the saved WOL options in rtl_shutdown.  One case it doesn't
handle is non-graceful shutdown since rtl_shutdown may not be invoked.

The issue we ran into is this: disconnect network cable, reboot
system.  This will cause WOL on PHY to be enabled on next boot.  If
you connect the cable and then transition the system to S3 state or
halt the system, the system wakes right back up since the PHY state
changes.  Not good.
--
Ueimor


-- 
Sameer

Re: [PATCH 1/2] r8169: Enable WOL from Magic Packet by default

From: David Miller <davem@davemloft.net>
Date: 2012-02-15 03:37:46

From: Sameer Nanda <redacted>
Date: Tue, 14 Feb 2012 17:00:04 -0800
On Tue, Feb 14, 2012 at 4:13 PM, Francois Romieu [off-list ref] wrote:
quoted
Sameer Nanda [off-list ref] :
quoted
Set the WOL config registers to only enable WOL from magic packet by
default. Without this change in place, the WOL config register
settings on warm reboot come up in an inconsistent state since these
registers don't get reset on a warm reboot.
I am not completely convinced, especially as the change of behavior
could be noticed.
Agreed that this change could be noticed.  Maybe a module parameter
might be a better way to handle this?
Please no random module parameters, something ethtool based is
what you should shoot for.

Re: [PATCH 1/2] r8169: Enable WOL from Magic Packet by default

From: Sameer Nanda <hidden>
Date: 2012-02-16 20:47:00

On Tue, Feb 14, 2012 at 7:37 PM, David Miller [off-list ref] wrote:
From: Sameer Nanda <redacted>
Date: Tue, 14 Feb 2012 17:00:04 -0800
quoted
On Tue, Feb 14, 2012 at 4:13 PM, Francois Romieu [off-list ref] wrote:
quoted
Sameer Nanda [off-list ref] :
quoted
Set the WOL config registers to only enable WOL from magic packet by
default. Without this change in place, the WOL config register
settings on warm reboot come up in an inconsistent state since these
registers don't get reset on a warm reboot.
I am not completely convinced, especially as the change of behavior
could be noticed.
Agreed that this change could be noticed.  Maybe a module parameter
might be a better way to handle this?
Please no random module parameters, something ethtool based is
what you should shoot for.
With the existing code, WOL from PHY, unicast, multicast and broadcast
packets may get accidentally enabled.  The probability of seeing such
packets/events in the wild is quite high and this can cause unintended
wakes from S3 or reboots.

The probability of seeing matching MagicPackets in the wild is
vanishingly small.  Therefore, setting MagicPacket as the only default
WOL mechanism seems like the safer option.

Since ethtool already supports setting of WOL options from userland, I
guess we don't need a new module parameter as the user can set WOL
options according to his own desires.

-- 
Sameer
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help