From: Yangbo Lu <yangbo.lu@nxp.com>
To: <netdev@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
Claudiu Manoil <claudiu.manoil@nxp.com>
Cc: Shaohui Xie <Shaohui.Xie@nxp.com>, Yangbo Lu <Yangbo.lu@nxp.com>
Subject: [PATCH] net: gianfar: add ethtool eee support
Date: Tue, 28 Nov 2017 14:29:01 +0800 [thread overview]
Message-ID: <20171128062901.22210-1-yangbo.lu@nxp.com> (raw)
From: Shaohui Xie <Shaohui.Xie@nxp.com>
Gianfar does not support EEE, but it can connect to a PHY which supports
EEE and the PHY advertises EEE by default, and its link partner also
advertises EEE, so the PHY enters low power mode when traffic rate is low,
which causes packet loss if an application's traffic rate is low. This
patch provides .get_eee and .set_eee so that to disable the EEE
advertisement via ethtool if needed, other EEE features are not supported.
Signed-off-by: Shaohui Xie <Shaohui.Xie@nxp.com>
Signed-off-by: Yangbo Lu <Yangbo.lu@nxp.com>
---
drivers/net/ethernet/freescale/gianfar_ethtool.c | 28 ++++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/drivers/net/ethernet/freescale/gianfar_ethtool.c b/drivers/net/ethernet/freescale/gianfar_ethtool.c
index 56588f2e1d91..8953650b36f3 100644
--- a/drivers/net/ethernet/freescale/gianfar_ethtool.c
+++ b/drivers/net/ethernet/freescale/gianfar_ethtool.c
@@ -184,6 +184,32 @@ static void gfar_gdrvinfo(struct net_device *dev,
strlcpy(drvinfo->bus_info, "N/A", sizeof(drvinfo->bus_info));
}
+static int gfar_get_eee(struct net_device *dev, struct ethtool_eee *et_eee)
+{
+ struct phy_device *phydev = dev->phydev;
+
+ if (!phydev)
+ return -ENODEV;
+
+ return phy_ethtool_get_eee(phydev, et_eee);
+}
+
+static int gfar_set_eee(struct net_device *dev, struct ethtool_eee *et_eee)
+{
+ struct phy_device *phydev = dev->phydev;
+
+ if (!phydev)
+ return -ENODEV;
+
+ if (et_eee->eee_enabled ||
+ et_eee->tx_lpi_enabled ||
+ et_eee->tx_lpi_timer) {
+ return -EOPNOTSUPP;
+ }
+
+ return phy_ethtool_set_eee(phydev, et_eee);
+}
+
/* Return the length of the register structure */
static int gfar_reglen(struct net_device *dev)
{
@@ -1535,6 +1561,8 @@ static int gfar_get_ts_info(struct net_device *dev,
}
const struct ethtool_ops gfar_ethtool_ops = {
+ .get_eee = gfar_get_eee,
+ .set_eee = gfar_set_eee,
.get_drvinfo = gfar_gdrvinfo,
.get_regs_len = gfar_reglen,
.get_regs = gfar_get_regs,
--
2.14.1
next reply other threads:[~2017-11-28 6:29 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-11-28 6:29 Yangbo Lu [this message]
2017-11-28 13:15 ` [PATCH] net: gianfar: add ethtool eee support Andrew Lunn
2017-12-07 16:44 ` [PATCH net] gianfar: Disable EEE autoneg by default Claudiu Manoil
2017-12-07 17:54 ` Andrew Lunn
2017-12-08 18:23 ` David Miller
-- strict thread matches above, loose matches on Subject: below --
2016-12-08 11:27 [PATCH] net: gianfar: add ethtool eee support Shaohui Xie
2016-12-08 23:19 ` David Miller
2016-12-08 23:22 ` Florian Fainelli
2016-12-09 2:55 ` S.H. Xie
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20171128062901.22210-1-yangbo.lu@nxp.com \
--to=yangbo.lu@nxp.com \
--cc=Shaohui.Xie@nxp.com \
--cc=claudiu.manoil@nxp.com \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).