From patchwork Thu Dec 3 13:49:48 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Madalin Bucur X-Patchwork-Id: 552251 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 4C5AD1402DE for ; Thu, 3 Dec 2015 23:53:32 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965063AbbLCMxM (ORCPT ); Thu, 3 Dec 2015 07:53:12 -0500 Received: from mail-by2on0147.outbound.protection.outlook.com ([207.46.100.147]:40576 "EHLO na01-by2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751985AbbLCMwh (ORCPT ); Thu, 3 Dec 2015 07:52:37 -0500 Received: from BLUPR03CA009.namprd03.prod.outlook.com (10.255.124.26) by DM2PR03MB511.namprd03.prod.outlook.com (10.141.87.19) with Microsoft SMTP Server (TLS) id 15.1.331.20; Thu, 3 Dec 2015 12:52:34 +0000 Received: from BN1BFFO11FD009.protection.gbl (10.255.124.4) by BLUPR03CA009.outlook.office365.com (10.255.124.26) with Microsoft SMTP Server (TLS) id 15.1.331.20 via Frontend Transport; Thu, 3 Dec 2015 12:52:33 +0000 Authentication-Results: spf=permerror (sender IP is 192.88.168.50) smtp.mailfrom=freescale.com; freescale.mail.onmicrosoft.com; dkim=none (message not signed) header.d=none; freescale.mail.onmicrosoft.com; dmarc=none action=none header.from=freescale.com; Received-SPF: PermError (protection.outlook.com: domain of freescale.com used an invalid SPF mechanism) Received: from tx30smr01.am.freescale.net (192.88.168.50) by BN1BFFO11FD009.mail.protection.outlook.com (10.58.144.72) with Microsoft SMTP Server (TLS) id 15.1.337.8 via Frontend Transport; Thu, 3 Dec 2015 12:52:28 +0000 Received: from localhost.localdomain (fsr-fed1764-003.ea.freescale.net [10.171.73.45]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id tB3CpuuL025079; Thu, 3 Dec 2015 05:52:24 -0700 From: Madalin Bucur To: CC: , , , , , , , , , , Madalin Bucur Subject: [net-next v5 7/8] dpaa_eth: add sysfs exports Date: Thu, 3 Dec 2015 15:49:48 +0200 Message-ID: <1449150589-26253-8-git-send-email-madalin.bucur@freescale.com> X-Mailer: git-send-email 1.5.6.5 In-Reply-To: <1449150589-26253-1-git-send-email-madalin.bucur@freescale.com> References: <1449150589-26253-1-git-send-email-madalin.bucur@freescale.com> Reply-To: X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1; BN1BFFO11FD009; 1:dvg6OfRR63u2bLTZkYat9j+NhwRpa3st/kieAQkoelT7N4ip0t7LDC1cw7veUoufAL1N7TLkxMMY5bn5hlGbYtc0tCkXij+T9i4Md4BbV8aImQhNNfTvyI/ugxywQV0i1Rrcb9K/v+HLnncskAjn/9u9xRwAZmCjEQV9FRq5v1W4uRw5lUJiwP+YlJEPCGAAfkv0JPSZgS/T2JOI2eUayALIWl5Khzu207nv/SK7l2SFZubLH3WKQYSqZbQWfp6QpeauBp3S7fRBoWLWDoTdtlmm8V4MLLHiiN7NfcxSZZbf03w8jdBRKtCwzez4p6IzFX2/WOL8WmxQZnc7NSFNuGYfTEb0JClWJ/xnmIfExEUlpmLv3iennT/B7hEB2O7aoM369N1wdlwiLBROQFtAb3+XEzcvYgMaEPR/kMO0KEw= X-Forefront-Antispam-Report: CIP:192.88.168.50; CTRY:US; IPV:NLI; EFV:NLI; SFV:NSPM; SFS:(10019020)(6009001)(2980300002)(448002)(189002)(199003)(106466001)(43066003)(49486002)(5003940100001)(85326001)(50986999)(33646002)(76176999)(2950100001)(77096005)(1220700001)(1096002)(2351001)(229853001)(47776003)(53806999)(19580405001)(575784001)(19580395003)(86362001)(50226001)(87936001)(104016004)(5008740100001)(81156007)(6806005)(586003)(50466002)(97736004)(36756003)(4001430100002)(48376002)(189998001)(5001960100002)(110136002)(107886002)(2004002); DIR:OUT; SFP:1102; SCL:1; SRVR:DM2PR03MB511; H:tx30smr01.am.freescale.net; FPR:; SPF:PermError; PTR:InfoDomainNonexistent; MX:1; A:1; LANG:en; MIME-Version: 1.0 X-Microsoft-Exchange-Diagnostics: 1; DM2PR03MB511; 2:Szr5lOqvQ9eUGf3CT5ZMUfJN+y4YyEGnRzGtyXHLXUQP4c2kCe91I2C1+QtJICfcEa6CepXxEoC4609h8hiGXz/m5kLuv7xUIACeZ7gBi7S4XgYsMSBlslzBX1s81V1NEbyE1IuIwr4/HVbinIj3kw==; 3:LB8ix2VJ/rcDFZbQcdQ9EhX+LN9JXDgbYh50elhwUxQnYnZoBwfKgl2p65OJJZ8C3p6qppZzRiy2YKDmPDkoI+ETBxb9Fwpoe4KwF8acJJyfvebNRQiHQ3nyY6B9DI6xz2sL9/N/TnIZBRtGnkSYzKHi0znTDgqtJ3pFJ8meholYin+KARx6AMKCiBsBqSx3++csn0yiEEo0BEYCF9DDl7klihgJhh0Z8BD1rwdfp8s=; 25:0ngu1f9JIajHBPdwpRJJbwq0DDpsmf0xKYNp0Q66XgQ7XmtNCRwcA0S1NLqKtwWdwTn4NR+5z3hEBWJTmKI6nnsmBpdltFU8VFZ7uEeBS1AV0d1iNQFwnWN+CNEWhwrlG/8sFA+aFE3AGINndaBd6jot6oWcyJWchrEctwtJf/S+sZOwYjuu+JMJY/dum9dhHA/Hh18Nr5GrawC9cttoNKs+Xhkn5sWJQ6HBLv5qzdoOfvmi8AwUQYWc1Y9aP01YjjWE8dDPEIlt3MrE7jcZlA== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DM2PR03MB511; X-Microsoft-Exchange-Diagnostics: 1; DM2PR03MB511; 20:6cBvLLFxnJkpKEhrcGXIw0cqavFuNAgGD2eowRP4/AEwteLQKZ8z1QALvrlCW/U4dvgQVBnwvT5jO4EOcw1Gd0YeZ6XPUn9v+vc0J3c/rfchBxi3AWqI9GjN3Ok6NJBgzu5Q2a0RhFazFgDUtBQuiiG9S39qzMvKmauB335hW6xlWmOLnuSpnbnozYtgfrCnjagZkQKS+d77DoL6SRKVCES7AZkkHY1a21DdW8SJgLO1PQQ4ZK2HwxNBweVt7mjU2atzn/6BsHTi3TtgullFmRu478K/IUNQpU0nTUD8vottISFTuybPzInd/M9cOZDqJyiEaVep9Wkiqq8nWd99pfou7Dx4TzI29JFhou4lWl8=; 4:1lE/iuTvAg1bYAyJoQs6xDT4tzppCTr2jqEoRLU+mdkR/fL/uPHDUwqpyuerRT2T8P+dVhiDyDaHrNBqcSUPd8IC3o3EotaFagQz/TALXKxmECU7+4kv5v26D5NYNpZIkcXloRfO0HtFFs5QGpuU5xd7NKA9CiXxL31oKN4lMY320+GUy+m91frh2s1H//1GP4BlKbVzlRiq/YL1ckIKpfk/n/cc7eHlU1AepwYBbNwKphE4N/bp+zQ4A0wV5LqLuSzAvTHc/ybucfuYSRaP66VpOtyiuQHsRIGGuTl5WGrEzCF+SWE46v41jIsVKGAsLFNJQ2DQ74wumYm5KcdDPt1D4xZOVqI8j+f3tVs1Zm/U3C7DluMpa3czPd5uxOD/JBsb6upY1BZ4GIcaX2/GjFlfAZ4IgPrGzWGwyhpa0wwvmw23TyUjDeDlrob4hzOU X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(101931422205132); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(5005006)(8121501046)(520078)(3002001)(10201501046); SRVR:DM2PR03MB511; BCL:0; PCL:0; RULEID:; SRVR:DM2PR03MB511; X-Forefront-PRVS: 077929D941 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DM2PR03MB511; 23:wIx821nmwoY5ihFh6tAhGKnzJ4NeeqJU+cFcE2ieLA?= =?us-ascii?Q?pO0siv33cA4A8aOvCmXOFBFTqplkKyuVA5txyXZ50egkAAyjP0P1njQzP89b?= =?us-ascii?Q?S8POKkiB8WpitIk4LmzRuzwTyd3lTNchCDdFB8Durttdx67Au3I+Yn1wamEk?= =?us-ascii?Q?lbyZZEvS0DREeIB+hdRW0TYi+gh7Tcb9RuP7X0+MDKymyc8On6k5TiH1ZotW?= =?us-ascii?Q?kSeKSiWk3QNUwdGB8vgieksXJKPr3fdx0hIRwKU+Z0EKA3a7HlMK8+5fh8g0?= =?us-ascii?Q?/EBibSSRFug9d0HzWpdxlVSoa865asNmnh/vbkhaPRgs8Gh8ESwlepgppeoV?= =?us-ascii?Q?t+mYtft9FiiVqmcZ6wK0rMZ0R3GN0CINdRK5SjdiVsWuoEWOCQzebGUQPVVM?= =?us-ascii?Q?JyemwAy5oktI7sbOQwbM3ghzP03mpPs3n8p1st2WX4wSbNLSmY4ynzNNuLcx?= =?us-ascii?Q?zdR9IJLbb61nW/W2pnwnBG2lpTbsTyjaTtGCFtRsgqCctA+sjkAENuDM4bFC?= =?us-ascii?Q?nnJFL1fhzlnH+1Efvq7bb/nFLpjxpnD4x+Qw5Ufgj4IoKwmgseuOiXhs51eZ?= =?us-ascii?Q?+GsSJibpiLpkkj/uIBY7XzDh85ZuUfeqo6oUWHge5DsUGtSurre3wObyzwSx?= =?us-ascii?Q?yCqfHkqFYCdVZmwvEziR7ZhOjoHPgMVSsdoy0EYM1EcO+3CNGv5zqSrQ3N+Z?= =?us-ascii?Q?C879itwa282QBCF3g6IfUmJ/nVuMXUnh+xAXSIMsGy/yE0prINjEw6B6zMGX?= =?us-ascii?Q?W7GLz+9KyRrF/Kf7jlpUXa/E0rUDKpNwxp84OHsSjgGqWXEFsI7xTaM7w8yA?= =?us-ascii?Q?dyKYXghNjjDx4RO35qikCObxrJ4+rJLh8d0UEZ/wsspefMw5bdenXlANSgUI?= =?us-ascii?Q?utNJrSGo6NtMEIDEcnkf9rredoHJOK2xpiDmrXJ0lZGQfnOH43UXj2K5zqzW?= =?us-ascii?Q?F3eo5A45yzJL+4kHgFi6mLZJK58i5Bs7BYiIyvZZUGs+1jU2aQqiY9/3IKDP?= =?us-ascii?Q?nOYr3wmiGSSbj6sJdRv1BkbSm7lKMbTJAag7gS5Z/4K+wir1wPiXLGYllFNk?= =?us-ascii?Q?GYO1NUZz/sp+2q43Agchu0Dcg6S2DZvXxpxyi6QJBJ1iG4UA=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; DM2PR03MB511; 5:2W3ommeNFjZT5yB4ui8nlmNkyacO6qAkZzUFtmUK7WyzLIxlDQxXfEZVOulCgQlLHynsLbl817wtr9HtXPjf8R813ZiBKUtrvUp3RznZw2Wtq2MVBN/q+jPWmHb92uhTlfy+MuEzSe9qgj4N6xq1Bw==; 24:sHBK7S3X8zGv0N3roKKyooHwq3lX2wjbIyTRox+Jg5zbYrO8h4dRJK5bVb24NAms3UqlAmoAqELd6n7psvjOnV9H3keSmhlVkz+lKNKz76k= X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Dec 2015 12:52:28.7048 (UTC) X-MS-Exchange-CrossTenant-Id: 710a03f5-10f6-4d38-9ff4-a80b81da590d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=710a03f5-10f6-4d38-9ff4-a80b81da590d; Ip=[192.88.168.50]; Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM2PR03MB511 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Export Frame Queue and Buffer Pool IDs through sysfs. Signed-off-by: Madalin Bucur --- drivers/net/ethernet/freescale/dpaa/Makefile | 2 +- drivers/net/ethernet/freescale/dpaa/dpaa_eth.c | 2 + drivers/net/ethernet/freescale/dpaa/dpaa_eth.h | 3 + .../net/ethernet/freescale/dpaa/dpaa_eth_common.c | 2 + .../net/ethernet/freescale/dpaa/dpaa_eth_sysfs.c | 167 +++++++++++++++++++++ 5 files changed, 175 insertions(+), 1 deletion(-) create mode 100644 drivers/net/ethernet/freescale/dpaa/dpaa_eth_sysfs.c diff --git a/drivers/net/ethernet/freescale/dpaa/Makefile b/drivers/net/ethernet/freescale/dpaa/Makefile index 9b75d52..141ade4 100644 --- a/drivers/net/ethernet/freescale/dpaa/Makefile +++ b/drivers/net/ethernet/freescale/dpaa/Makefile @@ -8,4 +8,4 @@ ccflags-y += -I$(FMAN) obj-$(CONFIG_FSL_DPAA_ETH) += fsl_dpa.o -fsl_dpa-objs += dpaa_eth.o dpaa_eth_sg.o dpaa_eth_common.o dpaa_ethtool.o +fsl_dpa-objs += dpaa_eth.o dpaa_eth_sg.o dpaa_eth_common.o dpaa_ethtool.o dpaa_eth_sysfs.o diff --git a/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c b/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c index f71a0d2..7d4d21a 100644 --- a/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c +++ b/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c @@ -691,6 +691,8 @@ static int dpaa_eth_probe(struct platform_device *pdev) if (err < 0) goto netdev_init_failed; + dpaa_eth_sysfs_init(&net_dev->dev); + netif_info(priv, probe, net_dev, "Probed interface %s\n", net_dev->name); diff --git a/drivers/net/ethernet/freescale/dpaa/dpaa_eth.h b/drivers/net/ethernet/freescale/dpaa/dpaa_eth.h index 076d66a..9651e24 100644 --- a/drivers/net/ethernet/freescale/dpaa/dpaa_eth.h +++ b/drivers/net/ethernet/freescale/dpaa/dpaa_eth.h @@ -356,6 +356,9 @@ static inline u16 dpa_get_headroom(struct dpa_buffer_layout *bl) return bl->data_align ? ALIGN(headroom, bl->data_align) : headroom; } +void dpaa_eth_sysfs_remove(struct device *dev); +void dpaa_eth_sysfs_init(struct device *dev); + void dpa_napi_del(struct net_device *net_dev); static inline void clear_fd(struct qm_fd *fd) diff --git a/drivers/net/ethernet/freescale/dpaa/dpaa_eth_common.c b/drivers/net/ethernet/freescale/dpaa/dpaa_eth_common.c index 2a7cff2..3003832 100644 --- a/drivers/net/ethernet/freescale/dpaa/dpaa_eth_common.c +++ b/drivers/net/ethernet/freescale/dpaa/dpaa_eth_common.c @@ -330,6 +330,8 @@ int dpa_remove(struct platform_device *pdev) priv = netdev_priv(net_dev); + dpaa_eth_sysfs_remove(dev); + dev_set_drvdata(dev, NULL); unregister_netdev(net_dev); diff --git a/drivers/net/ethernet/freescale/dpaa/dpaa_eth_sysfs.c b/drivers/net/ethernet/freescale/dpaa/dpaa_eth_sysfs.c new file mode 100644 index 0000000..56588e0 --- /dev/null +++ b/drivers/net/ethernet/freescale/dpaa/dpaa_eth_sysfs.c @@ -0,0 +1,167 @@ +/* Copyright 2008-2015 Freescale Semiconductor Inc. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Freescale Semiconductor nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * + * ALTERNATIVELY, this software may be distributed under the terms of the + * GNU General Public License ("GPL") as published by the Free Software + * Foundation, either version 2 of that License or (at your option) any + * later version. + * + * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include "dpaa_eth.h" +#include "mac.h" + +static ssize_t dpaa_eth_show_addr(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct dpa_priv *priv = netdev_priv(to_net_dev(dev)); + struct mac_device *mac_dev = priv->mac_dev; + + if (mac_dev) + return sprintf(buf, "%llx", + (unsigned long long)mac_dev->res->start); + else + return sprintf(buf, "none"); +} + +static ssize_t dpaa_eth_show_fqids(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct dpa_priv *priv = netdev_priv(to_net_dev(dev)); + ssize_t bytes = 0; + int i = 0; + char *str; + struct dpa_fq *fq; + struct dpa_fq *tmp; + struct dpa_fq *prev = NULL; + u32 first_fqid = 0; + u32 last_fqid = 0; + char *prevstr = NULL; + + list_for_each_entry_safe(fq, tmp, &priv->dpa_fq_list, list) { + switch (fq->fq_type) { + case FQ_TYPE_RX_DEFAULT: + str = "Rx default"; + break; + case FQ_TYPE_RX_ERROR: + str = "Rx error"; + break; + case FQ_TYPE_TX_CONFIRM: + str = "Tx default confirmation"; + break; + case FQ_TYPE_TX_CONF_MQ: + str = "Tx confirmation (mq)"; + break; + case FQ_TYPE_TX_ERROR: + str = "Tx error"; + break; + case FQ_TYPE_TX: + str = "Tx"; + break; + default: + str = "Unknown"; + } + + if (prev && (abs(fq->fqid - prev->fqid) != 1 || + str != prevstr)) { + if (last_fqid == first_fqid) + bytes += sprintf(buf + bytes, + "%s: %d\n", prevstr, prev->fqid); + else + bytes += sprintf(buf + bytes, + "%s: %d - %d\n", prevstr, + first_fqid, last_fqid); + } + + if (prev && abs(fq->fqid - prev->fqid) == 1 && + str == prevstr) { + last_fqid = fq->fqid; + } else { + first_fqid = fq->fqid; + last_fqid = fq->fqid; + } + + prev = fq; + prevstr = str; + i++; + } + + if (prev) { + if (last_fqid == first_fqid) + bytes += sprintf(buf + bytes, "%s: %d\n", prevstr, + prev->fqid); + else + bytes += sprintf(buf + bytes, "%s: %d - %d\n", prevstr, + first_fqid, last_fqid); + } + + return bytes; +} + +static ssize_t dpaa_eth_show_bpids(struct device *dev, + struct device_attribute *attr, char *buf) +{ + ssize_t bytes = 0; + struct dpa_priv *priv = netdev_priv(to_net_dev(dev)); + struct dpa_bp *dpa_bp = priv->dpa_bp; + int i = 0; + + for (i = 0; i < priv->bp_count; i++) + bytes += snprintf(buf + bytes, PAGE_SIZE - bytes, "%u\n", + dpa_bp[i].bpid); + + return bytes; +} + +static struct device_attribute dpaa_eth_attrs[] = { + __ATTR(device_addr, S_IRUGO, dpaa_eth_show_addr, NULL), + __ATTR(fqids, S_IRUGO, dpaa_eth_show_fqids, NULL), + __ATTR(bpids, S_IRUGO, dpaa_eth_show_bpids, NULL), +}; + +void dpaa_eth_sysfs_init(struct device *dev) +{ + int i; + + for (i = 0; i < ARRAY_SIZE(dpaa_eth_attrs); i++) + if (device_create_file(dev, &dpaa_eth_attrs[i])) { + dev_err(dev, "Error creating sysfs file\n"); + while (i > 0) + device_remove_file(dev, &dpaa_eth_attrs[--i]); + return; + } +} + +void dpaa_eth_sysfs_remove(struct device *dev) +{ + int i; + + for (i = 0; i < ARRAY_SIZE(dpaa_eth_attrs); i++) + device_remove_file(dev, &dpaa_eth_attrs[i]); +}