All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net 1/2] jme: Do not enable NIC WoL functions on S0
@ 2016-03-05  0:11 cooldavid
  2016-03-05  0:11 ` [PATCH net 2/2] jme: Fix device PM wakeup API usage cooldavid
  2016-03-07 20:39 ` [PATCH net 1/2] jme: Do not enable NIC WoL functions on S0 David Miller
  0 siblings, 2 replies; 4+ messages in thread
From: cooldavid @ 2016-03-05  0:11 UTC (permalink / raw)
  To: David Miller; +Cc: Guo-Fu Tseng, linux-netdev, Diego Viola

From: Guo-Fu Tseng <cooldavid@cooldavid.org>

Otherwise it might be back on resume right after going to suspend in
some hardware.

Reported-by: Diego Viola <diego.viola@gmail.com>
Signed-off-by: Guo-Fu Tseng <cooldavid@cooldavid.org>
---
 drivers/net/ethernet/jme.c | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/drivers/net/ethernet/jme.c b/drivers/net/ethernet/jme.c
index 8adbe8f..74b9c9d 100644
--- a/drivers/net/ethernet/jme.c
+++ b/drivers/net/ethernet/jme.c
@@ -270,11 +270,17 @@ jme_reset_mac_processor(struct jme_adapter *jme)
 }
 
 static inline void
-jme_clear_pm(struct jme_adapter *jme)
+jme_clear_pm_enable_wol(struct jme_adapter *jme)
 {
 	jwrite32(jme, JME_PMCS, PMCS_STMASK | jme->reg_pmcs);
 }
 
