From patchwork Fri Jan 18 16:15:59 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ioana Ciornei X-Patchwork-Id: 1027529 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@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; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="I7u0xhOP"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43h5fG36gbz9sBn for ; Sat, 19 Jan 2019 03:16:06 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727770AbfARQQF (ORCPT ); Fri, 18 Jan 2019 11:16:05 -0500 Received: from mail-eopbgr80078.outbound.protection.outlook.com ([40.107.8.78]:3674 "EHLO EUR04-VI1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727490AbfARQQE (ORCPT ); Fri, 18 Jan 2019 11:16:04 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ndkf7RbStx4uMXZx0VJYpxH/ObUgm1U9urbCSlJQqqg=; b=I7u0xhOPXK+JNZqG1VZSJeBpWZKjCuaGy14qsLQEoh1pHleEZNdcRc3V1e/EkXE4sHClp4hX2ZO0LmwDvaQ0sG/jRvACynSpp3fJC+MDhp1pQ9/DzE1nrgbB8C0IdeOqa6iG0Tf4ZvLabRjDi0cziEcw1QafEop1Cwj5RSkeH+Q= Received: from VI1PR0402MB2800.eurprd04.prod.outlook.com (10.172.255.18) by VI1PR0402MB3471.eurprd04.prod.outlook.com (52.134.3.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1537.27; Fri, 18 Jan 2019 16:15:59 +0000 Received: from VI1PR0402MB2800.eurprd04.prod.outlook.com ([fe80::8c7b:7d91:36c7:1426]) by VI1PR0402MB2800.eurprd04.prod.outlook.com ([fe80::8c7b:7d91:36c7:1426%7]) with mapi id 15.20.1537.018; Fri, 18 Jan 2019 16:15:59 +0000 From: Ioana Ciornei To: "davem@davemloft.net" CC: "netdev@vger.kernel.org" , Ioana Ciocoi Radulescu , Ioana Ciornei Subject: [PATCH net-next v2 1/2] dpaa2-eth: transform dpaa2_eth_queue_count into a macro Thread-Topic: [PATCH net-next v2 1/2] dpaa2-eth: transform dpaa2_eth_queue_count into a macro Thread-Index: AQHUr0kZJ2S+wSZMUUagT8Bu2lRw9g== Date: Fri, 18 Jan 2019 16:15:59 +0000 Message-ID: <1547828144-2654-2-git-send-email-ioana.ciornei@nxp.com> References: <1547828144-2654-1-git-send-email-ioana.ciornei@nxp.com> In-Reply-To: <1547828144-2654-1-git-send-email-ioana.ciornei@nxp.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM5PR0202CA0006.eurprd02.prod.outlook.com (2603:10a6:203:69::16) To VI1PR0402MB2800.eurprd04.prod.outlook.com (2603:10a6:800:ad::18) authentication-results: spf=none (sender IP is ) smtp.mailfrom=ioana.ciornei@nxp.com; x-ms-exchange-messagesentrepresentingtype: 1 x-mailer: git-send-email 1.9.1 x-originating-ip: [86.34.165.90] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; VI1PR0402MB3471; 6:RxM0HSqWRY8XLn+PsY5c4qiWNQuape1RKo0/3Tn/yom2ZFjb+yInj76tZHm7vj2t5Hx15V9F8eJDh/GlHYshqQyCrGs2OeanRW7eRIfBIhJiYsrzhbM1OuxZriQIfbrlYBDWNd3DmqAto0qz3QUvix/DO/3hs4cl1Gn2mmAIMjPgvMxnL/woy+AKk+bBy0pf3G97wtcWoeszmS+EBkGC2XneCqBfDzpqeWJSP4a+PvDHCi4qUKqxOO1D4frskP7QraUDRK5Eh4VzSc2TLGsOmIeSMX6Mb4jKZDMw6syg/MOANzUFx/R0OoW+zDxVU92+SdUo5WpDvqJQiOP7Jii2iKN0JuPWkfUvY/fmEginXz2BiTm0SjiYKK6yWtV/wq883eNFk0uYnzpqBPf9eCacOWbjsHadbxe/jUD4bb8a4kgTJCChmFi2JjLqBlQDn2k06tWfy/6yzJlaQmi3Ip6CmQ==; 5:AYSBT1jHLbTpzmvo+TtkEUHYa8XgF9O0Lb93hm54QwuxrsfXLpBOhYoS2QXtjqa5MipSozHXSKufFAoiZjiDO/orCaSAiJbdn89mRrkzU9hEWO27upZi7txg5terrm7gdewK0Lfi/BDO1Sj+lHt8x1qq9GtgLD2AIzsctsELS5zy6p+ElkXx7BizYp8J9Z3jeP5UUrKfEbqBoD/Shu9XCA==; 7:JkeSaqZ0fhPOzjMGkJV8Hz73T9Jvz1oVUzvPMVXp6LRrAlMLkga/yFAMaHOs0mKYyD/Lz+QEUo0naOk9OeKtO7IRy90iJOyHxVP0E5WlOsTFD/XRa7hT+60oW3teIMpA3T446VgCyWXXrVAXAEFxMA== x-ms-office365-filtering-correlation-id: 9b9ad13b-c4f4-44cf-7afd-08d67d603bd0 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600109)(711020)(4618075)(2017052603328)(7153060)(7193020); SRVR:VI1PR0402MB3471; x-ms-traffictypediagnostic: VI1PR0402MB3471: x-microsoft-antispam-prvs: x-forefront-prvs: 0921D55E4F x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(136003)(346002)(396003)(376002)(39860400002)(366004)(189003)(199004)(6512007)(3846002)(6116002)(4326008)(44832011)(7736002)(316002)(5660300001)(52116002)(99286004)(36756003)(386003)(54906003)(86362001)(76176011)(305945005)(6506007)(478600001)(14454004)(6916009)(97736004)(25786009)(53936002)(50226002)(102836004)(6486002)(81156014)(256004)(2351001)(71200400001)(2501003)(1730700003)(66066001)(8676002)(81166006)(68736007)(2906002)(71190400001)(26005)(8936002)(186003)(11346002)(446003)(486006)(2616005)(476003)(105586002)(5640700003)(106356001)(6436002); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR0402MB3471; H:VI1PR0402MB2800.eurprd04.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: Er7pLi3R9ZsYJ+9xuzVuqYR5Eq+diMlo9a/IgMzw0cg8yN+/vv4k5aug4sjAwkSY0gXJaonVo/i12+rYwpuNtrMbtazPGfku9H6UU0MCrNbQ+cx87HsBOi2q5gPC/dwQJg3DRDRX+BiGq/pIB//WgcTrnOj8OCSLjrbCxyE1tG1jm+srLW9PBEl3tCdycJNx0ib7sVDi38Q2ovwnktz1LU4pTDSAJZhDGxeL0xAkpaeg2iUaRtR8cHbtuGoDH7CWoZx1rmqBm4b1kGs384adPmICHtQbTsDslz5JiS1ZSHgujsBguJVObNwnETCs8S51/i5tT2CZEUOAiC/ZmQ4VtvEcYJQn+x4OJF23Z9bZoXDajPJqa1FifusXsuecGMhSqNm2HgsBb/et7r4Mz8xactkZ0VoJR8UYxfsAAvVquYQ= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9b9ad13b-c4f4-44cf-7afd-08d67d603bd0 X-MS-Exchange-CrossTenant-originalarrivaltime: 18 Jan 2019 16:15:58.9101 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0402MB3471 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Transform dpaa2_eth_queue_count into a macro to follow the the convention used by dpaa2_eth_fs_count and other functions. Signed-off-by: Ioana Ciornei --- Changes in v2: - none drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h index 69c965d..308aae6 100644 --- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h +++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h @@ -405,6 +405,10 @@ static inline int dpaa2_eth_cmp_dpni_ver(struct dpaa2_eth_priv *priv, #define dpaa2_eth_fs_count(priv) \ ((priv)->dpni_attrs.fs_entries) +/* We have exactly one {Rx, Tx conf} queue per channel */ +#define dpaa2_eth_queue_count(priv) \ + ((priv)->num_channels) + enum dpaa2_eth_rx_dist { DPAA2_ETH_RX_DIST_HASH, DPAA2_ETH_RX_DIST_CLS @@ -447,12 +451,6 @@ static inline unsigned int dpaa2_eth_rx_head_room(struct dpaa2_eth_priv *priv) DPAA2_ETH_RX_HWA_SIZE; } -/* We have exactly one {Rx, Tx conf} queue per channel */ -static int dpaa2_eth_queue_count(struct dpaa2_eth_priv *priv) -{ - return priv->num_channels; -} - int dpaa2_eth_set_hash(struct net_device *net_dev, u64 flags); int dpaa2_eth_cls_key_size(void); int dpaa2_eth_cls_fld_off(int prot, int field); From patchwork Fri Jan 18 16:16:00 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ioana Ciornei X-Patchwork-Id: 1027530 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@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; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="syjwtYLC"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43h5fK5hC4z9sBn for ; Sat, 19 Jan 2019 03:16:09 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727970AbfARQQI (ORCPT ); Fri, 18 Jan 2019 11:16:08 -0500 Received: from mail-eopbgr80078.outbound.protection.outlook.com ([40.107.8.78]:3674 "EHLO EUR04-VI1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727241AbfARQQI (ORCPT ); Fri, 18 Jan 2019 11:16:08 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=9Xgkgck+iXAy/nxicCR5KiLayV/NUtuI+R1VO6kCARQ=; b=syjwtYLCn+MIKyw8ThdYnHmmcHMaIQpeg3b16/tPLmHtDQfH0OFiYEdMAMwzUm/QHG1RPrBnLMM+lWWDCpO7i8hn0EIa6TaPji4Vo1y+JG15gkCIQcpF3HgHcZzp5Ezf0zX00J6l31LK0F31D+MdtL040qw2oUcnnxsmXPHBSMY= Received: from VI1PR0402MB2800.eurprd04.prod.outlook.com (10.172.255.18) by VI1PR0402MB3471.eurprd04.prod.outlook.com (52.134.3.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1537.27; Fri, 18 Jan 2019 16:16:00 +0000 Received: from VI1PR0402MB2800.eurprd04.prod.outlook.com ([fe80::8c7b:7d91:36c7:1426]) by VI1PR0402MB2800.eurprd04.prod.outlook.com ([fe80::8c7b:7d91:36c7:1426%7]) with mapi id 15.20.1537.018; Fri, 18 Jan 2019 16:16:00 +0000 From: Ioana Ciornei To: "davem@davemloft.net" CC: "netdev@vger.kernel.org" , Ioana Ciocoi Radulescu , Ioana Ciornei Subject: [PATCH net-next v2 2/2] dpaa2-eth: add debugfs statistics Thread-Topic: [PATCH net-next v2 2/2] dpaa2-eth: add debugfs statistics Thread-Index: AQHUr0kZnYkBPKu3jUu2KplHKx/l3g== Date: Fri, 18 Jan 2019 16:16:00 +0000 Message-ID: <1547828144-2654-3-git-send-email-ioana.ciornei@nxp.com> References: <1547828144-2654-1-git-send-email-ioana.ciornei@nxp.com> In-Reply-To: <1547828144-2654-1-git-send-email-ioana.ciornei@nxp.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM5PR0202CA0006.eurprd02.prod.outlook.com (2603:10a6:203:69::16) To VI1PR0402MB2800.eurprd04.prod.outlook.com (2603:10a6:800:ad::18) authentication-results: spf=none (sender IP is ) smtp.mailfrom=ioana.ciornei@nxp.com; x-ms-exchange-messagesentrepresentingtype: 1 x-mailer: git-send-email 1.9.1 x-originating-ip: [86.34.165.90] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; VI1PR0402MB3471; 6:z2B8ddyDg0dnBo9voAAPYclYMTVndugUUvnvXw5profdWrs7seE228yiXN4WvBMTDAMHbo4LTnMVD4Pl4nlFH0s8NgW6UcJh0ZbUVuyTcb/GXugHT0HJujPr/A8gz9d+Pv9aFsCXXurvghijClbh47GfEn9WXzzedX0W9vQIi9YDSSd9HTon5MkEj/aTCbXPplu+c/MNDswupOSeiEV5xv/RdBxC8REOxqyblVuVglm38bjcT58QLJnF8vzYiui6pdAflmAVHTHeeF79Rad1Ls7+kGyE36HCwPf1OA2WAW2ftORIDkpqb5O6Xq3QSQfsl5S2uXOPhV00U+9aExOFwy1yIeZSBsiK98cG/1CwIhCXPWOVqyYtsqNby/iG/osq40WTFkdZ18tatzSKCDh74DUd3c2EMFquCQyDlroO8xGOp02/Jtu4GabRL/NioJoGJGw2CdFBnccsnizBSaK0vw==; 5:KzPZXXi8sEdbJY37bK7obXb5d/c7rNknpl3wvBE0Cu7Iw2fVCIqAD5APCrXid0nMQUNgb/OXBdx9iccOsAvjAIvkag8SMLby+2YBUCSBwBSm68g0hNbn3GFOP8cwIOM6Qg5j8urWlkAV20cwLdqvPO5Q3xrHPPw0m/xuYj6CKYvP4VRTqLKCtk7wglxHn1K1tQ5OiONCoHli/qxGw4e2UQ==; 7:KRi7G+ndLSXFQN5EWmP+BS7gJ+9XZDOLhfKvrqG41i2W2QjX3gzTzYoB0aEVOvvrOGnTaHWJpX32cCZN26IVRiXDuL/2n/DV0lNdDh/LiLAy6BFUZICdMnfuWgNhu0Uaath1XdIY+uQ3FSc01KZpuw== x-ms-office365-filtering-correlation-id: 882a775e-18ed-420a-d04e-08d67d603c53 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600109)(711020)(4618075)(2017052603328)(7153060)(7193020); SRVR:VI1PR0402MB3471; x-ms-traffictypediagnostic: VI1PR0402MB3471: x-microsoft-antispam-prvs: x-forefront-prvs: 0921D55E4F x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(136003)(346002)(396003)(376002)(39860400002)(366004)(189003)(199004)(6512007)(3846002)(6116002)(4326008)(44832011)(7736002)(316002)(5660300001)(52116002)(99286004)(36756003)(386003)(54906003)(86362001)(76176011)(305945005)(6506007)(478600001)(14454004)(6916009)(97736004)(25786009)(53936002)(50226002)(102836004)(6486002)(14444005)(81156014)(256004)(2351001)(71200400001)(2501003)(1730700003)(66066001)(8676002)(81166006)(68736007)(2906002)(71190400001)(26005)(8936002)(186003)(11346002)(446003)(486006)(2616005)(476003)(105586002)(30864003)(5640700003)(106356001)(6436002); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR0402MB3471; H:VI1PR0402MB2800.eurprd04.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: et/xm7lvrkyRwqW+5+57cFi0BsVePzfGacm0jBF4xcrxZOFQQxsD/7ZRtQhkPvZDcwKFHcMSoxZ1xmkgDBBg01b6llEMyCP/WjfsSahTOJ16te4rX4PGfA04l61KwEhsazmSmeIKcrthHU4OWTz4adXjzKWLkhqmsu/iuDRiM+Dv3PoDbsBZ7S3nbX8CN1rlWUPrQrrj6ALa//Nx57XXRGg4yZGvORET7sIqYzw6NfKjtOrVv+tDMedgIW1jlF/VJlr3XUfSKhuERxnV5Vwys9fCk8nf592MBj9aVPjXputezoVFUK3ujjNZQ+AzFtfkUlV0A3NRzHeWbQgLezxdOtD1Wxtps2jp3fNS+sGyEdDLedXf/EerKPwjfXlx5n3oryAI/Xyh+aeKMY0pBPFPXCeiSx8sW+snVL7N+0ucKIY= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 882a775e-18ed-420a-d04e-08d67d603c53 X-MS-Exchange-CrossTenant-originalarrivaltime: 18 Jan 2019 16:15:59.7258 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0402MB3471 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Ioana Radulescu Export detailed driver counters through debugfs. Statistics already available in ethtool are presented in a structured manner. Includes per-core, per-FQ and per-channel statistics. Also transition from module_fsl_mc_driver to explicit module_init/exit in order to create the debugfs directory besides registering the driver. Signed-off-by: Ioana Radulescu Signed-off-by: Ioana Ciornei --- Changes in v2: - remove the _exit annotation of dpaa2_eth_dbg_exit drivers/net/ethernet/freescale/dpaa2/Makefile | 1 + .../ethernet/freescale/dpaa2/dpaa2-eth-debugfs.c | 237 +++++++++++++++++++++ .../ethernet/freescale/dpaa2/dpaa2-eth-debugfs.h | 31 +++ drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c | 30 ++- drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h | 4 + 5 files changed, 302 insertions(+), 1 deletion(-) create mode 100644 drivers/net/ethernet/freescale/dpaa2/dpaa2-eth-debugfs.c create mode 100644 drivers/net/ethernet/freescale/dpaa2/dpaa2-eth-debugfs.h diff --git a/drivers/net/ethernet/freescale/dpaa2/Makefile b/drivers/net/ethernet/freescale/dpaa2/Makefile index 2f424e0..d1e78cd 100644 --- a/drivers/net/ethernet/freescale/dpaa2/Makefile +++ b/drivers/net/ethernet/freescale/dpaa2/Makefile @@ -7,6 +7,7 @@ obj-$(CONFIG_FSL_DPAA2_ETH) += fsl-dpaa2-eth.o obj-$(CONFIG_FSL_DPAA2_PTP_CLOCK) += fsl-dpaa2-ptp.o fsl-dpaa2-eth-objs := dpaa2-eth.o dpaa2-ethtool.o dpni.o +fsl-dpaa2-eth-${CONFIG_DEBUG_FS} += dpaa2-eth-debugfs.o fsl-dpaa2-ptp-objs := dpaa2-ptp.o dprtc.o # Needed by the tracing framework diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth-debugfs.c b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth-debugfs.c new file mode 100644 index 0000000..a027f4a --- /dev/null +++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth-debugfs.c @@ -0,0 +1,237 @@ +// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) +/* Copyright 2015 Freescale Semiconductor Inc. + * Copyright 2018-2019 NXP + */ +#include +#include +#include "dpaa2-eth.h" +#include "dpaa2-eth-debugfs.h" + +#define DPAA2_ETH_DBG_ROOT "dpaa2-eth" + +static struct dentry *dpaa2_dbg_root; + +static int dpaa2_dbg_cpu_show(struct seq_file *file, void *offset) +{ + struct dpaa2_eth_priv *priv = (struct dpaa2_eth_priv *)file->private; + struct rtnl_link_stats64 *stats; + struct dpaa2_eth_drv_stats *extras; + int i; + + seq_printf(file, "Per-CPU stats for %s\n", priv->net_dev->name); + seq_printf(file, "%s%16s%16s%16s%16s%16s%16s%16s%16s%16s\n", + "CPU", "Rx", "Rx Err", "Rx SG", "Tx", "Tx Err", "Tx conf", + "Tx SG", "Tx realloc", "Enq busy"); + + for_each_online_cpu(i) { + stats = per_cpu_ptr(priv->percpu_stats, i); + extras = per_cpu_ptr(priv->percpu_extras, i); + seq_printf(file, "%3d%16llu%16llu%16llu%16llu%16llu%16llu%16llu%16llu%16llu\n", + i, + stats->rx_packets, + stats->rx_errors, + extras->rx_sg_frames, + stats->tx_packets, + stats->tx_errors, + extras->tx_conf_frames, + extras->tx_sg_frames, + extras->tx_reallocs, + extras->tx_portal_busy); + } + + return 0; +} + +static int dpaa2_dbg_cpu_open(struct inode *inode, struct file *file) +{ + int err; + struct dpaa2_eth_priv *priv = (struct dpaa2_eth_priv *)inode->i_private; + + err = single_open(file, dpaa2_dbg_cpu_show, priv); + if (err < 0) + netdev_err(priv->net_dev, "single_open() failed\n"); + + return err; +} + +static const struct file_operations dpaa2_dbg_cpu_ops = { + .open = dpaa2_dbg_cpu_open, + .read = seq_read, + .llseek = seq_lseek, + .release = single_release, +}; + +static char *fq_type_to_str(struct dpaa2_eth_fq *fq) +{ + switch (fq->type) { + case DPAA2_RX_FQ: + return "Rx"; + case DPAA2_TX_CONF_FQ: + return "Tx conf"; + default: + return "N/A"; + } +} + +static int dpaa2_dbg_fqs_show(struct seq_file *file, void *offset) +{ + struct dpaa2_eth_priv *priv = (struct dpaa2_eth_priv *)file->private; + struct dpaa2_eth_fq *fq; + u32 fcnt, bcnt; + int i, err; + + seq_printf(file, "FQ stats for %s:\n", priv->net_dev->name); + seq_printf(file, "%s%16s%16s%16s%16s\n", + "VFQID", "CPU", "Type", "Frames", "Pending frames"); + + for (i = 0; i < priv->num_fqs; i++) { + fq = &priv->fq[i]; + err = dpaa2_io_query_fq_count(NULL, fq->fqid, &fcnt, &bcnt); + if (err) + fcnt = 0; + + seq_printf(file, "%5d%16d%16s%16llu%16u\n", + fq->fqid, + fq->target_cpu, + fq_type_to_str(fq), + fq->stats.frames, + fcnt); + } + + return 0; +} + +static int dpaa2_dbg_fqs_open(struct inode *inode, struct file *file) +{ + int err; + struct dpaa2_eth_priv *priv = (struct dpaa2_eth_priv *)inode->i_private; + + err = single_open(file, dpaa2_dbg_fqs_show, priv); + if (err < 0) + netdev_err(priv->net_dev, "single_open() failed\n"); + + return err; +} + +static const struct file_operations dpaa2_dbg_fq_ops = { + .open = dpaa2_dbg_fqs_open, + .read = seq_read, + .llseek = seq_lseek, + .release = single_release, +}; + +static int dpaa2_dbg_ch_show(struct seq_file *file, void *offset) +{ + struct dpaa2_eth_priv *priv = (struct dpaa2_eth_priv *)file->private; + struct dpaa2_eth_channel *ch; + int i; + + seq_printf(file, "Channel stats for %s:\n", priv->net_dev->name); + seq_printf(file, "%s%16s%16s%16s%16s\n", + "CHID", "CPU", "Deq busy", "CDANs", "Buf count"); + + for (i = 0; i < priv->num_channels; i++) { + ch = priv->channel[i]; + seq_printf(file, "%4d%16d%16llu%16llu%16d\n", + ch->ch_id, + ch->nctx.desired_cpu, + ch->stats.dequeue_portal_busy, + ch->stats.cdan, + ch->buf_count); + } + + return 0; +} + +static int dpaa2_dbg_ch_open(struct inode *inode, struct file *file) +{ + int err; + struct dpaa2_eth_priv *priv = (struct dpaa2_eth_priv *)inode->i_private; + + err = single_open(file, dpaa2_dbg_ch_show, priv); + if (err < 0) + netdev_err(priv->net_dev, "single_open() failed\n"); + + return err; +} + +static const struct file_operations dpaa2_dbg_ch_ops = { + .open = dpaa2_dbg_ch_open, + .read = seq_read, + .llseek = seq_lseek, + .release = single_release, +}; + +void dpaa2_dbg_add(struct dpaa2_eth_priv *priv) +{ + if (!dpaa2_dbg_root) + return; + + /* Create a directory for the interface */ + priv->dbg.dir = debugfs_create_dir(priv->net_dev->name, + dpaa2_dbg_root); + if (!priv->dbg.dir) { + netdev_err(priv->net_dev, "debugfs_create_dir() failed\n"); + return; + } + + /* per-cpu stats file */ + priv->dbg.cpu_stats = debugfs_create_file("cpu_stats", 0444, + priv->dbg.dir, priv, + &dpaa2_dbg_cpu_ops); + if (!priv->dbg.cpu_stats) { + netdev_err(priv->net_dev, "debugfs_create_file() failed\n"); + goto err_cpu_stats; + } + + /* per-fq stats file */ + priv->dbg.fq_stats = debugfs_create_file("fq_stats", 0444, + priv->dbg.dir, priv, + &dpaa2_dbg_fq_ops); + if (!priv->dbg.fq_stats) { + netdev_err(priv->net_dev, "debugfs_create_file() failed\n"); + goto err_fq_stats; + } + + /* per-fq stats file */ + priv->dbg.ch_stats = debugfs_create_file("ch_stats", 0444, + priv->dbg.dir, priv, + &dpaa2_dbg_ch_ops); + if (!priv->dbg.fq_stats) { + netdev_err(priv->net_dev, "debugfs_create_file() failed\n"); + goto err_ch_stats; + } + + return; + +err_ch_stats: + debugfs_remove(priv->dbg.fq_stats); +err_fq_stats: + debugfs_remove(priv->dbg.cpu_stats); +err_cpu_stats: + debugfs_remove(priv->dbg.dir); +} + +void dpaa2_dbg_remove(struct dpaa2_eth_priv *priv) +{ + debugfs_remove(priv->dbg.fq_stats); + debugfs_remove(priv->dbg.ch_stats); + debugfs_remove(priv->dbg.cpu_stats); + debugfs_remove(priv->dbg.dir); +} + +void dpaa2_eth_dbg_init(void) +{ + dpaa2_dbg_root = debugfs_create_dir(DPAA2_ETH_DBG_ROOT, NULL); + if (!dpaa2_dbg_root) { + pr_err("DPAA2-ETH: debugfs create failed\n"); + return; + } + + pr_debug("DPAA2-ETH: debugfs created\n"); +} + +void dpaa2_eth_dbg_exit(void) +{ + debugfs_remove(dpaa2_dbg_root); +} diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth-debugfs.h b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth-debugfs.h new file mode 100644 index 0000000..4f63de9 --- /dev/null +++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth-debugfs.h @@ -0,0 +1,31 @@ +/* SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) */ +/* Copyright 2015 Freescale Semiconductor Inc. + * Copyright 2018-2019 NXP + */ +#ifndef DPAA2_ETH_DEBUGFS_H +#define DPAA2_ETH_DEBUGFS_H + +#include + +struct dpaa2_eth_priv; + +struct dpaa2_debugfs { + struct dentry *dir; + struct dentry *fq_stats; + struct dentry *ch_stats; + struct dentry *cpu_stats; +}; + +#ifdef CONFIG_DEBUG_FS +void dpaa2_eth_dbg_init(void); +void dpaa2_eth_dbg_exit(void); +void dpaa2_dbg_add(struct dpaa2_eth_priv *priv); +void dpaa2_dbg_remove(struct dpaa2_eth_priv *priv); +#else +static inline void dpaa2_eth_dbg_init(void) {} +static inline void dpaa2_eth_dbg_exit(void) {} +static inline void dpaa2_dbg_add(struct dpaa2_eth_priv *priv) {} +static inline void dpaa2_dbg_remove(struct dpaa2_eth_priv *priv) {} +#endif /* CONFIG_DEBUG_FS */ + +#endif /* DPAA2_ETH_DEBUGFS_H */ diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c index ecf9218..04925c7 100644 --- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c +++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c @@ -3083,6 +3083,10 @@ static int dpaa2_eth_probe(struct fsl_mc_device *dpni_dev) goto err_netdev_reg; } +#ifdef CONFIG_DEBUG_FS + dpaa2_dbg_add(priv); +#endif + dev_info(dev, "Probed interface %s\n", net_dev->name); return 0; @@ -3126,6 +3130,9 @@ static int dpaa2_eth_remove(struct fsl_mc_device *ls_dev) net_dev = dev_get_drvdata(dev); priv = netdev_priv(net_dev); +#ifdef CONFIG_DEBUG_FS + dpaa2_dbg_remove(priv); +#endif unregister_netdev(net_dev); if (priv->do_link_poll) @@ -3170,4 +3177,25 @@ static int dpaa2_eth_remove(struct fsl_mc_device *ls_dev) .match_id_table = dpaa2_eth_match_id_table }; -module_fsl_mc_driver(dpaa2_eth_driver); +static int __init dpaa2_eth_driver_init(void) +{ + int err; + + dpaa2_eth_dbg_init(); + err = fsl_mc_driver_register(&dpaa2_eth_driver); + if (err) { + dpaa2_eth_dbg_exit(); + return err; + } + + return 0; +} + +static void __exit dpaa2_eth_driver_exit(void) +{ + dpaa2_eth_dbg_exit(); + fsl_mc_driver_unregister(&dpaa2_eth_driver); +} + +module_init(dpaa2_eth_driver_init); +module_exit(dpaa2_eth_driver_exit); diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h index 308aae6..31fe486 100644 --- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h +++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h @@ -16,6 +16,7 @@ #include "dpni-cmd.h" #include "dpaa2-eth-trace.h" +#include "dpaa2-eth-debugfs.h" #define DPAA2_WRIOP_VERSION(x, y, z) ((x) << 10 | (y) << 5 | (z) << 0) @@ -365,6 +366,9 @@ struct dpaa2_eth_priv { struct dpaa2_eth_cls_rule *cls_rules; u8 rx_cls_enabled; struct bpf_prog *xdp_prog; +#ifdef CONFIG_DEBUG_FS + struct dpaa2_debugfs dbg; +#endif }; #define DPAA2_RXH_SUPPORTED (RXH_L2DA | RXH_VLAN | RXH_L3_PROTO \