diff options
author | Claudiu Manoil <claudiu.manoil@freescale.com> | 2015-07-31 11:38:33 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-07-31 18:41:49 -0400 |
commit | b0734b6dc895258b74c6e7a441cb47b6b0ba3465 (patch) | |
tree | 29c4b47469d63ffbea013c01167a7602ecc78bb7 | |
parent | 614b42426cc3483e8d5bc68a158c2dd47dc831d0 (diff) |
gianfar: Enable device wakeup when appropriate
The wol_en flag is 0 by default anyway, and we have the
following inconsistency: a MAGIC packet wol capable eth
interface is registered as a wake-up source but unable
to wake-up the system as wol_en is 0 (wake-on flag set to 'd').
Calling set_wakeup_enable() at netdev open is just redundant
because wol_en is 0 by default.
Let only ethtool call set_wakeup_enable() for now.
The bflock is obviously obsoleted, its utility has been corroded
over time. The bitfield flags used today in gianfar are accessed
only on the init/ config path, with no real possibility of
concurrency - nothing that would justify smth. like bflock.
Signed-off-by: Claudiu Manoil <claudiu.manoil@freescale.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/ethernet/freescale/gianfar.c | 8 | ||||
-rw-r--r-- | drivers/net/ethernet/freescale/gianfar.h | 3 | ||||
-rw-r--r-- | drivers/net/ethernet/freescale/gianfar_ethtool.c | 5 |
3 files changed, 3 insertions, 13 deletions
diff --git a/drivers/net/ethernet/freescale/gianfar.c b/drivers/net/ethernet/freescale/gianfar.c index 084c25d1467f..2b7610f341b0 100644 --- a/drivers/net/ethernet/freescale/gianfar.c +++ b/drivers/net/ethernet/freescale/gianfar.c | |||
@@ -1360,7 +1360,6 @@ static int gfar_probe(struct platform_device *ofdev) | |||
1360 | priv->dev = &ofdev->dev; | 1360 | priv->dev = &ofdev->dev; |
1361 | SET_NETDEV_DEV(dev, &ofdev->dev); | 1361 | SET_NETDEV_DEV(dev, &ofdev->dev); |
1362 | 1362 | ||
1363 | spin_lock_init(&priv->bflock); | ||
1364 | INIT_WORK(&priv->reset_task, gfar_reset_task); | 1363 | INIT_WORK(&priv->reset_task, gfar_reset_task); |
1365 | 1364 | ||
1366 | platform_set_drvdata(ofdev, priv); | 1365 | platform_set_drvdata(ofdev, priv); |
@@ -1454,9 +1453,8 @@ static int gfar_probe(struct platform_device *ofdev) | |||
1454 | goto register_fail; | 1453 | goto register_fail; |
1455 | } | 1454 | } |
1456 | 1455 | ||
1457 | device_init_wakeup(&dev->dev, | 1456 | device_set_wakeup_capable(&dev->dev, priv->device_flags & |
1458 | priv->device_flags & | 1457 | FSL_GIANFAR_DEV_HAS_MAGIC_PACKET); |
1459 | FSL_GIANFAR_DEV_HAS_MAGIC_PACKET); | ||
1460 | 1458 | ||
1461 | /* fill out IRQ number and name fields */ | 1459 | /* fill out IRQ number and name fields */ |
1462 | for (i = 0; i < priv->num_grps; i++) { | 1460 | for (i = 0; i < priv->num_grps; i++) { |
@@ -2133,8 +2131,6 @@ static int gfar_enet_open(struct net_device *dev) | |||
2133 | if (err) | 2131 | if (err) |
2134 | return err; | 2132 | return err; |
2135 | 2133 | ||
2136 | device_set_wakeup_enable(&dev->dev, priv->wol_en); | ||
2137 | |||
2138 | return err; | 2134 | return err; |
2139 | } | 2135 | } |
2140 | 2136 | ||
diff --git a/drivers/net/ethernet/freescale/gianfar.h b/drivers/net/ethernet/freescale/gianfar.h index daa1d37de642..5545e4103368 100644 --- a/drivers/net/ethernet/freescale/gianfar.h +++ b/drivers/net/ethernet/freescale/gianfar.h | |||
@@ -1145,9 +1145,6 @@ struct gfar_private { | |||
1145 | int oldduplex; | 1145 | int oldduplex; |
1146 | int oldlink; | 1146 | int oldlink; |
1147 | 1147 | ||
1148 | /* Bitfield update lock */ | ||
1149 | spinlock_t bflock; | ||
1150 | |||
1151 | uint32_t msg_enable; | 1148 | uint32_t msg_enable; |
1152 | 1149 | ||
1153 | struct work_struct reset_task; | 1150 | struct work_struct reset_task; |
diff --git a/drivers/net/ethernet/freescale/gianfar_ethtool.c b/drivers/net/ethernet/freescale/gianfar_ethtool.c index fda12fb32ec7..3c0a8f825b63 100644 --- a/drivers/net/ethernet/freescale/gianfar_ethtool.c +++ b/drivers/net/ethernet/freescale/gianfar_ethtool.c | |||
@@ -653,7 +653,6 @@ static void gfar_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol) | |||
653 | static int gfar_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol) | 653 | static int gfar_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol) |
654 | { | 654 | { |
655 | struct gfar_private *priv = netdev_priv(dev); | 655 | struct gfar_private *priv = netdev_priv(dev); |
656 | unsigned long flags; | ||
657 | 656 | ||
658 | if (!(priv->device_flags & FSL_GIANFAR_DEV_HAS_MAGIC_PACKET) && | 657 | if (!(priv->device_flags & FSL_GIANFAR_DEV_HAS_MAGIC_PACKET) && |
659 | wol->wolopts != 0) | 658 | wol->wolopts != 0) |
@@ -664,9 +663,7 @@ static int gfar_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol) | |||
664 | 663 | ||
665 | device_set_wakeup_enable(&dev->dev, wol->wolopts & WAKE_MAGIC); | 664 | device_set_wakeup_enable(&dev->dev, wol->wolopts & WAKE_MAGIC); |
666 | 665 | ||
667 | spin_lock_irqsave(&priv->bflock, flags); | 666 | priv->wol_en = !!device_may_wakeup(&dev->dev); |
668 | priv->wol_en = !!device_may_wakeup(&dev->dev); | ||
669 | spin_unlock_irqrestore(&priv->bflock, flags); | ||
670 | 667 | ||
671 | return 0; | 668 | return 0; |
672 | } | 669 | } |