From patchwork Thu Feb 4 03:38:47 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xiao Wang X-Patchwork-Id: 10358 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 3A01995D8; Thu, 4 Feb 2016 04:39:03 +0100 (CET) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id 5C5B095D8 for ; Thu, 4 Feb 2016 04:39:01 +0100 (CET) Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga102.fm.intel.com with ESMTP; 03 Feb 2016 19:39:00 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.22,393,1449561600"; d="scan'208";a="42115789" Received: from shvmail01.sh.intel.com ([10.239.29.42]) by fmsmga004.fm.intel.com with ESMTP; 03 Feb 2016 19:38:59 -0800 Received: from shecgisg004.sh.intel.com (shecgisg004.sh.intel.com [10.239.29.89]) by shvmail01.sh.intel.com with ESMTP id u143cvPO013527; Thu, 4 Feb 2016 11:38:57 +0800 Received: from shecgisg004.sh.intel.com (localhost [127.0.0.1]) by shecgisg004.sh.intel.com (8.13.6/8.13.6/SuSE Linux 0.8) with ESMTP id u143cr3w013021; Thu, 4 Feb 2016 11:38:55 +0800 Received: (from xiaowan1@localhost) by shecgisg004.sh.intel.com (8.13.6/8.13.6/Submit) id u143crhp013017; Thu, 4 Feb 2016 11:38:53 +0800 From: Wang Xiao W To: jing.d.chen@intel.com Date: Thu, 4 Feb 2016 11:38:47 +0800 Message-Id: <1454557129-12825-2-git-send-email-xiao.w.wang@intel.com> X-Mailer: git-send-email 1.7.4.1 In-Reply-To: <1454557129-12825-1-git-send-email-xiao.w.wang@intel.com> References: <1454410216-13333-2-git-send-email-xiao.w.wang@intel.com> <1454557129-12825-1-git-send-email-xiao.w.wang@intel.com> Cc: dev@dpdk.org Subject: [dpdk-dev] [PATCH v3 1/3] fm10k: enable FTAG based forwarding 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" This patch enables reading sglort info into mbuf for RX and inserting an FTAG at the beginning of the packet for TX. The vlan_tci_outer field selected from rte_mbuf structure for sglort is not used in fm10k now. In FTAG based forwarding mode, the switch will forward packets according to glort info in FTAG rather than mac and vlan table. To activate this feature, user needs to turn ``CONFIG_RTE_LIBRTE_FM10K_FTAG_FWD`` to y in common_linuxapp or common_bsdapp. Currently this feature is supported only on PF, because FM10K_PFVTCTL register is read-only for VF. Signed-off-by: Wang Xiao W --- config/common_bsdapp | 1 + config/common_linuxapp | 1 + drivers/net/fm10k/fm10k_ethdev.c | 12 ++++++++++++ drivers/net/fm10k/fm10k_rxtx.c | 17 +++++++++++++++++ drivers/net/fm10k/fm10k_rxtx_vec.c | 9 +++++++++ 5 files changed, 40 insertions(+) diff --git a/config/common_bsdapp b/config/common_bsdapp index ed7c31c..451f81a 100644 --- a/config/common_bsdapp +++ b/config/common_bsdapp @@ -208,6 +208,7 @@ CONFIG_RTE_LIBRTE_FM10K_DEBUG_TX=n CONFIG_RTE_LIBRTE_FM10K_DEBUG_TX_FREE=n CONFIG_RTE_LIBRTE_FM10K_DEBUG_DRIVER=n CONFIG_RTE_LIBRTE_FM10K_RX_OLFLAGS_ENABLE=y +CONFIG_RTE_LIBRTE_FM10K_FTAG_FWD=n # # Compile burst-oriented Mellanox ConnectX-3 (MLX4) PMD diff --git a/config/common_linuxapp b/config/common_linuxapp index 74bc515..c928bce 100644 --- a/config/common_linuxapp +++ b/config/common_linuxapp @@ -207,6 +207,7 @@ CONFIG_RTE_LIBRTE_FM10K_DEBUG_TX_FREE=n CONFIG_RTE_LIBRTE_FM10K_DEBUG_DRIVER=n CONFIG_RTE_LIBRTE_FM10K_RX_OLFLAGS_ENABLE=y CONFIG_RTE_LIBRTE_FM10K_INC_VECTOR=y +CONFIG_RTE_LIBRTE_FM10K_FTAG_FWD=n # # Compile burst-oriented Mellanox ConnectX-3 (MLX4) PMD diff --git a/drivers/net/fm10k/fm10k_ethdev.c b/drivers/net/fm10k/fm10k_ethdev.c index e4aed94..65d355e 100644 --- a/drivers/net/fm10k/fm10k_ethdev.c +++ b/drivers/net/fm10k/fm10k_ethdev.c @@ -668,6 +668,18 @@ fm10k_dev_tx_init(struct rte_eth_dev *dev) PMD_INIT_LOG(ERR, "failed to disable queue %d", i); return -1; } +#ifdef RTE_LIBRTE_FM10K_FTAG_FWD + /* Enable use of FTAG bit in TX descriptor, PFVTCTL + * register is read-only for VF. + */ + if (hw->mac.type == fm10k_mac_pf) + FM10K_WRITE_REG(hw, FM10K_PFVTCTL(i), + FM10K_PFVTCTL_FTAG_DESC_ENABLE); + else { + PMD_INIT_LOG(ERR, "FTAG is not supported in VF."); + return -ENOTSUP; + } +#endif /* set location and size for descriptor ring */ FM10K_WRITE_REG(hw, FM10K_TDBAL(i), diff --git a/drivers/net/fm10k/fm10k_rxtx.c b/drivers/net/fm10k/fm10k_rxtx.c index e958865..f87987d 100644 --- a/drivers/net/fm10k/fm10k_rxtx.c +++ b/drivers/net/fm10k/fm10k_rxtx.c @@ -152,6 +152,13 @@ fm10k_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, */ mbuf->ol_flags |= PKT_RX_VLAN_PKT; mbuf->vlan_tci = desc.w.vlan; +#ifdef RTE_LIBRTE_FM10K_FTAG_FWD + /** + * mbuf->vlan_tci_outer is an idle field in fm10k driver, + * so it can be selected to store sglort value. + */ + mbuf->vlan_tci_outer = rte_le_to_cpu_16(desc.w.sglort); +#endif rx_pkts[count] = mbuf; if (++next_dd == q->nb_desc) { @@ -307,6 +314,13 @@ fm10k_recv_scattered_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, */ mbuf->ol_flags |= PKT_RX_VLAN_PKT; first_seg->vlan_tci = desc.w.vlan; +#ifdef RTE_LIBRTE_FM10K_FTAG_FWD + /** + * mbuf->vlan_tci_outer is an idle field in fm10k driver, + * so it can be selected to store sglort value. + */ + first_seg->vlan_tci_outer = rte_le_to_cpu_16(desc.w.sglort); +#endif /* Prefetch data of first segment, if configured to do so. */ rte_packet_prefetch((char *)first_seg->buf_addr + @@ -432,6 +446,9 @@ static inline void tx_xmit_pkt(struct fm10k_tx_queue *q, struct rte_mbuf *mb) q->nb_free -= mb->nb_segs; q->hw_ring[q->next_free].flags = 0; +#ifdef RTE_LIBRTE_FM10K_FTAG_FWD + q->hw_ring[q->next_free].flags |= FM10K_TXD_FLAG_FTAG; +#endif /* set checksum flags on first descriptor of packet. SCTP checksum * offload is not supported, but we do not explicitly check for this * case in favor of greatly simplified processing. */ diff --git a/drivers/net/fm10k/fm10k_rxtx_vec.c b/drivers/net/fm10k/fm10k_rxtx_vec.c index 2a57eef..0b0f2e3 100644 --- a/drivers/net/fm10k/fm10k_rxtx_vec.c +++ b/drivers/net/fm10k/fm10k_rxtx_vec.c @@ -198,7 +198,12 @@ fm10k_rx_vec_condition_check(struct rte_eth_dev *dev) rxmode->header_split == 1) return -1; +#ifdef RTE_LIBRTE_FM10K_FTAG_FWD + return -1; +#else return 0; +#endif + #else RTE_SET_USED(dev); return -1; @@ -648,7 +653,11 @@ fm10k_tx_vec_condition_check(struct fm10k_tx_queue *txq) if ((txq->txq_flags & FM10K_SIMPLE_TX_FLAG) != FM10K_SIMPLE_TX_FLAG) return -1; +#ifdef RTE_LIBRTE_FM10K_FTAG_FWD + return -1; +#else return 0; +#endif } static inline void