From patchwork Mon Nov 28 08:41:33 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yegor Yefremov X-Patchwork-Id: 699886 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 3tS0Xk5JDcz9t2T for ; Mon, 28 Nov 2016 19:41:58 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=googlemail.com header.i=@googlemail.com header.b="yHZ8jVNh"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932328AbcK1Ilx (ORCPT ); Mon, 28 Nov 2016 03:41:53 -0500 Received: from mail-wm0-f67.google.com ([74.125.82.67]:33912 "EHLO mail-wm0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932141AbcK1Ilt (ORCPT ); Mon, 28 Nov 2016 03:41:49 -0500 Received: by mail-wm0-f67.google.com with SMTP id g23so17672684wme.1; Mon, 28 Nov 2016 00:41:48 -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=8WVnqIUTmbT6VXXBxU2EnXZk5Uf/8CHzwfnNG94Nlw8=; b=yHZ8jVNh8hBBRZbcLDbx1aVZBbNEI2Yl1poaF6MwYRPleC9gD7GjBcHnbyF/afJdJa loymVSys9zRsYHRkbWgpWeQ4WFv4ZaB/MutuNPIjTS83cuxWSzQ9rt+q4wZKlf8l4Mp9 5Hj68Q5KQ/iAKUMCFzWoEjOuJ0xNVKPoEOYks8Ctxf+GgDMj1gBqmS+LGCg8dK6D5Zbp 5HbafKkhGSgMuHm85E1Ael3TuLKxQvgXvOAjJ7vIpZxCciw1Dvni9gFNjLLbxhCCF5lY RoLOxbsy7OchgdZK8sbP3AbZ0YW/V9bH4zLQAG5Ykw5uIahU6IXTXqQ8ai8jg9KiTUcl BqRQ== 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=8WVnqIUTmbT6VXXBxU2EnXZk5Uf/8CHzwfnNG94Nlw8=; b=VLpjSebjMTHOi8KV2f6yurhVvMv4AmpuenPUuXls43LuZlcIIz1/P7SaWDiEvGoAqu KGk+QIOgDEksYg/g9B1+9YfpPuXQ09o4aejKdwWIenstP5+RHY0QTdrqZxkv6m8oZn1Z hVICSPswIo1hQLE4/2YTPVy2KnfMGUgheMdrtQzbo1szhX5H7GxHtHmh6iXEQk+acbF2 VmlUCumvp0LatXbzZGqNPN8qGfMDBalf/9CYuWR5N8cR1G42SpaRhe2ZZz2Q/YSjoM19 UShotnYBxqhwR0Vz+x8EIX4HUdEu/L/elPoQtbOPSVOgdmQOwGufDMLK/ZvYtCnI5RDQ qIzw== X-Gm-Message-State: AKaTC03VDQSnsIdz7YeEwgfxSPYSYZsC5c6/mtvPRy+UI2peNUX7Q9Ok3PQA3/AdI5N2hA== X-Received: by 10.28.150.69 with SMTP id y66mr6324616wmd.107.1480322508117; Mon, 28 Nov 2016 00:41:48 -0800 (PST) Received: from development1.visionsystems.de (mail.visionsystems.de. [213.209.99.202]) by smtp.gmail.com with ESMTPSA id d184sm27820005wmd.8.2016.11.28.00.41.47 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 28 Nov 2016 00:41:47 -0800 (PST) From: yegorslists@googlemail.com To: netdev@vger.kernel.org Cc: linux-omap@vger.kernel.org, grygorii.strashko@ti.com, mugunthanvnm@ti.com, davem@davemloft.net, Yegor Yefremov Subject: [PATCH v4] cpsw: ethtool: add support for getting/setting EEE registers Date: Mon, 28 Nov 2016 09:41:33 +0100 Message-Id: <1480322493-25308-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. This patch doesn't activate full EEE support in cpsw driver, but it enables reading and writing EEE advertising settings. This way one can disable advertising EEE for certain speeds. Signed-off-by: Yegor Yefremov Acked-by: Rami Rosen --- Changes: v4: respine against net-next (David Miller) v3: explain what features will be available with this patch (Florian Fainelli) v2: make routines static (Rami Rosen) 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 da40ea5..df87bff 100644 --- a/drivers/net/ethernet/ti/cpsw.c +++ b/drivers/net/ethernet/ti/cpsw.c @@ -2237,6 +2237,30 @@ static int cpsw_set_channels(struct net_device *ndev, return ret; } +static 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; +} + +static 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, @@ -2260,6 +2284,8 @@ static const struct ethtool_ops cpsw_ethtool_ops = { .set_channels = cpsw_set_channels, .get_link_ksettings = cpsw_get_link_ksettings, .set_link_ksettings = cpsw_set_link_ksettings, + .get_eee = cpsw_get_eee, + .set_eee = cpsw_set_eee, }; static void cpsw_slave_init(struct cpsw_slave *slave, struct cpsw_common *cpsw,