From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 75C40C43381 for ; Fri, 29 Mar 2019 19:17:29 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 33F05218A3 for ; Fri, 29 Mar 2019 19:17:29 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="HjUkuviV" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729896AbfC2TR2 (ORCPT ); Fri, 29 Mar 2019 15:17:28 -0400 Received: from mail-wr1-f66.google.com ([209.85.221.66]:38405 "EHLO mail-wr1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729771AbfC2TR0 (ORCPT ); Fri, 29 Mar 2019 15:17:26 -0400 Received: by mail-wr1-f66.google.com with SMTP id k11so3902668wro.5 for ; Fri, 29 Mar 2019 12:17:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:from:to:cc:references:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=n+RK4xe3r/EwRgzdInN5e+q/rbfPZJDzqTuKJSugn/Y=; b=HjUkuviVCM5zERPfP5QztkGE89FSbWR9AIpg/HrAWZhVtYnJvALu3jHj2TcgP6XOJ3 k0xI7bdFAOxzjLKxMNbloCFA5eHpA8Bk8CGx7EwfDxcOltohZ5jqCzTZyLpgghmEb/1J NvPzqJleD8MYJFGE6uyn5Ze6h/V9FW2d33vzdsn7QhLNU8FRdNcfJ3ay3AD56CsH9eA2 p5nnytDPejvbC7X9R/kyawRyISkiuc9YlIn+G5LR++ltCtOYJPzwe46M1V7G1KGZMUHl iKQe5d/dQbXHH9JzTM/CKO5yEaMZ770dT0WegDmYPzf5tTLzrFM8deQ/5P1KM/JvKkQu CTCw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:from:to:cc:references:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=n+RK4xe3r/EwRgzdInN5e+q/rbfPZJDzqTuKJSugn/Y=; b=nHKE+eEvdLONBtMRjEMKoUXxPqCw0AOCkCe0kZhsRSlkRMCKQJX0ODUFlE6cLWr4QU HgvW7s5mxblWQK+EZYG4AwLZJ+m5BA1iTJrSsAlqwGtfqIZBuyZ+CtrJUXMrHeK8ESLA IlUgmjurFsPXoXks+ukhUd4Sx0BKtMQrwFIcy/XxyQ4UaJk3ag1iZ0p0ZETJ9fkkMKL6 nJLFY+SLwJqZTO85qNSOh9UFc6INd/w1xUAhAT0Jpp/X6tcrqT+Cc7LpG61H+3IBQ0iT 70NB/SrhN4EkrYNdQBxrfphTeBRHd25+WknsXqtV+3LvXpK7sfvYBjJQrDuf347SSFAN Tyig== X-Gm-Message-State: APjAAAU6Kuc7nJ2/rsF/QhswtX6e6c9UA1bmOEKkoGdLNvAvvo3oW6h2 gNSRLmtqE3tO7PXRcGXVYVxB15sH X-Google-Smtp-Source: APXvYqw3LgOKa32Ru2MR3H+1e3DHTYSFE6bjdpaBEqD3MX4agUWTSB5fjJ/WcDwCo216aPNjFfTmlg== X-Received: by 2002:a5d:4f07:: with SMTP id c7mr30490340wru.104.1553887043835; Fri, 29 Mar 2019 12:17:23 -0700 (PDT) Received: from ?IPv6:2003:ea:8be1:dd00:a991:cc44:5157:9e5? (p200300EA8BE1DD00A991CC44515709E5.dip0.t-ipconnect.de. [2003:ea:8be1:dd00:a991:cc44:5157:9e5]) by smtp.googlemail.com with ESMTPSA id t69sm4741149wmt.16.2019.03.29.12.17.22 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 29 Mar 2019 12:17:23 -0700 (PDT) Subject: [PATCH v2 3/4] ethtool: add support for PHY tunable Fast Link Down From: Heiner Kallweit To: John Linville , Andrew Lunn , Florian Fainelli Cc: "netdev@vger.kernel.org" References: <86b1ab67-fd7e-2789-1218-8c14e8198a60@gmail.com> Message-ID: <14d0f457-49f3-a97f-3e9a-29f5a861fba0@gmail.com> Date: Fri, 29 Mar 2019 20:15:54 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 MIME-Version: 1.0 In-Reply-To: <86b1ab67-fd7e-2789-1218-8c14e8198a60@gmail.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This patch adds support for PHY tunable Fast Link Down. Like downshift it uses an u8 parameter. Signed-off-by: Heiner Kallweit --- ethtool.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 53 insertions(+), 2 deletions(-) diff --git a/ethtool.c b/ethtool.c index f67cd1b..f56a604 100644 --- a/ethtool.c +++ b/ethtool.c @@ -4840,6 +4840,28 @@ static int do_get_phy_tunable(struct cmd_context *ctx) fprintf(stdout, "Downshift count: %d\n", cont.count); else fprintf(stdout, "Downshift disabled\n"); + } else if (!strcmp(argp[0], "fast-link-down")) { + struct { + struct ethtool_tunable fld; + u8 msecs; + } cont; + + cont.fld.cmd = ETHTOOL_PHY_GTUNABLE; + cont.fld.id = ETHTOOL_PHY_FAST_LINK_DOWN; + cont.fld.type_id = ETHTOOL_TUNABLE_U8; + cont.fld.len = 1; + if (send_ioctl(ctx, &cont.fld) < 0) { + perror("Cannot Get PHY Fast Link Down value"); + return 87; + } + + if (cont.msecs == ETHTOOL_PHY_FAST_LINK_DOWN_ON) + fprintf(stdout, "Fast Link Down enabled\n"); + else if (cont.msecs == ETHTOOL_PHY_FAST_LINK_DOWN_OFF) + fprintf(stdout, "Fast Link Down disabled\n"); + else + fprintf(stdout, "Fast Link Down enabled, %d msecs\n", + cont.msecs); } else { exit_bad_args(); } @@ -4982,11 +5004,17 @@ static int do_set_phy_tunable(struct cmd_context *ctx) int err = 0; u8 ds_cnt = DOWNSHIFT_DEV_DEFAULT_COUNT; u8 ds_changed = 0, ds_has_cnt = 0, ds_enable = 0; + u8 fld_changed = 0, fld_enable = 0; + u8 fld_msecs = ETHTOOL_PHY_FAST_LINK_DOWN_ON; /* Parse arguments */ if (parse_named_bool(ctx, "downshift", &ds_enable)) { ds_changed = 1; ds_has_cnt = parse_named_u8(ctx, "count", &ds_cnt); + } else if (parse_named_bool(ctx, "fast-link-down", &fld_enable)) { + fld_changed = 1; + if (fld_enable) + parse_named_u8(ctx, "msecs", &fld_msecs); } else { exit_bad_args(); } @@ -5006,6 +5034,11 @@ static int do_set_phy_tunable(struct cmd_context *ctx) if (!ds_enable) ds_cnt = DOWNSHIFT_DEV_DISABLE; + } else if (fld_changed) { + if (!fld_enable) + fld_msecs = ETHTOOL_PHY_FAST_LINK_DOWN_OFF; + else if (fld_msecs == ETHTOOL_PHY_FAST_LINK_DOWN_OFF) + exit_bad_args(); } /* Do it */ @@ -5025,6 +5058,22 @@ static int do_set_phy_tunable(struct cmd_context *ctx) perror("Cannot Set PHY downshift count"); err = 87; } + } else if (fld_changed) { + struct { + struct ethtool_tunable fld; + u8 msecs; + } cont; + + cont.fld.cmd = ETHTOOL_PHY_STUNABLE; + cont.fld.id = ETHTOOL_PHY_FAST_LINK_DOWN; + cont.fld.type_id = ETHTOOL_TUNABLE_U8; + cont.fld.len = 1; + cont.msecs = fld_msecs; + err = send_ioctl(ctx, &cont.fld); + if (err < 0) { + perror("Cannot Set PHY Fast Link Down value"); + err = 87; + } } return err; @@ -5276,9 +5325,11 @@ static const struct option { " [ tx-lpi on|off ]\n" " [ tx-timer %d ]\n"}, { "--set-phy-tunable", 1, do_set_phy_tunable, "Set PHY tunable", - " [ downshift on|off [count N] ]\n"}, + " [ downshift on|off [count N] ]\n" + " [ fast-link-down on|off [msecs N] ]\n"}, { "--get-phy-tunable", 1, do_get_phy_tunable, "Get PHY tunable", - " [ downshift ]\n"}, + " [ downshift ]\n" + " [ fast-link-down ]\n"}, { "--reset", 1, do_reset, "Reset components", " [ flags %x ]\n" " [ mgmt ]\n" -- 2.21.0