2013-08-19 11:06:09

by Matus Ujhelyi

[permalink] [raw]
Subject: [PATCHv2] net: cpsw: Add support for wake-on-lan for cpsw

From: Matus Ujhelyi <[email protected]>

Some phy's can be configured to enable wake on lan (e.g. at803x or marvell 88E1318S).
There is no way how to enable wol on CPSW with such connected phys. This patch
adds this support. It is provided by calling the phy's related code.

Tested on board with at8030x connected phy. Wol interrupt line is
connected to GPIO0 on am335x.

Signed-off-by: Matus Ujhelyi <[email protected]>
---
drivers/net/ethernet/ti/cpsw.c | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)

diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c
index 22a7a43..fe8d973 100644
--- a/drivers/net/ethernet/ti/cpsw.c
+++ b/drivers/net/ethernet/ti/cpsw.c
@@ -1416,6 +1416,27 @@ static int cpsw_set_settings(struct net_device *ndev, struct ethtool_cmd *ecmd)
return -EOPNOTSUPP;
}

+static void cpsw_get_wol(struct net_device *ndev, struct ethtool_wolinfo *wol)
+{
+ struct cpsw_priv *priv = netdev_priv(ndev);
+ int slave_no = cpsw_slave_index(priv);
+ wol->supported = 0;
+ wol->wolopts = 0;
+ if (priv->slaves[slave_no].phy)
+ phy_ethtool_get_wol(priv->slaves[slave_no].phy, wol);
+
+}
+
+static int cpsw_set_wol(struct net_device *ndev, struct ethtool_wolinfo *wol)
+{
+ struct cpsw_priv *priv = netdev_priv(ndev);
+ int slave_no = cpsw_slave_index(priv);
+ if (priv->slaves[slave_no].phy)
+ return phy_ethtool_set_wol(priv->slaves[slave_no].phy, wol);
+ else
+ return -EOPNOTSUPP;
+}
+
static const struct ethtool_ops cpsw_ethtool_ops = {
.get_drvinfo = cpsw_get_drvinfo,
.get_msglevel = cpsw_get_msglevel,
@@ -1426,6 +1447,8 @@ static const struct ethtool_ops cpsw_ethtool_ops = {
.set_settings = cpsw_set_settings,
.get_coalesce = cpsw_get_coalesce,
.set_coalesce = cpsw_set_coalesce,
+ .get_wol = cpsw_get_wol,
+ .set_wol = cpsw_set_wol,
};

static void cpsw_slave_init(struct cpsw_slave *slave, struct cpsw_priv *priv,
--
1.7.9.5


2013-08-19 11:39:24

by Mugunthan V N

[permalink] [raw]
Subject: Re: [PATCHv2] net: cpsw: Add support for wake-on-lan for cpsw

On Monday 19 August 2013 04:35 PM, [email protected] wrote:
> From: Matus Ujhelyi <[email protected]>
>
> Some phy's can be configured to enable wake on lan (e.g. at803x or marvell 88E1318S).
> There is no way how to enable wol on CPSW with such connected phys. This patch
> adds this support. It is provided by calling the phy's related code.
>
> Tested on board with at8030x connected phy. Wol interrupt line is
> connected to GPIO0 on am335x.
>
> Signed-off-by: Matus Ujhelyi <[email protected]>
Looks good to me.
Acked-by: Mugunthan V N <[email protected]>

Regards
Mugunthan V N

2013-08-19 20:16:27

by Francois Romieu

[permalink] [raw]
Subject: Re: [PATCHv2] net: cpsw: Add support for wake-on-lan for cpsw

[email protected] <[email protected]> :
[...]
> Some phy's can be configured to enable wake on lan (e.g. at803x or marvell 88E1318S).
> There is no way how to enable wol on CPSW with such connected phys. This patch
> adds this support. It is provided by calling the phy's related code.
>
> Tested on board with at8030x connected phy. Wol interrupt line is
> connected to GPIO0 on am335x.

This patch adds a feature. It isn't a bugfix. It should thus target
'net-next', not 'net' (it does not apply to net-next as of 2ff1cf12c9 btw).

>
> Signed-off-by: Matus Ujhelyi <[email protected]>
> ---
> drivers/net/ethernet/ti/cpsw.c | 23 +++++++++++++++++++++++
> 1 file changed, 23 insertions(+)
>
> diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c
> index 22a7a43..fe8d973 100644
> --- a/drivers/net/ethernet/ti/cpsw.c
> +++ b/drivers/net/ethernet/ti/cpsw.c
> @@ -1416,6 +1416,27 @@ static int cpsw_set_settings(struct net_device *ndev, struct ethtool_cmd *ecmd)
> return -EOPNOTSUPP;
> }
>
> +static void cpsw_get_wol(struct net_device *ndev, struct ethtool_wolinfo *wol)
> +{
> + struct cpsw_priv *priv = netdev_priv(ndev);
> + int slave_no = cpsw_slave_index(priv);
> + wol->supported = 0;

Variable declarations and code should be separated: please add an empty
line.

> + wol->wolopts = 0;
> + if (priv->slaves[slave_no].phy)
> + phy_ethtool_get_wol(priv->slaves[slave_no].phy, wol);
> +
> +}

Useless empty line.

> +
> +static int cpsw_set_wol(struct net_device *ndev, struct ethtool_wolinfo *wol)
> +{
> + struct cpsw_priv *priv = netdev_priv(ndev);
> + int slave_no = cpsw_slave_index(priv);
> + if (priv->slaves[slave_no].phy)

Variable declarations and code should be separated: please add an empty
line.

> + return phy_ethtool_set_wol(priv->slaves[slave_no].phy, wol);
> + else
> + return -EOPNOTSUPP;
> +}
> +
> static const struct ethtool_ops cpsw_ethtool_ops = {
> .get_drvinfo = cpsw_get_drvinfo,
> .get_msglevel = cpsw_get_msglevel,
> @@ -1426,6 +1447,8 @@ static const struct ethtool_ops cpsw_ethtool_ops = {
> .set_settings = cpsw_set_settings,
> .get_coalesce = cpsw_get_coalesce,
^^^ tab
> .set_coalesce = cpsw_set_coalesce,
^^^ tab
> + .get_wol = cpsw_get_wol,
^^^^^^^^ spaces, please use tabs.
> + .set_wol = cpsw_set_wol,
^^^^^^^^ spaces, please use tabs.

--
Ueimor