From patchwork Thu Nov 30 19:24:04 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Scott Branden X-Patchwork-Id: 843154 X-Patchwork-Delegate: linville@tuxdriver.com Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=broadcom.com header.i=@broadcom.com header.b="KQOXxDeX"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3ynnQy6lWCz9sNr for ; Fri, 1 Dec 2017 06:24:42 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750891AbdK3TYl (ORCPT ); Thu, 30 Nov 2017 14:24:41 -0500 Received: from mail-qk0-f196.google.com ([209.85.220.196]:36738 "EHLO mail-qk0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750752AbdK3TYj (ORCPT ); Thu, 30 Nov 2017 14:24:39 -0500 Received: by mail-qk0-f196.google.com with SMTP id t187so10311402qkh.3 for ; Thu, 30 Nov 2017 11:24:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:cc:subject:date:message-id; bh=GrHtkCPDcL2p42RAGF6gXkimUvQbjZnpXI0+lcwhUp4=; b=KQOXxDeXl6P/508aveSxloo7ZAbhG+DpO0xMZIRGvlKvnzfv6L3TMeXlIi/rdBZOIv o6jcuS/ZNB8BVHcIsGO5XpeDw69luVuGFawig7EA3Q2ReJ0G8dihMKClYzOybw+7Mpc/ ExKhneTqhRAk8OwB7KGJ2daIdZVx+0Fjfodok= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=GrHtkCPDcL2p42RAGF6gXkimUvQbjZnpXI0+lcwhUp4=; b=ZDFqOp5fAMnTLBM2WdbALLSMht5aZCWf1JhnJ3Bc1zasDhmhGOGQBfLZXflJoC1lyE s3tnZT54MS6hgA7q2Jz80hM/HY1cKM+wk1Qeo047FnDtOJsMu5hGTkM/8aIgmhnLCH1x rRbZCVmEenj3ezJscmKDozME0H6+miMeqHihv3OBVBngM3Ad+h3wZkNu/GltheiLgz2t u9DgAEpqqb8VT9EfjuXcqnatUphLkqTRQWBYqtBqQMZ3eWg0x64yuMl8sANDQrz9sz5g iUH7HxBM2+3jiSysnmHSSfLixxmchmKBzrjBpFdrtXIqnVBRxLcxvgus4iBxqCoIF+dU Xk2g== X-Gm-Message-State: AKGB3mJOdBxC5iW8OLK5WDlcXNNp/MzvbGvXL9We/uhJ5G36MNvNpxuT ciwmFmNrmRes/5dzpW/GxHY3oA== X-Google-Smtp-Source: AGs4zMZJ3kpWb1oNoM/ITbCLOMwiM6IXXTard7RoFsYKGt1slhMhrqQSp9AsCX+o5GJ23yAjJOmL1A== X-Received: by 10.55.20.96 with SMTP id e93mr4202795qkh.253.1512069878836; Thu, 30 Nov 2017 11:24:38 -0800 (PST) Received: from lbrmn-lnxub113.ric.broadcom.com ([192.19.224.250]) by smtp.gmail.com with ESMTPSA id s43sm3506297qta.49.2017.11.30.11.24.36 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 30 Nov 2017 11:24:38 -0800 (PST) From: Scott Branden To: "John W. Linville" Cc: BCM Kernel Feedback , Steve Lin , Michael Chan , netdev@vger.kernel.org, Scott Branden Subject: [PATCH] ethtool: Add ETHTOOL_RESET support via --reset command Date: Thu, 30 Nov 2017 11:24:04 -0800 Message-Id: <1512069844-15664-1-git-send-email-scott.branden@broadcom.com> X-Mailer: git-send-email 2.5.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Add ETHTOOL_RESET support via --reset command. ie. ethtool --reset DEVNAME flagnames currently match the ETH_RESET_xxx names: mgmt,irq,dma,filter,offload,mac,phy,ram,dedicated,all Alternatively, you can specific component bitfield directly using ethtool --reset DEVNAME flags %x Signed-off-by: Scott Branden --- ethtool.8.in | 55 ++++++++++++++++++++++++++++++++++++++++++++- ethtool.c | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 127 insertions(+), 1 deletion(-) diff --git a/ethtool.8.in b/ethtool.8.in index 6ad3065..925cfe3 100644 --- a/ethtool.8.in +++ b/ethtool.8.in @@ -355,6 +355,20 @@ ethtool \- query or control network driver and hardware settings .B ethtool \-\-get\-phy\-tunable .I devname .RB [ downshift ] +.HP +.B ethtool \-\-reset +.I devname +.BN flags +.B [mgmt] +.B [irq] +.B [dma] +.B [filter] +.B [offload] +.B [mac] +.B [phy] +.B [ram] +.B [dedicated] +.B [all] . .\" Adjust lines (i.e. full justification) and hyphenate. .ad @@ -1007,6 +1021,44 @@ Downshift is useful where cable does not have the 4 pairs instance. Gets the PHY downshift count/status. .RE +.TP +.B \-\-reset +Reset hardware components specified by flags and components listed below +.RS 4 +.TP +.BI flags \ N +Resets the components based on direct flags mask +.TP +.B mgmt +Management processor +.TP +.B irq +Interrupt requester +.TP +.B dma +DMA engine +.TP +.B filter +Filtering/flow direction +.TP +.B offload +Protocol offload +.TP +.B mac +Media access controller +.TP +.B phy +Transceiver/PHY +.TP +.B ram +RAM shared between multiple components +.TP +.B dedicated +All components dedicated to this interface +.TP +.B all +All components used by this interface, even if shared +.RE .SH BUGS Not supported (in part or whole) on all network drivers. .SH AUTHOR @@ -1024,7 +1076,8 @@ Andi Kleen, Alexander Duyck, Sucheta Chakraborty, Jesse Brandeburg, -Ben Hutchings. +Ben Hutchings, +Scott Branden. .SH AVAILABILITY .B ethtool is available from diff --git a/ethtool.c b/ethtool.c index 1a2b7cc..8c9d169 100644 --- a/ethtool.c +++ b/ethtool.c @@ -4641,6 +4641,67 @@ static int do_get_phy_tunable(struct cmd_context *ctx) return err; } +static int do_reset(struct cmd_context *ctx) +{ + struct ethtool_value resetinfo; + int argc = ctx->argc; + char **argp = ctx->argp; + int i; + + if (argc == 0) + exit_bad_args(); + + resetinfo.data = 0; + + for (i = 0; i < argc; i++) { + if (!strcmp(argp[i], "flags")) { + __u32 flags; + + i++; + if (i >= argc) + exit_bad_args(); + flags = strtoul(argp[i], NULL, 0); + if (flags == 0) + exit_bad_args(); + else + resetinfo.data |= flags; + } else if (!strcmp(argp[i], "mgmt")) { + resetinfo.data |= ETH_RESET_MGMT; + } else if (!strcmp(argp[i], "irq")) { + resetinfo.data |= ETH_RESET_IRQ; + } else if (!strcmp(argp[i], "dma")) { + resetinfo.data |= ETH_RESET_DMA; + } else if (!strcmp(argp[i], "filter")) { + resetinfo.data |= ETH_RESET_FILTER; + } else if (!strcmp(argp[i], "offload")) { + resetinfo.data |= ETH_RESET_OFFLOAD; + } else if (!strcmp(argp[i], "mac")) { + resetinfo.data |= ETH_RESET_MAC; + } else if (!strcmp(argp[i], "phy")) { + resetinfo.data |= ETH_RESET_PHY; + } else if (!strcmp(argp[i], "ram")) { + resetinfo.data |= ETH_RESET_RAM; + } else if (!strcmp(argp[i], "dedicated")) { + resetinfo.data |= ETH_RESET_DEDICATED; + } else if (!strcmp(argp[i], "all")) { + resetinfo.data |= ETH_RESET_ALL; + } else { + exit_bad_args(); + } + } + + resetinfo.cmd = ETHTOOL_RESET; + + if (send_ioctl(ctx, &resetinfo)) { + perror("Cannot issue RESET"); + return 1; + } else { + fprintf(stdout, "RESET 0x%x issued\n", resetinfo.data); + } + + return 0; +} + static int parse_named_bool(struct cmd_context *ctx, const char *name, u8 *on) { if (ctx->argc < 2) @@ -4904,6 +4965,18 @@ static const struct option { " [ downshift on|off [count N] ]\n"}, { "--get-phy-tunable", 1, do_get_phy_tunable, "Get PHY tunable", " [ downshift ]\n"}, + { "--reset", 1, do_reset, "Reset components", + " [ flags %x ]\n" + " [ mgmt ]\n" + " [ irq ]\n" + " [ dma ]\n" + " [ filter ]\n" + " [ offload ]\n" + " [ mac ]\n" + " [ phy ]\n" + " [ ram ]\n" + " [ dedicated ]\n" + " [ all ]\n"}, { "-h|--help", 0, show_usage, "Show this help" }, { "--version", 0, do_version, "Show version number" }, {}