From patchwork Tue Jun 14 19:06:30 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerin Jacob X-Patchwork-Id: 13691 X-Patchwork-Delegate: bruce.richardson@intel.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id F066EAD8A; Tue, 14 Jun 2016 21:08:09 +0200 (CEST) Received: from na01-by2-obe.outbound.protection.outlook.com (mail-by2on0079.outbound.protection.outlook.com [207.46.100.79]) by dpdk.org (Postfix) with ESMTP id 200C7AD88 for ; Tue, 14 Jun 2016 21:08:08 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=ceg4TwyUh/73pvJfEQ5sxo+bbCo8udDlmkRZ4yGWrro=; b=RoAkC/5UXfRnCQ37UB0AL3+JltyIZkPIq7bcmC8GVhoXfEyYI/UP/iF5XSc00C/eza/X9JZV+rSd6J9/oMC7WtiAFJTEct5YWgJWjHw7ZsdDRCKlyZOUASsyBaXLRG3P5ynLY4w0BcV4jwjfDk1tPzkvLQsMROy1J7C/jXxAPnM= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Jerin.Jacob@cavium.com; Received: from localhost.caveonetworks.com (111.93.218.67) by BY1PR0701MB1723.namprd07.prod.outlook.com (10.162.111.142) with Microsoft SMTP Server (TLS) id 15.1.511.8; Tue, 14 Jun 2016 19:08:04 +0000 From: Jerin Jacob To: CC: , , , Jerin Jacob , Maciej Czekaj , Kamil Rytarowski , Zyta Szpak , Slawomir Rosek , Radoslaw Biernacki Date: Wed, 15 Jun 2016 00:36:30 +0530 Message-ID: <1465931200-23912-16-git-send-email-jerin.jacob@caviumnetworks.com> X-Mailer: git-send-email 2.5.5 In-Reply-To: <1465931200-23912-1-git-send-email-jerin.jacob@caviumnetworks.com> References: <1465826143-22159-1-git-send-email-jerin.jacob@caviumnetworks.com> <1465931200-23912-1-git-send-email-jerin.jacob@caviumnetworks.com> MIME-Version: 1.0 X-Originating-IP: [111.93.218.67] X-ClientProxiedBy: MA1PR01CA0040.INDPRD01.PROD.OUTLOOK.COM (10.164.116.140) To BY1PR0701MB1723.namprd07.prod.outlook.com (10.162.111.142) X-MS-Office365-Filtering-Correlation-Id: d5935657-de91-432e-4103-08d3948737c3 X-Microsoft-Exchange-Diagnostics: 1; BY1PR0701MB1723; 2:8saXnjuVILanIiibALZgMQjoFF0UvmfptcVDmdKfcEL4obD84lnXcZsgg7/9C4BiC+q0Q5WqRJ5XAarlaIefPu7OqNEh5HMKk+6X0NkMzqqezOPcOOklPl9wPmb26sVXrlEIOcqEr8DtLXOFQAreVD1yt0awlbpnKBfJ8W8LNGJBmF122Y9nP4boxtF1sjiN; 3:TwMYXWPCXIjaljb/cUJQuBRZl/eyffXFw/jecD1FyQaoEQLlJaySN/Q+UGUV802YcDEDBmktRIvUInb96V8MAedcIBih/vj6sP9isMFzOA0+9oKUFAiHttcokxYvdq2O; 25:vZ62jOAf+uVBTbTZTlKmepv1goo9eBxyebemGOfRI8qOzUE4GLLdiE1WTE6xe/JQYPjtnC6l4wYkn+NZwoBydCfyYtdq3EwrsmDiBluZYBAxDVViTsNw+VwXO17Se+7ZTxidPWeAj4qN7MnM3RBRXRaO8AxEiY75OfjH0AKFhrEtTpehhVwwFWT+FECxpUGlnFg9bYdliiaGL6bG83DO4Xp0uls9GR1DrsV1K28whViQrgmEy0n2vGS8hMLmx+f2Lox67D4igYY0DWxWjrSXWoOEC2zqHD7YyWkpu+8RuO6bYagSyBDHUlkkiv+Nd63/u807G3/1btKvfF3sHqO3h5L0GXzCEWvv7qqmoKZ3bdH0dxIVo48WBkNM08pzvU39SS6rtAxm7qq+tOc96IOnDon8aDKxrZ6duyDFHY1nUtI= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BY1PR0701MB1723; X-Microsoft-Exchange-Diagnostics: 1; BY1PR0701MB1723; 20:ZckSBGyTAtNUMYDwna1saqc+APlo5QDGUxzfmveOhriR/NPzJguyg0kOiZM91kX4IBvX9W2IH5a+feD0HUPSGyW0IfixlYtqef6XFNwtPWo63XPj/qMqXfMafH/8mrDe9L5OTBClwiJLQU6349Dy2yFDJlE9f8lwvsnSZrrpl/MyCi2epIvfr8XTpKVSl5kOeU49t7rk7WiLRUdMkta/QN0LqQc4Z5pBshJDNysuygATa0dJUio9nL8ykDnYLfnGtx10SMquwlMWziKvh+/hdIn81qkz/Ug0d4KWsb+LAuzXqAUjgJoYkhBTSTfpdzTHXYgl5kMqB54Fa2Sg35LcKqpahodJa90Eslmcevp64pNMai9DrgieF6euPPGyi6vqqGapnqQ05zIxUJsuMhF4JZsHXyWKMC66dsNjFHnIe+JcvTGHxaERtqMOcHEM3GSi4jSCs54MvMKodbw89tjJWp6aF4fnJ716rzj1CcSbsOXcgwUSFvOMeoLEY/Y4R5BSfXxGqMi6Sz/RZjBHVhUI5XH8OtDHe6etyx/VID9r4DrsfaVneOXNdBEVXH8GmfXwS5m9NyUXuPrZiHmo7ik41frgqn7vIlZ96PvkCAux8oU= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(228905959029699); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046); SRVR:BY1PR0701MB1723; BCL:0; PCL:0; RULEID:; SRVR:BY1PR0701MB1723; X-Microsoft-Exchange-Diagnostics: 1; BY1PR0701MB1723; 4:deNaAOyEULptZfU2AdhN+m8x8Jv4TlOGxqUd70V42WRjlq9Kg1FGIeERlOf2gY7cVPrG76VBrp8kSzZbUHok+p8sb6e3ZpyLBHLZNzqNeJj7wjE1mBK4q3qm5Emb4Hg4Qmg0KJ7z28n8ltOROwYynnK1SmaGYLu3oCXTVh1EEH2aDuuUQgn3eC2Pad4gTGhaTGcoOgAaJ8/p6SQ0scC3BX5oxeCEQ/KycNvabxk+1LTbv90T+CVAen88gfyB3r9kdJMXlNkJmOyLI7I3bYNb6VuhMuC3n6OgJaswkyfxUxEyBc6WhbmPVFLfnf3363NSXBKMMB8oIxRSqN5jfCEpvMA5XFO+Q+rA9QJmVZTzpYgx4XWMXymm3HUhwGTaHRHeB4De/kjfkCacm+blIX6DI4k0euQcvxMCAp0032dy45s= X-Forefront-PRVS: 09730BD177 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6069001)(6009001)(7916002)(189002)(199003)(69596002)(189998001)(2950100001)(48376002)(77096005)(36756003)(19580405001)(5004730100002)(19580395003)(76176999)(5009440100003)(50986999)(97736004)(5003940100001)(68736007)(110136002)(92566002)(101416001)(5008740100001)(81166006)(8676002)(229853001)(81156014)(66066001)(4326007)(50466002)(2906002)(105586002)(106356001)(2351001)(47776003)(53416004)(76506005)(42186005)(33646002)(586003)(3846002)(6116002)(50226002)(7099028); DIR:OUT; SFP:1101; SCL:1; SRVR:BY1PR0701MB1723; H:localhost.caveonetworks.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BY1PR0701MB1723; 23:DNd7kV3olmmhVHs+Evgjd6AI+dlPU9cWtbH8gfP?= =?us-ascii?Q?D9325EIUnVIXebABzfuvGShiqJqm2JHC3yMy2691UXsdSbu4xaiDtxKi1M1I?= =?us-ascii?Q?0vLq6Z7tfd0VCmy9klc1dOqLcidPFr6fes4Hgm/ih8qBh8rjYb8OiFDp/Mrp?= =?us-ascii?Q?morDXG7IDSxeSXs3QeROrweWQP2ar57GHhotPboY9cn4vSCriZ+QpC9C0TiD?= =?us-ascii?Q?PM1r3ZP35TlXxdMqqHWqUOl8G3T+mQl5gMGqhoOSSc9nB/8PInlbkV0+CAPx?= =?us-ascii?Q?bUAk0UgDvIKnAX9hECNy/dMuZkc4ZGMDmwZweaZk0B/DyPwiWBqIUOI3e2M2?= =?us-ascii?Q?O7HusDpVscWK8uhJMCMlsYbnqQ97WuVoQwWSo9L0JGB/a674V5k0MZpCHMLn?= =?us-ascii?Q?yhHB6Fkmlg92BjGfzavFLFkk6o4C02EUdMSipaaASj1wP6g4xwvAoDTHI52U?= =?us-ascii?Q?9cznSkMmN/3Af5qtMPP+MEiYEQcEGi18oyU9gLR0v/ilShqctIBw2/9lsIze?= =?us-ascii?Q?x9iaj2S75FG8ddj4Ln5sMwSkoyBoilNvv6g6AyFUw3n6vvN7uyTruibYdbi6?= =?us-ascii?Q?ZA/URvdArTHx7j54QW2eoXCy5utkD0Ty+oMy/I3Eyp0QDCRRIS8JsZbZTdU8?= =?us-ascii?Q?Rl0Ci8IubOnhbnY7Lj5qZj+bEZd99Yw6VWtjDVRneqbQCTxTkihfJraVncG/?= =?us-ascii?Q?wZi9Lqjt6hc55xi+mtBkMYDl2f/ZbgkrsDb34ha7nukLZuk7fEecGocPFCYA?= =?us-ascii?Q?nHdN3CdtLUWJkl0kEzC1aZfHiIZtUCUhVjkddjcX9SjrjYdKJg6gb7A03K8x?= =?us-ascii?Q?exuRb6eHlpR0akzxpbzOBZmf5VGk9+uJW9vH9gtm0c9xzdnoqIQnQWdZexoR?= =?us-ascii?Q?KYaNDEFTSqLpqZW6QNvuSP6BEovjtglArub3PwCy6r94qbmNGhjS3nAyrnsZ?= =?us-ascii?Q?umAL87xh4C6DoijLNQBxpQ5ftbHe4B7i0u0sYVtZ3HL5Wsa9O9F2xL9amBKi?= =?us-ascii?Q?W8z1Wl6NbpiFinPzLzRau/4CDQ3wUFXtaFrhizUiDhHT23EGUNwLkr1aqENX?= =?us-ascii?Q?3GSgu5UL9ZYhjEwcfj3NF7eCbusq5tkoC+VcVlmXjW61VpBw4O2P5H4vyh7X?= =?us-ascii?Q?DH+JRe4xWf8N2qFhKv8ejAiigrMD/tjrj2W/iDjcXl437NS4sF0tPmAK5A6m?= =?us-ascii?Q?srvokDEq5OqJ4MMI=3D?= X-Microsoft-Exchange-Diagnostics: 1; BY1PR0701MB1723; 5:6gg3Z1HEqFDNhOAuSuGn1Se5YL0/6l/LfIXxb5M1pUU+ULKp90NW+HdyD+rYqS+fn3qBd1CvW13m6fVQnXmJ358XwmpYp/AkzNBinRqsCnroIfhgXp//aZX5dEQ+BZA8xT1jz3JaSqyIGl52UBc5Lg==; 24:0PLOD8wWym0d/PAZmJ1RdtMNoJlB8jI/IYjRM3oBabGQdbV0lYaRuujB/sEQXMY/+DveBfTnA0WJGW1KCifGJUdrl1dyXXklkk4yQmUpTww=; 7:pm215oyllDpLNCJfKbtMzM8LnSWHiHO/6Ece7CNuogI8JkHhu4jTSqFSFxno7nAMu1lmEZN87xjqNcBCWILLtz2yEZCvuQphcGjY17CNQ063rytBc84lRo4tHgMFgzhEXtkxHeHftixAi+gyBumF7FfdgQLjHgusT5FPeMjvUh5KhCbcgzVIQQi5odXNAKQvjS1TrucQkJgfw6jM3f3lZg== SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Jun 2016 19:08:04.0315 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1723 Subject: [dpdk-dev] [PATCH v5 15/25] net/thunderx: add RSS and reta query and update support X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Signed-off-by: Jerin Jacob Signed-off-by: Maciej Czekaj Signed-off-by: Kamil Rytarowski Signed-off-by: Zyta Szpak Signed-off-by: Slawomir Rosek Signed-off-by: Radoslaw Biernacki Reviewed-by: Ferruh Yigit --- drivers/net/thunderx/nicvf_ethdev.c | 172 ++++++++++++++++++++++++++++++++++++ 1 file changed, 172 insertions(+) diff --git a/drivers/net/thunderx/nicvf_ethdev.c b/drivers/net/thunderx/nicvf_ethdev.c index 167149e..1d5bea7 100644 --- a/drivers/net/thunderx/nicvf_ethdev.c +++ b/drivers/net/thunderx/nicvf_ethdev.c @@ -168,6 +168,174 @@ nicvf_dev_get_regs(struct rte_eth_dev *dev, struct rte_dev_reg_info *regs) return -ENOTSUP; } +static inline uint64_t +nicvf_rss_ethdev_to_nic(struct nicvf *nic, uint64_t ethdev_rss) +{ + uint64_t nic_rss = 0; + + if (ethdev_rss & ETH_RSS_IPV4) + nic_rss |= RSS_IP_ENA; + + if (ethdev_rss & ETH_RSS_IPV6) + nic_rss |= RSS_IP_ENA; + + if (ethdev_rss & ETH_RSS_NONFRAG_IPV4_UDP) + nic_rss |= (RSS_IP_ENA | RSS_UDP_ENA); + + if (ethdev_rss & ETH_RSS_NONFRAG_IPV4_TCP) + nic_rss |= (RSS_IP_ENA | RSS_TCP_ENA); + + if (ethdev_rss & ETH_RSS_NONFRAG_IPV6_UDP) + nic_rss |= (RSS_IP_ENA | RSS_UDP_ENA); + + if (ethdev_rss & ETH_RSS_NONFRAG_IPV6_TCP) + nic_rss |= (RSS_IP_ENA | RSS_TCP_ENA); + + if (ethdev_rss & ETH_RSS_PORT) + nic_rss |= RSS_L2_EXTENDED_HASH_ENA; + + if (nicvf_hw_cap(nic) & NICVF_CAP_TUNNEL_PARSING) { + if (ethdev_rss & ETH_RSS_VXLAN) + nic_rss |= RSS_TUN_VXLAN_ENA; + + if (ethdev_rss & ETH_RSS_GENEVE) + nic_rss |= RSS_TUN_GENEVE_ENA; + + if (ethdev_rss & ETH_RSS_NVGRE) + nic_rss |= RSS_TUN_NVGRE_ENA; + } + + return nic_rss; +} + +static inline uint64_t +nicvf_rss_nic_to_ethdev(struct nicvf *nic, uint64_t nic_rss) +{ + uint64_t ethdev_rss = 0; + + if (nic_rss & RSS_IP_ENA) + ethdev_rss |= (ETH_RSS_IPV4 | ETH_RSS_IPV6); + + if ((nic_rss & RSS_IP_ENA) && (nic_rss & RSS_TCP_ENA)) + ethdev_rss |= (ETH_RSS_NONFRAG_IPV4_TCP | + ETH_RSS_NONFRAG_IPV6_TCP); + + if ((nic_rss & RSS_IP_ENA) && (nic_rss & RSS_UDP_ENA)) + ethdev_rss |= (ETH_RSS_NONFRAG_IPV4_UDP | + ETH_RSS_NONFRAG_IPV6_UDP); + + if (nic_rss & RSS_L2_EXTENDED_HASH_ENA) + ethdev_rss |= ETH_RSS_PORT; + + if (nicvf_hw_cap(nic) & NICVF_CAP_TUNNEL_PARSING) { + if (nic_rss & RSS_TUN_VXLAN_ENA) + ethdev_rss |= ETH_RSS_VXLAN; + + if (nic_rss & RSS_TUN_GENEVE_ENA) + ethdev_rss |= ETH_RSS_GENEVE; + + if (nic_rss & RSS_TUN_NVGRE_ENA) + ethdev_rss |= ETH_RSS_NVGRE; + } + return ethdev_rss; +} + +static int +nicvf_dev_reta_query(struct rte_eth_dev *dev, + struct rte_eth_rss_reta_entry64 *reta_conf, + uint16_t reta_size) +{ + struct nicvf *nic = nicvf_pmd_priv(dev); + uint8_t tbl[NIC_MAX_RSS_IDR_TBL_SIZE]; + int ret, i, j; + + if (reta_size != NIC_MAX_RSS_IDR_TBL_SIZE) { + RTE_LOG(ERR, PMD, "The size of hash lookup table configured " + "(%d) doesn't match the number hardware can supported " + "(%d)", reta_size, NIC_MAX_RSS_IDR_TBL_SIZE); + return -EINVAL; + } + + ret = nicvf_rss_reta_query(nic, tbl, NIC_MAX_RSS_IDR_TBL_SIZE); + if (ret) + return ret; + + /* Copy RETA table */ + for (i = 0; i < (NIC_MAX_RSS_IDR_TBL_SIZE / RTE_RETA_GROUP_SIZE); i++) { + for (j = 0; j < RTE_RETA_GROUP_SIZE; j++) + if ((reta_conf[i].mask >> j) & 0x01) + reta_conf[i].reta[j] = tbl[j]; + } + + return 0; +} + +static int +nicvf_dev_reta_update(struct rte_eth_dev *dev, + struct rte_eth_rss_reta_entry64 *reta_conf, + uint16_t reta_size) +{ + struct nicvf *nic = nicvf_pmd_priv(dev); + uint8_t tbl[NIC_MAX_RSS_IDR_TBL_SIZE]; + int ret, i, j; + + if (reta_size != NIC_MAX_RSS_IDR_TBL_SIZE) { + RTE_LOG(ERR, PMD, "The size of hash lookup table configured " + "(%d) doesn't match the number hardware can supported " + "(%d)", reta_size, NIC_MAX_RSS_IDR_TBL_SIZE); + return -EINVAL; + } + + ret = nicvf_rss_reta_query(nic, tbl, NIC_MAX_RSS_IDR_TBL_SIZE); + if (ret) + return ret; + + /* Copy RETA table */ + for (i = 0; i < (NIC_MAX_RSS_IDR_TBL_SIZE / RTE_RETA_GROUP_SIZE); i++) { + for (j = 0; j < RTE_RETA_GROUP_SIZE; j++) + if ((reta_conf[i].mask >> j) & 0x01) + tbl[j] = reta_conf[i].reta[j]; + } + + return nicvf_rss_reta_update(nic, tbl, NIC_MAX_RSS_IDR_TBL_SIZE); +} + +static int +nicvf_dev_rss_hash_conf_get(struct rte_eth_dev *dev, + struct rte_eth_rss_conf *rss_conf) +{ + struct nicvf *nic = nicvf_pmd_priv(dev); + + if (rss_conf->rss_key) + nicvf_rss_get_key(nic, rss_conf->rss_key); + + rss_conf->rss_key_len = RSS_HASH_KEY_BYTE_SIZE; + rss_conf->rss_hf = nicvf_rss_nic_to_ethdev(nic, nicvf_rss_get_cfg(nic)); + return 0; +} + +static int +nicvf_dev_rss_hash_update(struct rte_eth_dev *dev, + struct rte_eth_rss_conf *rss_conf) +{ + struct nicvf *nic = nicvf_pmd_priv(dev); + uint64_t nic_rss; + + if (rss_conf->rss_key && + rss_conf->rss_key_len != RSS_HASH_KEY_BYTE_SIZE) { + RTE_LOG(ERR, PMD, "Hash key size mismatch %d", + rss_conf->rss_key_len); + return -EINVAL; + } + + if (rss_conf->rss_key) + nicvf_rss_set_key(nic, rss_conf->rss_key); + + nic_rss = nicvf_rss_ethdev_to_nic(nic, rss_conf->rss_hf); + nicvf_rss_set_cfg(nic, nic_rss); + return 0; +} + static int nicvf_qset_cq_alloc(struct nicvf *nic, struct nicvf_rxq *rxq, uint16_t qidx, uint32_t desc_cnt) @@ -601,6 +769,10 @@ static const struct eth_dev_ops nicvf_eth_dev_ops = { .dev_configure = nicvf_dev_configure, .link_update = nicvf_dev_link_update, .dev_infos_get = nicvf_dev_info_get, + .reta_update = nicvf_dev_reta_update, + .reta_query = nicvf_dev_reta_query, + .rss_hash_update = nicvf_dev_rss_hash_update, + .rss_hash_conf_get = nicvf_dev_rss_hash_conf_get, .rx_queue_setup = nicvf_dev_rx_queue_setup, .rx_queue_release = nicvf_dev_rx_queue_release, .tx_queue_setup = nicvf_dev_tx_queue_setup,