From patchwork Thu Nov 24 09:17:01 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yegor Yefremov X-Patchwork-Id: 698776 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 3tPYWR2YT5z9t1B for ; Thu, 24 Nov 2016 20:17:23 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=googlemail.com header.i=@googlemail.com header.b="YOYJ8u/2"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S936572AbcKXJRR (ORCPT ); Thu, 24 Nov 2016 04:17:17 -0500 Received: from mail-wm0-f66.google.com ([74.125.82.66]:34965 "EHLO mail-wm0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S936562AbcKXJRP (ORCPT ); Thu, 24 Nov 2016 04:17:15 -0500 Received: by mail-wm0-f66.google.com with SMTP id a20so4394212wme.2; Thu, 24 Nov 2016 01:17:15 -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=6FrvbgREDP0Ny/Epf0VICNlDisj3yx4V0tIzFApgQEo=; b=YOYJ8u/2vRQ1Ksi7fZmp/fbovU25nywpSRIDnZOsSNjBfezaZxZmwRKuVZz5due8+B Gz1gKwh/ljfnZHSL5+7WM5XHsEJ92lNhFOlYRnz00Km4IxD4nMnqpvII59QMuB2V+wUL sC09Ohv9ndPgndeKSo4NwzgkTSlnYYy8Fe5KXOif7xHl1xtpBWsyL/kPMYTyC/8rRikh cR4cOxM1NTniK5PGYdEIe6mLFH6yDNFOno4xm20flQ3zJv8s8NlK5WhxNYv55Qboz4EM 2alWeVTUyohHdjLFDkTPgm5W4es0uYiuDK24kJzRUzNoqsCrkHMkMJV13gjpESFlk/dE lw7Q== 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=6FrvbgREDP0Ny/Epf0VICNlDisj3yx4V0tIzFApgQEo=; b=dw6MwkOd5EHHIVUF9EQET0m8d+EVzptcRKyZrhwkv4fnIsr17kFwz7ujc+zCN3s28l /xiwCiMPo9JktsyWR4zzbYxe+QVNM6GtvjalJQxxLV5dMYzLHsfDGJgkeCwJAiJngD1m +9fMlt+oN1oABLoP3TCTVUaYb0KQ2VZ1IDH2oxQGTdD+4qui8mF0OU7A8sWqDZ36ULlz qfMNNmhgG8Xp+8vTxeLtLSwb/7veZZf3jqDoy7Fp8zldp6/v6lTVC5KFoa9nL4w8yMX/ 3Ao5BqDcC13va0RPbixELJORiIZKj5pDt4B3wDdJAbm0yOpQA7caTrE7wHFQZ6WXFGea /uuQ== X-Gm-Message-State: AKaTC03oid+e5lXx9+MgfxvaEwtzbCYs/RQTy9bjwRm2vX/U/dG+DolrAJCLg2OcR90q/Q== X-Received: by 10.28.126.11 with SMTP id z11mr1455462wmc.87.1479979034157; Thu, 24 Nov 2016 01:17:14 -0800 (PST) Received: from development1.visionsystems.de (mail.visionsystems.de. [213.209.99.202]) by smtp.gmail.com with ESMTPSA id i15sm40716946wjs.16.2016.11.24.01.17.13 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 24 Nov 2016 01:17:13 -0800 (PST) From: yegorslists@googlemail.com To: netdev@vger.kernel.org Cc: linux-omap@vger.kernel.org, grygorii.strashko@ti.com, mugunthanvnm@ti.com, roszenrami@gmail.com, f.fainelli@gmail.com, Yegor Yefremov Subject: [PATCH v3] cpsw: ethtool: add support for getting/setting EEE registers Date: Thu, 24 Nov 2016 10:17:01 +0100 Message-Id: <1479979021-13715-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: 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 c6cff3d..c706540 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; } +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, @@ -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,