+static inline void
+jme_clear_pm_disable_wol(struct jme_adapter *jme)
+{
+	jwrite32(jme, JME_PMCS, PMCS_STMASK);
+}
+
 static int
 jme_reload_eeprom(struct jme_adapter *jme)
 {
@@ -1853,7 +1859,7 @@ jme_open(struct net_device *netdev)
 	struct jme_adapter *jme = netdev_priv(netdev);
 	int rc;
 
-	jme_clear_pm(jme);
+	jme_clear_pm_disable_wol(jme);
 	JME_NAPI_ENABLE(jme);
 
 	tasklet_init(&jme->linkch_task, jme_link_change_tasklet,
@@ -1929,7 +1935,7 @@ jme_powersave_phy(struct jme_adapter *jme)
 		jme_set_100m_half(jme);
 		if (jme->reg_pmcs & (PMCS_LFEN | PMCS_LREN))
 			jme_wait_link(jme);
-		jme_clear_pm(jme);
+		jme_clear_pm_enable_wol(jme);
 	} else {
 		jme_phy_off(jme);
 	}
@@ -2646,7 +2652,6 @@ jme_set_wol(struct net_device *netdev,
 	if (wol->wolopts & WAKE_MAGIC)
 		jme->reg_pmcs |= PMCS_MFEN;
 
-	jwrite32(jme, JME_PMCS, jme->reg_pmcs);
 	device_set_wakeup_enable(&jme->pdev->dev, !!(jme->reg_pmcs));
 
 	return 0;
@@ -3172,7 +3177,7 @@ jme_init_one(struct pci_dev *pdev,
 	jme->mii_if.mdio_read = jme_mdio_read;
 	jme->mii_if.mdio_write = jme_mdio_write;
 
-	jme_clear_pm(jme);
+	jme_clear_pm_disable_wol(jme);
 	device_set_wakeup_enable(&pdev->dev, true);
 
 	jme_set_phyfifo_5level(jme);
@@ -3304,7 +3309,7 @@ jme_resume(struct device *dev)
 	if (!netif_running(netdev))
 		return 0;
 
-	jme_clear_pm(jme);
+	jme_clear_pm_disable_wol(jme);
 	jme_phy_on(jme);
 	if (test_bit(JME_FLAG_SSET, &jme->flags))
 		jme_set_settings(netdev, &jme->old_ecmd);
-- 
1.8.5.5

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH net 2/2] jme: Fix device PM wakeup API usage
  2016-03-05  0:11 [PATCH net 1/2] jme: Do not enable NIC WoL functions on S0 cooldavid
@ 2016-03-05  0:11 ` cooldavid
  2016-03-07 20:40   ` David Miller
  2016-03-07 20:39 ` [PATCH net 1/2] jme: Do not enable NIC WoL functions on S0 David Miller
  1 sibling, 1 reply; 4+ messages in thread
From: cooldavid @ 2016-03-05  0:11 UTC (permalink / raw)
  To: David Miller; +Cc: Guo-Fu Tseng, linux-netdev, Diego Viola

From: Guo-Fu Tseng <cooldavid@cooldavid.org>

According to Documentation/power/devices.txt

The driver should not use device_set_wakeup_enable() which is the policy
for user to decide.

Using device_init_wakeup() to initialize dev->power.should_wakeup and
dev->power.can_wakeup on driver initialization.

And use device_may_wakeup() on suspend to decide if WoL function should
be enabled on NIC.

Reported-by: Diego Viola <diego.viola@gmail.com>
Signed-off-by: Guo-Fu Tseng <cooldavid@cooldavid.org>
---
 drivers/net/ethernet/jme.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/jme.c b/drivers/net/ethernet/jme.c
index 74b9c9d..3ddf657 100644
--- a/drivers/net/ethernet/jme.c
+++ b/drivers/net/ethernet/jme.c
@@ -1931,7 +1931,7 @@ jme_wait_link(struct jme_adapter *jme)
 static void
 jme_powersave_phy(struct jme_adapter *jme)
 {
-	if (jme->reg_pmcs) {
+	if (jme->reg_pmcs && device_may_wakeup(&jme->pdev->dev)) {
 		jme_set_100m_half(jme);
 		if (jme->reg_pmcs & (PMCS_LFEN | PMCS_LREN))
 			jme_wait_link(jme);
@@ -2652,8 +2652,6 @@ jme_set_wol(struct net_device *netdev,
 	if (wol->wolopts & WAKE_MAGIC)
 		jme->reg_pmcs |= PMCS_MFEN;
 
-	device_set_wakeup_enable(&jme->pdev->dev, !!(jme->reg_pmcs));
-
 	return 0;
 }
 
@@ -3178,7 +3176,7 @@ jme_init_one(struct pci_dev *pdev,
 	jme->mii_if.mdio_write = jme_mdio_write;
 
 	jme_clear_pm_disable_wol(jme);
-	device_set_wakeup_enable(&pdev->dev, true);
+	device_init_wakeup(&pdev->dev, true);
 
 	jme_set_phyfifo_5level(jme);
 	jme->pcirev = pdev->revision;
-- 
1.8.5.5

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH net 1/2] jme: Do not enable NIC WoL functions on S0
  2016-03-05  0:11 [PATCH net 1/2] jme: Do not enable NIC WoL functions on S0 cooldavid
  2016-03-05  0:11 ` [PATCH net 2/2] jme: Fix device PM wakeup API usage cooldavid
@ 2016-03-07 20:39 ` David Miller
  1 sibling, 0 replies; 4+ messages in thread
From: David Miller @ 2016-03-07 20:39 UTC (permalink / raw)
  To: cooldavid; +Cc: netdev, diego.viola

From: cooldavid@cooldavid.org
Date: Sat,  5 Mar 2016 08:11:55 +0800

> From: Guo-Fu Tseng <cooldavid@cooldavid.org>
> 
> Otherwise it might be back on resume right after going to suspend in
> some hardware.
> 
> Reported-by: Diego Viola <diego.viola@gmail.com>
> Signed-off-by: Guo-Fu Tseng <cooldavid@cooldavid.org>

Applied.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH net 2/2] jme: Fix device PM wakeup API usage
  2016-03-05  0:11 ` [PATCH net 2/2] jme: Fix device PM wakeup API usage cooldavid
@ 2016-03-07 20:40   ` David Miller
  0 siblings, 0 replies; 4+ messages in thread
From: David Miller @ 2016-03-07 20:40 UTC (permalink / raw)
  To: cooldavid; +Cc: netdev, diego.viola

From: cooldavid@cooldavid.org
Date: Sat,  5 Mar 2016 08:11:56 +0800

> From: Guo-Fu Tseng <cooldavid@cooldavid.org>
> 
> According to Documentation/power/devices.txt
> 
> The driver should not use device_set_wakeup_enable() which is the policy
> for user to decide.
> 
> Using device_init_wakeup() to initialize dev->power.should_wakeup and
> dev->power.can_wakeup on driver initialization.
> 
> And use device_may_wakeup() on suspend to decide if WoL function should
> be enabled on NIC.
> 
> Reported-by: Diego Viola <diego.viola@gmail.com>
> Signed-off-by: Guo-Fu Tseng <cooldavid@cooldavid.org>

Applied.

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2016-03-07 20:40 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-03-05  0:11 [PATCH net 1/2] jme: Do not enable NIC WoL functions on S0 cooldavid
2016-03-05  0:11 ` [PATCH net 2/2] jme: Fix device PM wakeup API usage cooldavid
2016-03-07 20:40   ` David Miller
2016-03-07 20:39 ` [PATCH net 1/2] jme: Do not enable NIC WoL functions on S0 David Miller

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.