From patchwork Mon Sep 24 15:36:21 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ioana Radulescu X-Patchwork-Id: 973962 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="MQzrmUBm"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 42JpG40Gsxz9s9N for ; Tue, 25 Sep 2018 01:36:28 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730558AbeIXVjK (ORCPT ); Mon, 24 Sep 2018 17:39:10 -0400 Received: from mail-eopbgr80043.outbound.protection.outlook.com ([40.107.8.43]:32112 "EHLO EUR04-VI1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727770AbeIXVjK (ORCPT ); Mon, 24 Sep 2018 17:39:10 -0400 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=X7sTjNjMI59fdLpPLy6wwcjpD4HDTHgEfJ/GNyJlVZQ=; b=MQzrmUBmkDe3vheHgrR3DrMaGOeR/P7yySkoJ0Pzi/gRLdeIqfvRMcZ1H8ZGjZGl1LnZ2/3L6Z0Vu5j14nk73ejYsdms1/zL85M45xmPaxJdrKVs9VXd/dGtkJBXqbysRe4bC4E1ma9CNWfyZB8bm1mWvX7WJVhWRnL4TTtjUEM= Received: from AM3PR04MB338.eurprd04.prod.outlook.com (10.242.110.15) by AM3PR04MB1427.eurprd04.prod.outlook.com (10.163.185.157) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1164.20; Mon, 24 Sep 2018 15:36:21 +0000 Received: from AM3PR04MB338.eurprd04.prod.outlook.com ([fe80::4d4f:8d48:5ee1:6273]) by AM3PR04MB338.eurprd04.prod.outlook.com ([fe80::4d4f:8d48:5ee1:6273%4]) with mapi id 15.20.1164.017; Mon, 24 Sep 2018 15:36:21 +0000 From: Ioana Ciocoi Radulescu To: "davem@davemloft.net" CC: "netdev@vger.kernel.org" , Ioana Ciornei Subject: [PATCH net-next] dpaa2-eth: Make Rx flow hash key configurable Thread-Topic: [PATCH net-next] dpaa2-eth: Make Rx flow hash key configurable Thread-Index: AQHUVBxXpkaO178BSUu9nbBS/oz1RA== Date: Mon, 24 Sep 2018 15:36:21 +0000 Message-ID: <20180924153611.25179-1-ruxandra.radulescu@nxp.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN4PR0201CA0065.namprd02.prod.outlook.com (2603:10b6:803:20::27) To AM3PR04MB338.eurprd04.prod.outlook.com (2a01:111:e400:881e::15) authentication-results: spf=none (sender IP is ) smtp.mailfrom=ruxandra.radulescu@nxp.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [64.157.242.222] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; AM3PR04MB1427; 6:wAi7j8pZTydbLhEUfwCdcJbpTAneyz0rkEjEeAjQkeUMfOot3T01op+4OjBhJ/O5CzHswbztrKpbq+puK+hsVNF+JdeHceGHGi2uUgalo9anbmYhW1ggvvWC19dJEoEhqWaR4jXWHsvgMIVks6ZLVESSNHi/Dr8/Eur4XXoOPWP/FNDbaUlV1Y8j8OmpHmy7x/v270pcZ4ShP1YJe2gioDDntuA/OmRtEveclf4zqTMYeXHFheOxVEF7I7kcV7qFbs5gIf+5grd5JaVrz/IiWJdiJ8MlLI1uab1yfemzk/ZWOWl0aRbXM1lLpOznPg/AtMaskTPOvmzY7OyEw5O8bGcI61XfXRZ7zufbYAuOEY9oIdtRgvxcKwCERgqG0Z3EVdH9tZsnHFSKpaxdbC7Caemdqt+/mJUmjClo9AzBEpVAwhXsyPwTJ0J3EbuXIkahxHYJZsI/NZ1C8M9s0RIQWg==; 5:/cUCBLYo9xklcXpHPI+iBPgnnyrRUbCBRgs76e/JMHI0Z081hIeFptQJehOyWt1cAgfyj8cq8dcKu36pPef0RC4gCkLIBqdcT+8VZcBGHq41uS1nQTc8/hU4jgIP5Ol6ctE1uKrVu5TWMOiXpO2d3taVGyp5LdbJ4GlKW0FxCwc=; 7:zzRkreyruOLQVgpnz+yoWzSgE3P/ItE68I6SimCPiSOhBLkhFvQA7cMoex7MGxncCD7Hb8yd71Elut4iIDHNzdnrRY4r14YfbV83AV37fWS1JLXTUtLLDN9v45nGMiov3l+7NwbEl6ZnvVAFN+Jh8QDUG9liTlX0R6ggPPMO8NjC3IAbXS0NCNC4lqoLcmg5WQfk4cTWWRllxI4CCZgr/0M9Z4qBfBO4TU8LmJ4c/t05Y+CUa3kvTUGApFNEGYWa x-ms-office365-filtering-correlation-id: 4b3c77be-aa7b-4317-f956-08d622337a24 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989299)(4534165)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(4618075)(2017052603328)(7153060)(7193020); SRVR:AM3PR04MB1427; x-ms-traffictypediagnostic: AM3PR04MB1427: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(185117386973197); x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(10201501046)(3231355)(944501410)(52105095)(3002001)(93006095)(93001095)(6055026)(149066)(150027)(6041310)(20161123558120)(20161123564045)(20161123560045)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(201708071742011)(7699051); SRVR:AM3PR04MB1427; BCL:0; PCL:0; RULEID:; SRVR:AM3PR04MB1427; x-forefront-prvs: 0805EC9467 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(136003)(366004)(396003)(376002)(39860400002)(346002)(199004)(189003)(106356001)(52116002)(26005)(5640700003)(4326008)(6916009)(102836004)(71190400001)(71200400001)(6116002)(3846002)(86362001)(1076002)(305945005)(66066001)(7736002)(97736004)(105586002)(36756003)(186003)(476003)(2616005)(5660300001)(8676002)(81156014)(1730700003)(81166006)(386003)(6506007)(478600001)(5250100002)(68736007)(575784001)(54906003)(14454004)(2906002)(25786009)(6436002)(53936002)(316002)(6486002)(2351001)(8936002)(2900100001)(486006)(2501003)(6512007)(256004)(99286004); DIR:OUT; SFP:1101; SCL:1; SRVR:AM3PR04MB1427; H:AM3PR04MB338.eurprd04.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: SEOR7MSkGEjCIUvWMD0fLZ7Zj/UfMIC4q55sUfk69zv/GmfaLo0L5pyPOVC4utYlRYx6r8ZuQNNOhJ3dJewYk6c3f0JqviWd/5PxKCMIEcW4LEYGUTDC9jolbqAgxmvKq5NHc5u5MJLF/RjvGJwVAOrvyzeyyPxLHgdtpzLX5V+1YpxXir4BytEj9ORc4U6pGoow3JuoX0QSZ0VljLmj9b/eZP11rVICBsNZyefCAAHMiNVSuyz1aYiWQ0vV8YxHb1b+nJ/ZypUWhEvuPm/NFCun1TvMLJ6K8JvjydEjCmgTCW75PcdlyqNoPlhkeWm5yPJN73dd6fr+/f+xgNfXr8BkDhOqUTJ+IR+jshN5Xd0= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4b3c77be-aa7b-4317-f956-08d622337a24 X-MS-Exchange-CrossTenant-originalarrivaltime: 24 Sep 2018 15:36:21.2527 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM3PR04MB1427 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Until now, the Rx flow hash key was a 5-tuple (IP src, IP dst, IP nextproto, L4 src port, L4 dst port) fixed value that we configured at probe. Add support for configuring this hash key at runtime. We support all standard header fields configurable through ethtool, but cannot differentiate between flow types, so the same hash key is applied regardless of protocol. We also don't support the discard option. Signed-off-by: Ioana Radulescu --- drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c | 25 +++++++++++++++++----- drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h | 2 ++ .../net/ethernet/freescale/dpaa2/dpaa2-ethtool.c | 19 ++++++++++++++++ 3 files changed, 41 insertions(+), 5 deletions(-) diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c index 559154a..c282d5c 100644 --- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c +++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c @@ -2003,9 +2003,21 @@ static int setup_tx_flow(struct dpaa2_eth_priv *priv, return 0; } -/* Hash key is a 5-tuple: IPsrc, IPdst, IPnextproto, L4src, L4dst */ +/* Supported header fields for Rx hash distribution key */ static const struct dpaa2_eth_hash_fields hash_fields[] = { { + /* L2 header */ + .rxnfc_field = RXH_L2DA, + .cls_prot = NET_PROT_ETH, + .cls_field = NH_FLD_ETH_DA, + .size = 6, + }, { + /* VLAN header */ + .rxnfc_field = RXH_VLAN, + .cls_prot = NET_PROT_VLAN, + .cls_field = NH_FLD_VLAN_TCI, + .size = 2, + }, { /* IP header */ .rxnfc_field = RXH_IP_SRC, .cls_prot = NET_PROT_IP, @@ -2040,19 +2052,20 @@ static const struct dpaa2_eth_hash_fields hash_fields[] = { /* Set RX hash options * flags is a combination of RXH_ bits */ -static int dpaa2_eth_set_hash(struct net_device *net_dev, u64 flags) +int dpaa2_eth_set_hash(struct net_device *net_dev, u64 flags) { struct device *dev = net_dev->dev.parent; struct dpaa2_eth_priv *priv = netdev_priv(net_dev); struct dpkg_profile_cfg cls_cfg; struct dpni_rx_tc_dist_cfg dist_cfg; + u32 rx_hash_fields = 0; u8 *dma_mem; int i; int err = 0; if (!dpaa2_eth_hash_enabled(priv)) { dev_dbg(dev, "Hashing support is not enabled\n"); - return 0; + return -EOPNOTSUPP; } memset(&cls_cfg, 0, sizeof(cls_cfg)); @@ -2075,7 +2088,7 @@ static int dpaa2_eth_set_hash(struct net_device *net_dev, u64 flags) key->extract.from_hdr.field = hash_fields[i].cls_field; cls_cfg.num_extracts++; - priv->rx_hash_fields |= hash_fields[i].rxnfc_field; + rx_hash_fields |= hash_fields[i].rxnfc_field; } dma_mem = kzalloc(DPAA2_CLASSIFIER_DMA_SIZE, GFP_KERNEL); @@ -2108,6 +2121,8 @@ static int dpaa2_eth_set_hash(struct net_device *net_dev, u64 flags) DPAA2_CLASSIFIER_DMA_SIZE, DMA_TO_DEVICE); if (err) dev_err(dev, "dpni_set_rx_tc_dist() error %d\n", err); + else + priv->rx_hash_fields = rx_hash_fields; err_dma_map: err_prep_key: @@ -2141,7 +2156,7 @@ static int bind_dpni(struct dpaa2_eth_priv *priv) * the default hash key */ err = dpaa2_eth_set_hash(net_dev, DPAA2_RXH_DEFAULT); - if (err) + if (err && err != -EOPNOTSUPP) dev_err(dev, "Failed to configure hashing\n"); /* Configure handling of error frames */ diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h index d54cb0b..93bc412 100644 --- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h +++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h @@ -409,4 +409,6 @@ static int dpaa2_eth_queue_count(struct dpaa2_eth_priv *priv) return priv->dpni_attrs.num_queues; } +int dpaa2_eth_set_hash(struct net_device *net_dev, u64 flags); + #endif /* __DPAA2_H */ diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-ethtool.c b/drivers/net/ethernet/freescale/dpaa2/dpaa2-ethtool.c index 8056a95..ce0d94d 100644 --- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-ethtool.c +++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-ethtool.c @@ -247,6 +247,24 @@ static int dpaa2_eth_get_rxnfc(struct net_device *net_dev, return 0; } +static int dpaa2_eth_set_rxnfc(struct net_device *net_dev, + struct ethtool_rxnfc *rxnfc) +{ + int err = 0; + + switch (rxnfc->cmd) { + case ETHTOOL_SRXFH: + if ((rxnfc->data & DPAA2_RXH_SUPPORTED) != rxnfc->data) + return -EOPNOTSUPP; + err = dpaa2_eth_set_hash(net_dev, rxnfc->data); + break; + default: + err = -EOPNOTSUPP; + } + + return err; +} + int dpaa2_phc_index = -1; EXPORT_SYMBOL(dpaa2_phc_index); @@ -276,5 +294,6 @@ const struct ethtool_ops dpaa2_ethtool_ops = { .get_ethtool_stats = dpaa2_eth_get_ethtool_stats, .get_strings = dpaa2_eth_get_strings, .get_rxnfc = dpaa2_eth_get_rxnfc, + .set_rxnfc = dpaa2_eth_set_rxnfc, .get_ts_info = dpaa2_eth_get_ts_info, };