From patchwork Thu Aug 24 07:28:26 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Madalin Bucur X-Patchwork-Id: 805277 X-Patchwork-Delegate: davem@davemloft.net 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=) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3xdGCM5tVzz9sRm for ; Thu, 24 Aug 2017 17:29:51 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751856AbdHXH3h (ORCPT ); Thu, 24 Aug 2017 03:29:37 -0400 Received: from mail-sn1nam02on0053.outbound.protection.outlook.com ([104.47.36.53]:4700 "EHLO NAM02-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751537AbdHXH2l (ORCPT ); Thu, 24 Aug 2017 03:28:41 -0400 Received: from DM5PR03CA0026.namprd03.prod.outlook.com (10.174.189.143) by CY1PR03MB2268.namprd03.prod.outlook.com (10.166.207.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.1.1362.18; Thu, 24 Aug 2017 07:28:39 +0000 Received: from BY2FFO11FD011.protection.gbl (2a01:111:f400:7c0c::157) by DM5PR03CA0026.outlook.office365.com (2603:10b6:4:3b::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.1.1385.8 via Frontend Transport; Thu, 24 Aug 2017 07:28:39 +0000 Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=nxp.com; vger.kernel.org; dkim=none (message not signed) header.d=none; vger.kernel.org; dmarc=fail action=none header.from=nxp.com; Received-SPF: Fail (protection.outlook.com: domain of nxp.com does not designate 192.88.168.50 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.168.50; helo=tx30smr01.am.freescale.net; Received: from tx30smr01.am.freescale.net (192.88.168.50) by BY2FFO11FD011.mail.protection.outlook.com (10.1.14.129) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.1341.15 via Frontend Transport; Thu, 24 Aug 2017 07:28:38 +0000 Received: from fsr-fed2164-101.ea.freescale.net (fsr-fed2164-101.ea.freescale.net [10.171.73.197]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id v7O7STqf005094; Thu, 24 Aug 2017 00:28:36 -0700 From: Madalin Bucur To: , CC: , Subject: [PATCH v3 5/7] dpaa_eth: add NETIF_F_RXHASH Date: Thu, 24 Aug 2017 10:28:26 +0300 Message-ID: <1503559708-13405-6-git-send-email-madalin.bucur@nxp.com> X-Mailer: git-send-email 2.1.0 In-Reply-To: <1503559708-13405-1-git-send-email-madalin.bucur@nxp.com> References: <1503559708-13405-1-git-send-email-madalin.bucur@nxp.com> Reply-To: X-EOPAttributedMessage: 0 X-Matching-Connectors: 131480333191857454; (91ab9b29-cfa4-454e-5278-08d120cd25b8); () X-Forefront-Antispam-Report: CIP:192.88.168.50; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(336005)(39380400002)(39860400002)(2980300002)(1109001)(1110001)(339900001)(189002)(199003)(76176999)(86362001)(33646002)(50986999)(8676002)(2950100002)(356003)(2906002)(5003940100001)(6666003)(68736007)(106466001)(104016004)(81166006)(105606002)(498600001)(81156014)(8936002)(77096006)(4326008)(5660300001)(48376002)(626005)(50466002)(3450700001)(305945005)(189998001)(43066003)(50226002)(36756003)(53936002)(47776003)(54906002)(97736004)(85426001); DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR03MB2268; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BY2FFO11FD011; 1:0tnZsis3ygx5r3+ryVOYpyGp/Rmo0ypbLKvl3gJmJKomCKotVmC1q52hg1o7yWnpQUGp23UA3rbdggyfS3Jd74Z3/2C09Rgx4apa2l0CnDTtJr9yrfUraZUu06wpmzAM MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 6829645a-bbae-4263-c52e-08d4eac1bd50 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(300000503095)(300135400095)(2017052603196)(201703131430075)(201703131517081)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095); SRVR:CY1PR03MB2268; X-Microsoft-Exchange-Diagnostics: 1; CY1PR03MB2268; 3:PgCKYDsrlOLYqJVLTS8/zYl9rmRYwDznAokRZVP1Qu83PPZnjz2bA/OZJWQ9aRt3mkMnjjoTbxp/pXWSIqVltxlJlIYtT3luNLj4E6pBxufHZf8yg8VXP63fZxrP32Kkq5Ci9njz1WdTiwCHvHZT/aiMDJZygH71G/tEPGH08r9Fivf5Gv9xRz9Ax1Abisy7gJE70eKZ9jOar9ij8kOY2WBzq6sDq59yTcJwbzmszDn5lrZZiVOCaFUo0qt7WAlh+RcYfSWmDfqWo0BRMA8EJagoZQ9U1zkR+qlt+euAoHDZC5pzhZcPq1YTVHpiINfbnWmSC9fyZaC3ApYjDN3/rAe9jAPF0HYU07gd34Mih+4=; 25:IVcRaB1EXa+02LUzVRv4R9bxI96dW89uIs4Hv/aoD1yCVMSJ0uFvzBUB1fHZA8IP6papnx5zBbbhMWAVO2Vt9Z37DNIHFtw8uGMrQwMs2sIh7ouSxxc9aREnjHfQKmhGBwNokmgqhhPEBA38Wk0A0PLE93CjuhcgrYDmNL51XScFU40qkndeiTSCJDzGCQIBcjwKc0W2Whw5LgFmU1EaM+xAZhT0Vuhoa1/gxLSSAfQFdfW4hdbNI9LG/N0EIxQPV5HiB732X3nd4B3slqjsooTcaS+s9etmv9Hu3vE90zsO6dW/pTUT4B1y3HL+IG5A5HVSEaaVKTLnVlRG943Z4A== X-MS-TrafficTypeDiagnostic: CY1PR03MB2268: X-Microsoft-Exchange-Diagnostics: 1; CY1PR03MB2268; 31:eC0EQgjR3IGsA+iSPZOLGYgRS4RPJEKYfinXpN3ITqIj8DLZCXegxOPynnsr/Lwdm0efGFKRSy1t7g4A1RshJfprGHJs0cJ+BQS+KaAFdJo0fWhGHVWF9T4U6OJi1m8/7Sz6TSSqn6SFs0yKn8hmb5BVHHfv+IUqMaNXQ3mssRrbC2uvKsul0aI0JK8JK33Y3wMX9nXQ/EcHODn0+d6XnhpOWo5X0BSmjCU3qql0RUc=; 4:0JuA0vUKrf0D/qGW/1CACa35n49XiVdbHhV7yrJ7TZBQsBu8jNpFe9FUZZ3n5qRM1NrulS3owhCP/xmz6fHa8c5aaftk3bX9gV3efZRRoj9JEPeUs6U2JDa/cPu/BjKOoTpOZRG07L4R7Pw5nFDKZp0sz3kaagQwZtnbqzTsQKg61hY//98p83exZIigGjV3EiAi8xBM2tC9ou2nWUTTs67jjws64Xu3vT2kHSJVxM2GKx2Mu/1/wTj4pwQkEMgMKdcK5zgg7xlXDoJBToNiArIi09Cp26ezwgKEZ6YyC/Y= X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6095135)(601004)(2401047)(5005006)(8121501046)(13018025)(13016025)(3002001)(93006095)(93001095)(100000703101)(100105400095)(10201501046)(6055026)(6096035)(20161123565025)(201703131430075)(201703131433075)(201703131441075)(201703131448075)(201703161259150)(20161123563025)(20161123556025)(20161123559100)(20161123561025)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:CY1PR03MB2268; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(400006)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:CY1PR03MB2268; X-Forefront-PRVS: 04097B7F7F X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY1PR03MB2268; 23:HrbXc5M53i9hjyfKe2V1Zs1iNvrZ1bk9XNs0MXILE?= =?us-ascii?Q?hiziVIdU4+15w1V6+mOJlqs/BwCPFBdVt/LmQxQ1PzXOvOJNLdUjnZV37/Ze?= =?us-ascii?Q?tscw8Qw0Hummw1zDor2xMe650kRJtzfATkdUdCUPI+M9mPqWL3Lr8hM9uMdG?= =?us-ascii?Q?fJhWHo7O2bJ73gHXjwI6ILelxceD7IX7GISfQeXz442+Ocj03yy0k7cJVh2X?= =?us-ascii?Q?HFF/yzmR3jxzW543m1DJiDnPTf7D51yit/kDiTUBe8zeD3ehZEDxBfuLMjTE?= =?us-ascii?Q?5iJ29nXfbgIFXEqk7/Nn9n6BXYqeKGkbB2IYP1nptmEkkOPE0cDQ5tRiWu0x?= =?us-ascii?Q?MWJcvUVJueogfHLMiwesnL+DdWTR6MnO6Ej3KvY1s2qPIUajZN3KEOb/ebCE?= =?us-ascii?Q?CabdfUiP8YWvm5xnvdfGyPXxHugsycGqaByGY7fiQg3mHAUbTNIR/qMruXbB?= =?us-ascii?Q?EHSzOa2X1VCtozPuTwrOArM2UYSfTnts5j8RVCiYm+/bnVrIDVidaEgwtZ3C?= =?us-ascii?Q?eUMq0P7m4x3vUJoeoeHt2iDcMaXkatyI4G0+iyz21u7H2+D+EqDHTAlBuKsz?= =?us-ascii?Q?tHorCK4OeNEpbdnqQuuBQdYCKrARNVjnqwn31BaYlr+BTiTeCP1IPSOwVAu9?= =?us-ascii?Q?XR8VS+pttuwhO0r9z/EM1dByOfvMxbTtl61V9Dk7eo3sCkXh5d7MJpMJ+aF6?= =?us-ascii?Q?gD9RR5E/fZDaZoYJtDQebVnmZKJyGygEdzdkk/xJ9/NqXzkPAilGIFDWKGJc?= =?us-ascii?Q?mKsSALmA65yO5bL3uNbJX/FwlYDtAJgwOSE4kWdgiMTe5QTUy2cY5qCU6X5U?= =?us-ascii?Q?Fi8x1rJ7gWnx9NRrRPncfgQLPNq3NyS6nrTqjZ27m6Blcdw97WiXjbaozyY7?= =?us-ascii?Q?Ixh6m8fFnBytP59v6wsr9+LCOEeR9HsSUiuGzDatXFh8hDurxvR8wT2KDJl3?= =?us-ascii?Q?LSfJlfsb98+GTapyxrVyh2fAzNLvNR9XtXrzZ2RqCW4HrDSAP/CzVuVqrxh3?= =?us-ascii?Q?MhY1+mIcsNY5JDvc4jjX3m2ng8JLS8MEtS1+jH5T7X16DVDkujyplZg55ArU?= =?us-ascii?Q?94zrJrvhf0781B1obub9AsfRbBD8RwogSQ2VdRiGfAb117Hng=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; CY1PR03MB2268; 6:iw7kU9mY5bVebiwoA1YzeO+LfIijwvnuMzlAXkLQtNAW0bwvUT0wUclx2ft5qjkpqXqdkz8UbY8iKi9pWb4KLNx+Z8wtFgWD3+vtDx2L1rhDh6oa7re+insBCFNapNS7fxQfdB6mcUB8Hd07OhjeMd3KljWSYSWc6b2EYQNmO62WL0GIeJqoz3jwjPwufUzWWzYFxOLgie1wIGxwE+tJIqFe3XBi/Cm+lbhZdMT0CcgJ3RQ65geQsrXknc+RGzzDJlKHLN5tgmg8EjBZolECztb26lb/cJuiQ0VgjLmHa6vPm31PjavjL26wGCsvE9c1cP3AzB5A/xBKsgtIdGpCPQ==; 5:4KeNrtpGeKgUarkmura/6YkS439YsF3cu3dUx7d4m+9M3N9chCoJ7XPHVgTDIMo+h7GN1doaewHokyQAEGF77gGwYdC38aL2O6gU16MdrMjJPMLUEPss9yQg0qCtLgjgaoF5AIVkOEKF7ueNXbIUqQ==; 24:vbOxLbtBGh1ZxtOxcw/WTDHa617quI+zBCSXWAjdNs7iw40b0xGSA0Q6wAWaeH+IHuPbJQUMINMV1MlYDJhUWkIcMDXQJCia0X+CePrrw78=; 7:80/9Clc1fcMfHH2s2pnNkoN9piEhC3N4jw1iCy8GfzL4hc2aKLBZ8GgxwDaP65WMGYoJ08c+GFMZ2RSNAQpoLe6DHShMz3eLq5f+LA0ky1R8DGkKeyDulGYElKT4aFIdCEB91gH6ivt/60FAsA6fIDJcogbOO6mNUX+fszXU3JQfvUecZ34JqWC9ChlMpsXjqq4odbv0eisbNR3L26tCpOnDxaeXypIFMuOILNP4QuM= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Aug 2017 07:28:38.9829 (UTC) X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e; Ip=[192.88.168.50]; Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR03MB2268 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Set the skb hash when then FMan Keygen hash result is available. Signed-off-by: Madalin Bucur --- drivers/net/ethernet/freescale/dpaa/dpaa_eth.c | 23 +++++++++++++++++++--- drivers/net/ethernet/freescale/dpaa/dpaa_eth.h | 1 + drivers/net/ethernet/freescale/dpaa/dpaa_ethtool.c | 9 +++++++-- drivers/net/ethernet/freescale/fman/fman_port.c | 11 +++++++++++ drivers/net/ethernet/freescale/fman/fman_port.h | 2 ++ 5 files changed, 41 insertions(+), 5 deletions(-) diff --git a/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c b/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c index 6d89e74..73ca8d7 100644 --- a/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c +++ b/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c @@ -236,7 +236,7 @@ static int dpaa_netdev_init(struct net_device *net_dev, net_dev->max_mtu = dpaa_get_max_mtu(); net_dev->hw_features |= (NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | - NETIF_F_LLTX); + NETIF_F_LLTX | NETIF_F_RXHASH); net_dev->hw_features |= NETIF_F_SG | NETIF_F_HIGHDMA; /* The kernels enables GSO automatically, if we declare NETIF_F_SG. @@ -2237,12 +2237,13 @@ static enum qman_cb_dqrr_result rx_default_dqrr(struct qman_portal *portal, dma_addr_t addr = qm_fd_addr(fd); enum qm_fd_format fd_format; struct net_device *net_dev; - u32 fd_status; + u32 fd_status, hash_offset; struct dpaa_bp *dpaa_bp; struct dpaa_priv *priv; unsigned int skb_len; struct sk_buff *skb; int *count_ptr; + void *vaddr; fd_status = be32_to_cpu(fd->status); fd_format = qm_fd_get_format(fd); @@ -2288,7 +2289,8 @@ static enum qman_cb_dqrr_result rx_default_dqrr(struct qman_portal *portal, dma_unmap_single(dpaa_bp->dev, addr, dpaa_bp->size, DMA_FROM_DEVICE); /* prefetch the first 64 bytes of the frame or the SGT start */ - prefetch(phys_to_virt(addr) + qm_fd_get_offset(fd)); + vaddr = phys_to_virt(addr); + prefetch(vaddr + qm_fd_get_offset(fd)); fd_format = qm_fd_get_format(fd); /* The only FD types that we may receive are contig and S/G */ @@ -2309,6 +2311,18 @@ static enum qman_cb_dqrr_result rx_default_dqrr(struct qman_portal *portal, skb->protocol = eth_type_trans(skb, net_dev); + if (net_dev->features & NETIF_F_RXHASH && priv->keygen_in_use && + !fman_port_get_hash_result_offset(priv->mac_dev->port[RX], + &hash_offset)) { + enum pkt_hash_types type; + + /* if L4 exists, it was used in the hash generation */ + type = be32_to_cpu(fd->status) & FM_FD_STAT_L4CV ? + PKT_HASH_TYPE_L4 : PKT_HASH_TYPE_L3; + skb_set_hash(skb, be32_to_cpu(*(u32 *)(vaddr + hash_offset)), + type); + } + skb_len = skb->len; if (unlikely(netif_receive_skb(skb) == NET_RX_DROP)) @@ -2774,6 +2788,9 @@ static int dpaa_eth_probe(struct platform_device *pdev) if (err) goto init_ports_failed; + /* Rx traffic distribution based on keygen hashing defaults to on */ + priv->keygen_in_use = true; + priv->percpu_priv = devm_alloc_percpu(dev, *priv->percpu_priv); if (!priv->percpu_priv) { dev_err(dev, "devm_alloc_percpu() failed\n"); diff --git a/drivers/net/ethernet/freescale/dpaa/dpaa_eth.h b/drivers/net/ethernet/freescale/dpaa/dpaa_eth.h index 496a12c..bd94220 100644 --- a/drivers/net/ethernet/freescale/dpaa/dpaa_eth.h +++ b/drivers/net/ethernet/freescale/dpaa/dpaa_eth.h @@ -159,6 +159,7 @@ struct dpaa_priv { struct list_head dpaa_fq_list; u8 num_tc; + bool keygen_in_use; u32 msg_enable; /* net_device message level */ struct { diff --git a/drivers/net/ethernet/freescale/dpaa/dpaa_ethtool.c b/drivers/net/ethernet/freescale/dpaa/dpaa_ethtool.c index 965f652..faea674 100644 --- a/drivers/net/ethernet/freescale/dpaa/dpaa_ethtool.c +++ b/drivers/net/ethernet/freescale/dpaa/dpaa_ethtool.c @@ -402,6 +402,8 @@ static void dpaa_get_strings(struct net_device *net_dev, u32 stringset, static int dpaa_get_hash_opts(struct net_device *dev, struct ethtool_rxnfc *cmd) { + struct dpaa_priv *priv = netdev_priv(dev); + cmd->data = 0; switch (cmd->flow_type) { @@ -409,7 +411,8 @@ static int dpaa_get_hash_opts(struct net_device *dev, case TCP_V6_FLOW: case UDP_V4_FLOW: case UDP_V6_FLOW: - cmd->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3; + if (priv->keygen_in_use) + cmd->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3; /* Fall through */ case IPV4_FLOW: case IPV6_FLOW: @@ -421,7 +424,8 @@ static int dpaa_get_hash_opts(struct net_device *dev, case AH_V6_FLOW: case ESP_V4_FLOW: case ESP_V6_FLOW: - cmd->data |= RXH_IP_SRC | RXH_IP_DST; + if (priv->keygen_in_use) + cmd->data |= RXH_IP_SRC | RXH_IP_DST; break; default: cmd->data = 0; @@ -458,6 +462,7 @@ static void dpaa_set_hash(struct net_device *net_dev, bool enable) rxport = mac_dev->port[0]; fman_port_use_kg_hash(rxport, enable); + priv->keygen_in_use = enable; } static int dpaa_set_hash_opts(struct net_device *dev, diff --git a/drivers/net/ethernet/freescale/fman/fman_port.c b/drivers/net/ethernet/freescale/fman/fman_port.c index a5b246c..290bead 100644 --- a/drivers/net/ethernet/freescale/fman/fman_port.c +++ b/drivers/net/ethernet/freescale/fman/fman_port.c @@ -1720,6 +1720,17 @@ u32 fman_port_get_qman_channel_id(struct fman_port *port) } EXPORT_SYMBOL(fman_port_get_qman_channel_id); +int fman_port_get_hash_result_offset(struct fman_port *port, u32 *offset) +{ + if (port->buffer_offsets.hash_result_offset == ILLEGAL_BASE) + return -EINVAL; + + *offset = port->buffer_offsets.hash_result_offset; + + return 0; +} +EXPORT_SYMBOL(fman_port_get_hash_result_offset); + static int fman_port_probe(struct platform_device *of_dev) { struct fman_port *port; diff --git a/drivers/net/ethernet/freescale/fman/fman_port.h b/drivers/net/ethernet/freescale/fman/fman_port.h index 5a99611..e86ca6a 100644 --- a/drivers/net/ethernet/freescale/fman/fman_port.h +++ b/drivers/net/ethernet/freescale/fman/fman_port.h @@ -151,6 +151,8 @@ int fman_port_enable(struct fman_port *port); u32 fman_port_get_qman_channel_id(struct fman_port *port); +int fman_port_get_hash_result_offset(struct fman_port *port, u32 *offset); + struct fman_port *fman_port_bind(struct device *dev); #endif /* __FMAN_PORT_H */