From patchwork Wed Nov 23 10:34:08 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yegor Yefremov X-Patchwork-Id: 698131 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3tNzJZ5hRRz9sD5 for ; Wed, 23 Nov 2016 21:35:58 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=googlemail.com header.i=@googlemail.com header.b="CrmR6mVZ"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S935248AbcKWKfA (ORCPT ); Wed, 23 Nov 2016 05:35:00 -0500 Received: from mail-wm0-f67.google.com ([74.125.82.67]:34546 "EHLO mail-wm0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934126AbcKWKeZ (ORCPT ); Wed, 23 Nov 2016 05:34:25 -0500 Received: by mail-wm0-f67.google.com with SMTP id g23so1543668wme.1; Wed, 23 Nov 2016 02:34:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlemail.com; s=20120113; h=from:to:cc:subject:date:message-id; bh=CMq9tGUUm7+C3GVE9pVAT/iYEv6qlYG7T4X9xT91QZ8=; b=CrmR6mVZ+Qa9hTnxGbpf9ksXWDldY1s6btEoHLyj+WUYUOb6xeeFGxS2Zl36IIt1ua g9nfnX7NF1PrVGy9AoYidij8icBAATGTSY59KyFSXHjnzQuPNrtCks1xA5TRf5K0X1KF 1lkwdssP3K0X3RlUIx9oq4hutzOVjhl/8znxSs+hTuzL5p5DdahMeA67Eazk2zR2dLby OT0yYRoY9FDO1gopvKdkVTYlMVcqAzHdq4MU6YrqhcWQwvlj9ezcgLOSJg7bzrgteKG7 KqD+IBbbBlnI9jGIBWgml6edACU4FhokCrSo5+AEnyBujwQLPwi2V05EWiEgtX42miI2 tx/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=CMq9tGUUm7+C3GVE9pVAT/iYEv6qlYG7T4X9xT91QZ8=; b=MYbkK7gG/GllsMplhur84yGKy7jNU8fbBVex6Q2rLYkeVyMiz1d+BYl+ajqRa+jDwY 7FQF4z/M8eBXzYxyKIJg2xIp23MnUVDgRIQ8W3am9EvnIj12QxmR4874w8g88XIRZltk Yp9qpGObafgziyGJi3ZTl3vSEMU37+28M6+y4LYpP/0AumUqZ5LeM5ai8fGRtOOzYUOO WZc0nIWQ+H9UfOmkqBVfygbPfv1Z+BjgTmpwdILeGkhXodsLYjErRrPlq/A5rqm1iWtR ryBdDlPzLAJjJjlkq27BCAjRjO+2fi5cuXirNHEEhEUdB1Oo4hpa4QoD31QGhevfVJOo hprw== X-Gm-Message-State: AKaTC01CGlWLYv0WpBymukeh9ympBC84UZxYLlECSybBoRHtIIATXnxVP6ALbj/gLvVBPw== X-Received: by 10.28.103.134 with SMTP id b128mr2573257wmc.54.1479897263268; Wed, 23 Nov 2016 02:34:23 -0800 (PST) Received: from development1.visionsystems.de (mail.visionsystems.de. [213.209.99.202]) by smtp.gmail.com with ESMTPSA id cl10sm35679723wjb.4.2016.11.23.02.34.22 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 23 Nov 2016 02:34:22 -0800 (PST) From: yegorslists@googlemail.com To: netdev@vger.kernel.org Cc: linux-omap@vger.kernel.org, grygorii.strashko@ti.com, mugunthanvnm@ti.com, Yegor Yefremov Subject: [PATCH] cpsw: ethtool: add support for getting/setting EEE registers Date: Wed, 23 Nov 2016 11:34:08 +0100 Message-Id: <1479897248-5923-1-git-send-email-yegorslists@googlemail.com> X-Mailer: git-send-email 2.1.4 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Yegor Yefremov Add the ability to query and set Energy Efficient Ethernet parameters via ethtool for applicable devices. Signed-off-by: Yegor Yefremov --- drivers/net/ethernet/ti/cpsw.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c index c6cff3d..6856616 100644 --- a/drivers/net/ethernet/ti/cpsw.c +++ b/drivers/net/ethernet/ti/cpsw.c @@ -2239,6 +2239,30 @@ static int cpsw_set_channels(struct net_device *ndev, return ret; } +int cpsw_get_eee(struct net_device *ndev, struct ethtool_eee *edata) +{ + struct cpsw_priv *priv = netdev_priv(ndev); + struct cpsw_common *cpsw = priv->cpsw; + int slave_no = cpsw_slave_index(cpsw, priv); + + if (cpsw->slaves[slave_no].phy) + return phy_ethtool_get_eee(cpsw->slaves[slave_no].phy, edata); + else + return -EOPNOTSUPP; +} + +int cpsw_set_eee(struct net_device *ndev, struct ethtool_eee *edata) +{ + struct cpsw_priv *priv = netdev_priv(ndev); + struct cpsw_common *cpsw = priv->cpsw; + int slave_no = cpsw_slave_index(cpsw, priv); + + if (cpsw->slaves[slave_no].phy) + return phy_ethtool_set_eee(cpsw->slaves[slave_no].phy, edata); + else + return -EOPNOTSUPP; +} + static const struct ethtool_ops cpsw_ethtool_ops = { .get_drvinfo = cpsw_get_drvinfo, .get_msglevel = cpsw_get_msglevel, @@ -2262,6 +2286,8 @@ static const struct ethtool_ops cpsw_ethtool_ops = { .complete = cpsw_ethtool_op_complete, .get_channels = cpsw_get_channels, .set_channels = cpsw_set_channels, + .get_eee = cpsw_get_eee, + .set_eee = cpsw_set_eee, }; static void cpsw_slave_init(struct cpsw_slave *slave, struct cpsw_common *cpsw,