From patchwork Fri Sep 4 08:29:15 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hemant Agrawal X-Patchwork-Id: 249061 Delivered-To: patch@linaro.org Received: by 2002:a92:5b9c:0:0:0:0:0 with SMTP id c28csp1188539ilg; Fri, 4 Sep 2020 01:35:37 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz7A4au5qLpXOLYKIdhqzUe0Z5fpHd9PP/mWNm9v+YMjGChbdElUtM0t0gD/ldfFP1lKQhX X-Received: by 2002:a05:6402:114d:: with SMTP id g13mr7208654edw.157.1599208537362; Fri, 04 Sep 2020 01:35:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1599208537; cv=none; d=google.com; s=arc-20160816; b=xSHzqd0SkbJjgsMnLqFVomWc16zGQXIBEDIBJ0IGw0Tj2vLG+vrgw3Pm9YdznM/8Xc hHhztE4uf64HVLp3mGPsyG/GWINJvRZIsJKxGsLawe+/sBxiGBOp7C38Kci8/+S2mx7U DHzjFdvRewAlI6AfDNFwK8QWSOj/YBfUp1UU8bFeN9N4zXqhjaZG3SY2cd1ZDsV4B0hK 6a8covVfSPMZh7vlWd/7FtlxD9pABFNk2U483+A/Ul+PdYfB7ymkO9AEDSAh1MVeuzgc bke/khrenQKXzHIMAWPOYEu15EI6GmFDVhfShWu72tVm2LPWBaIK+aWQxCeujud2lJU6 V4dQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject:references:in-reply-to :message-id:date:cc:to:from; bh=0IxwclmVQGKqxxdUikuODEJc+pceQV83MDYZnzO2rto=; b=L0z5ATXwzmp1rqslY1O0pcIe7A4hmm5/0P9IziILVwrhcLCO3U7yr9+5qs4pnBl5ca Hv8MEBmb6JMlL8TJDI92m5cR4IGcsAMBdHZM0aL6nWeQasCwPE4/MtDDRTEVGA/oO+E2 fwH478frX+eV+CXlDFtNaH+Yyp+KY8sLPZb9dA1nEgzPPYeBJpvCf/s4kSFfkHXzHevN sswtqygCtAA+cfDS+2CgoE88OcXsBd6HsSWxZWaKnFNZxHMaPqeRnQt3+oFgHDYSZfmJ 8iw9eh3qYLe7aBtAUH+Q/4m5mzvUswHWwBjJDPBHKQQd2aQtGIMV1aCrHILk4ktaX3ci dmgA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of dev-bounces@dpdk.org designates 92.243.14.124 as permitted sender) smtp.mailfrom=dev-bounces@dpdk.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=nxp.com Return-Path: Received: from dpdk.org (dpdk.org. [92.243.14.124]) by mx.google.com with ESMTP id sd28si3634614ejb.302.2020.09.04.01.35.36; Fri, 04 Sep 2020 01:35:37 -0700 (PDT) Received-SPF: pass (google.com: domain of dev-bounces@dpdk.org designates 92.243.14.124 as permitted sender) client-ip=92.243.14.124; Authentication-Results: mx.google.com; spf=pass (google.com: domain of dev-bounces@dpdk.org designates 92.243.14.124 as permitted sender) smtp.mailfrom=dev-bounces@dpdk.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 5204C1C0B4; Fri, 4 Sep 2020 10:35:36 +0200 (CEST) Received: from inva021.nxp.com (inva021.nxp.com [92.121.34.21]) by dpdk.org (Postfix) with ESMTP id 3FFB81C0AF for ; Fri, 4 Sep 2020 10:35:35 +0200 (CEST) Received: from inva021.nxp.com (localhost [127.0.0.1]) by inva021.eu-rdc02.nxp.com (Postfix) with ESMTP id 0E91420196E; Fri, 4 Sep 2020 10:35:35 +0200 (CEST) Received: from invc005.ap-rdc01.nxp.com (invc005.ap-rdc01.nxp.com [165.114.16.14]) by inva021.eu-rdc02.nxp.com (Postfix) with ESMTP id 36D3C2003A3; Fri, 4 Sep 2020 10:35:33 +0200 (CEST) Received: from bf-netperf1.ap.freescale.net (bf-netperf1.ap.freescale.net [10.232.133.63]) by invc005.ap-rdc01.nxp.com (Postfix) with ESMTP id B17EE402CF; Fri, 4 Sep 2020 10:35:30 +0200 (CEST) From: Hemant Agrawal To: dev@dpdk.org Cc: ferruh.yigit@intel.com Date: Fri, 4 Sep 2020 13:59:15 +0530 Message-Id: <20200904082921.17400-1-hemant.agrawal@nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200901123650.29908-1-hemant.agrawal@nxp.com> References: <20200901123650.29908-1-hemant.agrawal@nxp.com> X-Virus-Scanned: ClamAV using ClamSMTP Subject: [dpdk-dev] [PATCH v7 1/7] net/dpaa: add VSP support in FMLIB X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Jun Yang This patch adds support for VSP (Virtual Storage Profile) in fmlib routines. VSP allow a network interface to be divided into physical and virtual instance(s). The concept is very similar to SRIOV. Signed-off-by: Jun Yang Signed-off-by: Hemant Agrawal --- v7: fix spelling mistakes and add FMD link v6: add documentation v5: align to dpdk coding style doc/guides/nics/dpaa.rst | 8 ++ drivers/net/dpaa/fmlib/fm_vsp.c | 148 ++++++++++++++++++++++++++++ drivers/net/dpaa/fmlib/fm_vsp_ext.h | 131 ++++++++++++++++++++++++ drivers/net/dpaa/meson.build | 1 + 4 files changed, 288 insertions(+) create mode 100644 drivers/net/dpaa/fmlib/fm_vsp.c create mode 100644 drivers/net/dpaa/fmlib/fm_vsp_ext.h -- 2.17.1 diff --git a/doc/guides/nics/dpaa.rst b/doc/guides/nics/dpaa.rst index f40d6a4d1..f2b2f71e4 100644 --- a/doc/guides/nics/dpaa.rst +++ b/doc/guides/nics/dpaa.rst @@ -339,6 +339,14 @@ FMLIB `Kernel FMD Driver `_. +VSP (Virtual Storage Profile) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + The storage profiled are means to provide virtualized interface. A ranges of + storage profiles cab be associated to Ethernet ports. + They are selected during classification. Specify how the frame should be + written to memory and which buffer pool to select for packet storange in + queues. Start and End margin of buffer can also be configured. + Limitations ----------- diff --git a/drivers/net/dpaa/fmlib/fm_vsp.c b/drivers/net/dpaa/fmlib/fm_vsp.c new file mode 100644 index 000000000..78efd93f2 --- /dev/null +++ b/drivers/net/dpaa/fmlib/fm_vsp.c @@ -0,0 +1,148 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright 2019-2020 NXP + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include "fm_ext.h" +#include "fm_pcd_ext.h" +#include "fm_port_ext.h" +#include "fm_vsp_ext.h" +#include + +uint32_t +fm_port_vsp_alloc(t_handle h_fm_port, + t_fm_port_vspalloc_params *p_params) +{ + t_device *p_dev = (t_device *)h_fm_port; + ioc_fm_port_vsp_alloc_params_t params; + + _fml_dbg("Calling...\n"); + memset(¶ms, 0, sizeof(ioc_fm_port_vsp_alloc_params_t)); + memcpy(¶ms.params, p_params, sizeof(t_fm_port_vspalloc_params)); + + if (ioctl(p_dev->fd, FM_PORT_IOC_VSP_ALLOC, ¶ms)) + RETURN_ERROR(MINOR, E_INVALID_OPERATION, NO_MSG); + + _fml_dbg("Called.\n"); + + return E_OK; +} + +t_handle +fm_vsp_config(t_fm_vsp_params *p_fm_vsp_params) +{ + t_device *p_dev = NULL; + t_device *p_vsp_dev = NULL; + ioc_fm_vsp_params_t param; + + p_dev = p_fm_vsp_params->h_fm; + + _fml_dbg("Performing VSP Configuration...\n"); + + memset(¶m, 0, sizeof(ioc_fm_vsp_params_t)); + memcpy(¶m, p_fm_vsp_params, sizeof(t_fm_vsp_params)); + param.vsp_params.h_fm = UINT_TO_PTR(p_dev->id); + param.id = NULL; + + if (ioctl(p_dev->fd, FM_IOC_VSP_CONFIG, ¶m)) { + DPAA_PMD_ERR("%s ioctl error\n", __func__); + return NULL; + } + + p_vsp_dev = (t_device *)malloc(sizeof(t_device)); + if (!p_vsp_dev) { + DPAA_PMD_ERR("FM VSP Params!\n"); + return NULL; + } + memset(p_vsp_dev, 0, sizeof(t_device)); + p_vsp_dev->h_user_priv = (t_handle)p_dev; + p_dev->owners++; + p_vsp_dev->id = PTR_TO_UINT(param.id); + + _fml_dbg("VSP Configuration completed\n"); + + return (t_handle)p_vsp_dev; +} + +uint32_t +fm_vsp_init(t_handle h_fm_vsp) +{ + t_device *p_dev = NULL; + t_device *p_vsp_dev = (t_device *)h_fm_vsp; + ioc_fm_obj_t id; + + _fml_dbg("Calling...\n"); + + p_dev = (t_device *)p_vsp_dev->h_user_priv; + id.obj = UINT_TO_PTR(p_vsp_dev->id); + + if (ioctl(p_dev->fd, FM_IOC_VSP_INIT, &id)) { + DPAA_PMD_ERR("%s ioctl error\n", __func__); + RETURN_ERROR(MINOR, E_INVALID_OPERATION, NO_MSG); + } + + _fml_dbg("Called.\n"); + + return E_OK; +} + +uint32_t +fm_vsp_free(t_handle h_fm_vsp) +{ + t_device *p_dev = NULL; + t_device *p_vsp_dev = (t_device *)h_fm_vsp; + ioc_fm_obj_t id; + + _fml_dbg("Calling...\n"); + + p_dev = (t_device *)p_vsp_dev->h_user_priv; + id.obj = UINT_TO_PTR(p_vsp_dev->id); + + if (ioctl(p_dev->fd, FM_IOC_VSP_FREE, &id)) { + DPAA_PMD_ERR("%s ioctl error\n", __func__); + RETURN_ERROR(MINOR, E_INVALID_OPERATION, NO_MSG); + } + + p_dev->owners--; + free(p_vsp_dev); + + _fml_dbg("Called.\n"); + + return E_OK; +} + +uint32_t +fm_vsp_config_buffer_prefix_content(t_handle h_fm_vsp, + t_fm_buffer_prefix_content *p_fm_buffer_prefix_content) +{ + t_device *p_dev = NULL; + t_device *p_vsp_dev = (t_device *)h_fm_vsp; + ioc_fm_buffer_prefix_content_params_t params; + + _fml_dbg("Calling...\n"); + + p_dev = (t_device *)p_vsp_dev->h_user_priv; + params.p_fm_vsp = UINT_TO_PTR(p_vsp_dev->id); + memcpy(¶ms.fm_buffer_prefix_content, + p_fm_buffer_prefix_content, sizeof(*p_fm_buffer_prefix_content)); + + if (ioctl(p_dev->fd, FM_IOC_VSP_CONFIG_BUFFER_PREFIX_CONTENT, + ¶ms)) { + DPAA_PMD_ERR("%s ioctl error\n", __func__); + RETURN_ERROR(MINOR, E_INVALID_OPERATION, NO_MSG); + } + + _fml_dbg("Called.\n"); + + return E_OK; +} diff --git a/drivers/net/dpaa/fmlib/fm_vsp_ext.h b/drivers/net/dpaa/fmlib/fm_vsp_ext.h new file mode 100644 index 000000000..b51c46162 --- /dev/null +++ b/drivers/net/dpaa/fmlib/fm_vsp_ext.h @@ -0,0 +1,131 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright 2008-2012 Freescale Semiconductor, Inc + * Copyright 2019-2020 NXP + */ + +/* + * @File fm_vsp_ext.h + * + * @Description FM Virtual Storage-Profile + */ +#ifndef __FM_VSP_EXT_H +#define __FM_VSP_EXT_H +#include "ncsw_ext.h" +#include "fm_ext.h" +#include "net_ext.h" + +typedef struct t_fm_vsp_params { + t_handle h_fm; + /**< A handle to the FM object this VSP related to */ + t_fm_ext_pools ext_buf_pools; + /**< Which external buffer pools are used (up to + * FM_PORT_MAX_NUM_OF_EXT_POOLS), and their sizes. + * Parameter associated with Rx / OP port + */ + uint16_t liodn_offset; /**< VSP's LIODN offset */ + struct { + e_fm_port_type port_type; /**< Port type */ + uint8_t port_id; /**< Port Id - relative to type */ + } port_params; + uint8_t relative_profile_id; + /**< VSP Id - relative to VSP's range defined in + * relevant FM object + */ +} t_fm_vsp_params; + +typedef struct ioc_fm_vsp_params_t { + struct t_fm_vsp_params vsp_params; + void *id; /**< return value */ +} ioc_fm_vsp_params_t; + +typedef struct t_fm_port_vspalloc_params { + uint8_t num_of_profiles; + /**< Number of Virtual Storage Profiles; must be a power of 2 */ + uint8_t dflt_relative_id; + /**< The default Virtual-Storage-Profile-id dedicated to Rx/OP port. The + * same default Virtual-Storage-Profile-id will be for coupled Tx port + * if relevant function called for Rx port + */ +} t_fm_port_vspalloc_params; + +typedef struct ioc_fm_port_vsp_alloc_params_t { + struct t_fm_port_vspalloc_params params; + void *p_fm_tx_port; + /**< Handle to coupled Tx Port; not relevant for OP port. */ +} ioc_fm_port_vsp_alloc_params_t; + +typedef struct ioc_fm_buffer_prefix_content_t { + uint16_t priv_data_size; + /**< Number of bytes to be left at the beginning of the external + * buffer; Note that the private-area will start from the base + * of the buffer address. + */ + bool pass_prs_result; + /**< TRUE to pass the parse result to/from the FM; User + * may use fm_port_get_buffer_prs_result() in order to + * get the parser-result from a buffer. + */ + bool pass_time_stamp; + /**< TRUE to pass the timeStamp to/from the FM User may + * use fm_port_get_buffer_time_stamp() in order to get + * the parser-result from a buffer. + */ + bool pass_hash_result; + /**< TRUE to pass the KG hash result to/from the FM User + * may use fm_port_get_buffer_hash_result() in order to + * get the parser-result from a buffer. + */ + bool pass_all_other_pcd_info; + /**< Add all other Internal-Context information: AD, + * hash-result, key, etc. + */ + uint16_t data_align; + /**< 0 to use driver's default alignment [64], + * other value for selecting a data alignment (must be a + * power of 2); if write optimization is used, must be + * >= 16. + */ + uint8_t manip_extra_space; + /**< Maximum extra size needed + * (insertion-size minus removal-size); + * Note that this field impacts the size of the + * buffer-prefix (i.e. it pushes the data offset); + * This field is irrelevant if DPAA_VERSION==10 + */ +} ioc_fm_buffer_prefix_content_t; + +typedef struct ioc_fm_buffer_prefix_content_params_t { + void *p_fm_vsp; + ioc_fm_buffer_prefix_content_t fm_buffer_prefix_content; +} ioc_fm_buffer_prefix_content_params_t; + +uint32_t fm_port_vsp_alloc(t_handle h_fm_port, + t_fm_port_vspalloc_params *p_params); + +t_handle fm_vsp_config(t_fm_vsp_params *p_fm_vsp_params); + +uint32_t fm_vsp_init(t_handle h_fm_vsp); + +uint32_t fm_vsp_free(t_handle h_fm_vsp); + +uint32_t fm_vsp_config_buffer_prefix_content(t_handle h_fm_vsp, + t_fm_buffer_prefix_content *p_fm_buffer_prefix_content); + +#define FM_PORT_IOC_VSP_ALLOC \ + _IOW(FM_IOC_TYPE_BASE, FM_PORT_IOC_NUM(38), \ + ioc_fm_port_vsp_alloc_params_t) + +#define FM_IOC_VSP_CONFIG \ + _IOWR(FM_IOC_TYPE_BASE, FM_IOC_NUM(8), ioc_fm_vsp_params_t) + +#define FM_IOC_VSP_INIT \ + _IOW(FM_IOC_TYPE_BASE, FM_IOC_NUM(9), ioc_fm_obj_t) + +#define FM_IOC_VSP_FREE \ + _IOW(FM_IOC_TYPE_BASE, FM_IOC_NUM(10), ioc_fm_obj_t) + +#define FM_IOC_VSP_CONFIG_BUFFER_PREFIX_CONTENT \ + _IOW(FM_IOC_TYPE_BASE, FM_IOC_NUM(12), \ + ioc_fm_buffer_prefix_content_params_t) + +#endif /* __FM_VSP_EXT_H */ diff --git a/drivers/net/dpaa/meson.build b/drivers/net/dpaa/meson.build index b2cd555fd..aca1dccc3 100644 --- a/drivers/net/dpaa/meson.build +++ b/drivers/net/dpaa/meson.build @@ -9,6 +9,7 @@ deps += ['mempool_dpaa'] sources = files('dpaa_ethdev.c', 'fmlib/fm_lib.c', + 'fmlib/fm_vsp.c', 'dpaa_rxtx.c') if cc.has_argument('-Wno-pointer-arith')