From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id EED94A3201 for ; Mon, 21 Oct 2019 09:26:15 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id BEA3B2BF7; Mon, 21 Oct 2019 09:26:14 +0200 (CEST) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by dpdk.org (Postfix) with ESMTP id 1D2732BDB for ; Mon, 21 Oct 2019 09:26:12 +0200 (CEST) X-Amp-Result: UNKNOWN X-Amp-Original-Verdict: FILE UNKNOWN X-Amp-File-Uploaded: False Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 21 Oct 2019 00:26:11 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.67,322,1566889200"; d="scan'208";a="203266521" Received: from yexl-server.sh.intel.com (HELO localhost) ([10.67.117.17]) by FMSMGA003.fm.intel.com with ESMTP; 21 Oct 2019 00:26:10 -0700 Date: Mon, 21 Oct 2019 15:23:09 +0800 From: Ye Xiaolong To: Andy Pei , Bruce Richardson Cc: dev@dpdk.org, rosen.xu@intel.com, tianfei.zhang@intel.com, qi.z.zhang@intel.com Message-ID: <20191021072309.GA23340@intel.com> References: <1571639001-106193-2-git-send-email-andy.pei@intel.com> <1571641024-114601-1-git-send-email-andy.pei@intel.com> <1571641024-114601-13-git-send-email-andy.pei@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1571641024-114601-13-git-send-email-andy.pei@intel.com> User-Agent: Mutt/1.9.4 (2018-02-28) Subject: Re: [dpdk-dev] [PATCH v11 12/19] net/ipn3ke: remove configuration for i40e port bonding 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" +Bruce for the meson change. Thanks, Xiaolong On 10/21, Andy Pei wrote: >From: Rosen Xu > >The ipn3ke board FPGA and i40e BDF scan has added in ifpga_rawdev, >so it doesn't need to provide configuration for i40e port bonding. > >Signed-off-by: Rosen Xu >Signed-off-by: Andy Pei >--- > drivers/meson.build | 7 +- > drivers/net/ipn3ke/Makefile | 2 + > drivers/net/ipn3ke/ipn3ke_ethdev.c | 289 +++---------------------- > drivers/net/ipn3ke/ipn3ke_representor.c | 8 +- > drivers/net/ipn3ke/meson.build | 2 +- > drivers/raw/ifpga/meson.build | 6 + > drivers/raw/ifpga/rte_rawdev_ifpga_version.map | 6 + > 7 files changed, 62 insertions(+), 258 deletions(-) > >diff --git a/drivers/meson.build b/drivers/meson.build >index 2ed2e95..afdbb3b 100644 >--- a/drivers/meson.build >+++ b/drivers/meson.build >@@ -9,12 +9,12 @@ endif > dpdk_driver_classes = ['common', > 'bus', > 'mempool', # depends on common and bus. >+ 'raw', > 'net', # depends on common, bus and mempool. > 'crypto', # depends on common, bus and mempool (net in future). > 'compress', # depends on common, bus, mempool. > 'event', # depends on common, bus, mempool and net. >- 'baseband', # depends on common and bus. >- 'raw'] # depends on common, bus, mempool, net and event. >+ 'baseband'] > > default_cflags = machine_args > if cc.has_argument('-Wno-format-truncation') >@@ -157,6 +157,9 @@ foreach class:dpdk_driver_classes > > set_variable('shared_@0@'.format(lib_name), shared_dep) > set_variable('static_@0@'.format(lib_name), static_dep) >+ dependency_name = ''.join(lib_name.split('rte_')) >+ message('drivers/@0@: Defining dependency "@1@"'.format( >+ drv_path, dependency_name)) > endif # build > endforeach > >diff --git a/drivers/net/ipn3ke/Makefile b/drivers/net/ipn3ke/Makefile >index 8c3ae37..2c65e49 100644 >--- a/drivers/net/ipn3ke/Makefile >+++ b/drivers/net/ipn3ke/Makefile >@@ -19,6 +19,8 @@ CFLAGS += -DALLOW_EXPERIMENTAL_API > CFLAGS += -O3 > CFLAGS += $(WERROR_FLAGS) > CFLAGS += -I$(RTE_SDK)/drivers/bus/ifpga >+CFLAGS += -I$(RTE_SDK)/drivers/raw/ifpga >+CFLAGS += -I$(RTE_SDK)/drivers/net/i40e > LDLIBS += -lrte_eal -lrte_mbuf -lrte_mempool -lrte_ring > LDLIBS += -lrte_ethdev -lrte_net -lrte_kvargs > LDLIBS += -lrte_bus_ifpga >diff --git a/drivers/net/ipn3ke/ipn3ke_ethdev.c b/drivers/net/ipn3ke/ipn3ke_ethdev.c >index 28d8aaf..3051cdf 100644 >--- a/drivers/net/ipn3ke/ipn3ke_ethdev.c >+++ b/drivers/net/ipn3ke/ipn3ke_ethdev.c >@@ -19,6 +19,7 @@ > #include > #include > #include >+#include > > #include "ipn3ke_rawdev_api.h" > #include "ipn3ke_flow.h" >@@ -324,7 +325,8 @@ > "LineSideMACType", &mac_type); > hw->retimer.mac_type = (int)mac_type; > >- IPN3KE_AFU_PMD_DEBUG("UPL_version is 0x%x\n", IPN3KE_READ_REG(hw, 0)); >+ hw->acc_tm = 0; >+ hw->acc_flow = 0; > > if (afu_dev->id.uuid.uuid_low == IPN3KE_UUID_VBNG_LOW && > afu_dev->id.uuid.uuid_high == IPN3KE_UUID_VBNG_HIGH) { >@@ -342,6 +344,12 @@ > /* After reset, wait until init done */ > if (ipn3ke_vbng_init_done(hw)) > return -1; >+ >+ hw->acc_tm = 1; >+ hw->acc_flow = 1; >+ >+ IPN3KE_AFU_PMD_DEBUG("UPL_version is 0x%x\n", >+ IPN3KE_READ_REG(hw, 0)); > } > > if (hw->retimer.mac_type == IFPGA_RAWDEV_RETIMER_MAC_TYPE_10GE_XFI) { >@@ -409,9 +417,6 @@ > hw->flow_hw_enable = 1; > } > >- hw->acc_tm = 0; >- hw->acc_flow = 0; >- > return 0; > } > >@@ -462,7 +467,11 @@ static int ipn3ke_vswitch_probe(struct rte_afu_device *afu_dev) > { > char name[RTE_ETH_NAME_MAX_LEN]; > struct ipn3ke_hw *hw; >- int i, retval; >+ struct rte_eth_dev *i40e_eth; >+ struct ifpga_rawdev *ifpga_dev; >+ uint16_t port_id; >+ int i, j, retval; >+ char *fvl_bdf; > > /* check if the AFU device has been probed already */ > /* allocate shared mcp_vswitch structure */ >@@ -489,7 +498,12 @@ static int ipn3ke_vswitch_probe(struct rte_afu_device *afu_dev) > if (retval) > return retval; > >+ ifpga_dev = ifpga_rawdev_get(hw->rawdev); >+ if (!ifpga_dev) >+ IPN3KE_AFU_PMD_ERR("failed to find ifpga_device."); >+ > /* probe representor ports */ >+ j = 0; > for (i = 0; i < hw->port_num; i++) { > struct ipn3ke_rpst rpst = { > .port_id = i, >@@ -501,6 +515,22 @@ static int ipn3ke_vswitch_probe(struct rte_afu_device *afu_dev) > snprintf(name, sizeof(name), "net_%s_representor_%d", > afu_dev->device.name, i); > >+ for (; j < 8; j++) { >+ fvl_bdf = ifpga_dev->fvl_bdf[j]; >+ retval = rte_eth_dev_get_port_by_name(fvl_bdf, >+ &port_id); >+ if (retval) { >+ continue; >+ } else { >+ i40e_eth = &rte_eth_devices[port_id]; >+ rpst.i40e_pf_eth = i40e_eth; >+ rpst.i40e_pf_eth_port_id = port_id; >+ >+ j++; >+ break; >+ } >+ } >+ > retval = rte_eth_dev_create(&afu_dev->device, name, > sizeof(struct ipn3ke_rpst), NULL, NULL, > ipn3ke_rpst_init, &rpst); >@@ -508,6 +538,7 @@ static int ipn3ke_vswitch_probe(struct rte_afu_device *afu_dev) > if (retval) > IPN3KE_AFU_PMD_ERR("failed to create ipn3ke representor %s.", > name); >+ > } > > return 0; >@@ -553,254 +584,6 @@ static int ipn3ke_vswitch_remove(struct rte_afu_device *afu_dev) > > RTE_PMD_REGISTER_AFU(net_ipn3ke_afu, afu_ipn3ke_driver); > >-static const char * const valid_args[] = { >-#define IPN3KE_AFU_NAME "afu" >- IPN3KE_AFU_NAME, >-#define IPN3KE_FPGA_ACCELERATION_LIST "fpga_acc" >- IPN3KE_FPGA_ACCELERATION_LIST, >-#define IPN3KE_I40E_PF_LIST "i40e_pf" >- IPN3KE_I40E_PF_LIST, >- NULL >-}; >- >-static int >-ipn3ke_cfg_parse_acc_list(const char *afu_name, >- const char *acc_list_name) >-{ >- struct rte_afu_device *afu_dev; >- struct ipn3ke_hw *hw; >- const char *p_source; >- char *p_start; >- char name[RTE_ETH_NAME_MAX_LEN]; >- >- afu_dev = rte_ifpga_find_afu_by_name(afu_name); >- if (!afu_dev) >- return -1; >- hw = afu_dev->shared.data; >- if (!hw) >- return -1; >- >- p_source = acc_list_name; >- while (*p_source) { >- while ((*p_source == '{') || (*p_source == '|')) >- p_source++; >- p_start = name; >- while ((*p_source != '|') && (*p_source != '}')) >- *p_start++ = *p_source++; >- *p_start = 0; >- if (!strcmp(name, "tm") && hw->tm_hw_enable) >- hw->acc_tm = 1; >- >- if (!strcmp(name, "flow") && hw->flow_hw_enable) >- hw->acc_flow = 1; >- >- if (*p_source == '}') >- return 0; >- } >- >- return 0; >-} >- >-static int >-ipn3ke_cfg_parse_i40e_pf_ethdev(const char *afu_name, >- const char *pf_name) >-{ >- struct rte_eth_dev *i40e_eth, *rpst_eth; >- struct rte_afu_device *afu_dev; >- struct ipn3ke_rpst *rpst; >- struct ipn3ke_hw *hw; >- const char *p_source; >- char *p_start; >- char name[RTE_ETH_NAME_MAX_LEN]; >- uint16_t port_id; >- int i; >- int ret = -1; >- >- afu_dev = rte_ifpga_find_afu_by_name(afu_name); >- if (!afu_dev) >- return -1; >- hw = afu_dev->shared.data; >- if (!hw) >- return -1; >- >- p_source = pf_name; >- for (i = 0; i < hw->port_num; i++) { >- snprintf(name, sizeof(name), "net_%s_representor_%d", >- afu_name, i); >- ret = rte_eth_dev_get_port_by_name(name, &port_id); >- if (ret) >- return -1; >- rpst_eth = &rte_eth_devices[port_id]; >- rpst = IPN3KE_DEV_PRIVATE_TO_RPST(rpst_eth); >- >- while ((*p_source == '{') || (*p_source == '|')) >- p_source++; >- p_start = name; >- while ((*p_source != '|') && (*p_source != '}')) >- *p_start++ = *p_source++; >- *p_start = 0; >- >- ret = rte_eth_dev_get_port_by_name(name, &port_id); >- if (ret) >- return -1; >- i40e_eth = &rte_eth_devices[port_id]; >- >- rpst->i40e_pf_eth = i40e_eth; >- rpst->i40e_pf_eth_port_id = port_id; >- >- if ((*p_source == '}') || !(*p_source)) >- break; >- } >- >- return 0; >-} >- >-static int >-ipn3ke_cfg_probe(struct rte_vdev_device *dev) >-{ >- struct rte_devargs *devargs; >- struct rte_kvargs *kvlist = NULL; >- char *afu_name = NULL; >- char *acc_name = NULL; >- char *pf_name = NULL; >- int afu_name_en = 0; >- int acc_list_en = 0; >- int pf_list_en = 0; >- int ret = -1; >- >- devargs = dev->device.devargs; >- >- kvlist = rte_kvargs_parse(devargs->args, valid_args); >- if (!kvlist) { >- IPN3KE_AFU_PMD_ERR("error when parsing param"); >- goto end; >- } >- >- if (rte_kvargs_count(kvlist, IPN3KE_AFU_NAME) == 1) { >- if (rte_kvargs_process(kvlist, IPN3KE_AFU_NAME, >- &rte_ifpga_get_string_arg, >- &afu_name) < 0) { >- IPN3KE_AFU_PMD_ERR("error to parse %s", >- IPN3KE_AFU_NAME); >- goto end; >- } else { >- afu_name_en = 1; >- } >- } >- >- if (rte_kvargs_count(kvlist, IPN3KE_FPGA_ACCELERATION_LIST) == 1) { >- if (rte_kvargs_process(kvlist, IPN3KE_FPGA_ACCELERATION_LIST, >- &rte_ifpga_get_string_arg, >- &acc_name) < 0) { >- IPN3KE_AFU_PMD_ERR("error to parse %s", >- IPN3KE_FPGA_ACCELERATION_LIST); >- goto end; >- } else { >- acc_list_en = 1; >- } >- } >- >- if (rte_kvargs_count(kvlist, IPN3KE_I40E_PF_LIST) == 1) { >- if (rte_kvargs_process(kvlist, IPN3KE_I40E_PF_LIST, >- &rte_ifpga_get_string_arg, >- &pf_name) < 0) { >- IPN3KE_AFU_PMD_ERR("error to parse %s", >- IPN3KE_I40E_PF_LIST); >- goto end; >- } else { >- pf_list_en = 1; >- } >- } >- >- if (!afu_name_en) { >- IPN3KE_AFU_PMD_ERR("arg %s is mandatory for ipn3ke", >- IPN3KE_AFU_NAME); >- goto end; >- } >- >- if (!pf_list_en) { >- IPN3KE_AFU_PMD_ERR("arg %s is mandatory for ipn3ke", >- IPN3KE_I40E_PF_LIST); >- goto end; >- } >- >- if (acc_list_en) { >- ret = ipn3ke_cfg_parse_acc_list(afu_name, acc_name); >- if (ret) { >- IPN3KE_AFU_PMD_ERR("arg %s parse error for ipn3ke", >- IPN3KE_FPGA_ACCELERATION_LIST); >- goto end; >- } >- } else { >- IPN3KE_AFU_PMD_INFO("arg %s is optional for ipn3ke, using i40e acc", >- IPN3KE_FPGA_ACCELERATION_LIST); >- } >- >- ret = ipn3ke_cfg_parse_i40e_pf_ethdev(afu_name, pf_name); >- if (ret) >- goto end; >-end: >- if (kvlist) >- rte_kvargs_free(kvlist); >- if (afu_name) >- free(afu_name); >- if (acc_name) >- free(acc_name); >- >- return ret; >-} >- >-static int >-ipn3ke_cfg_remove(struct rte_vdev_device *dev) >-{ >- struct rte_devargs *devargs; >- struct rte_kvargs *kvlist = NULL; >- char *afu_name = NULL; >- struct rte_afu_device *afu_dev; >- int ret = -1; >- >- devargs = dev->device.devargs; >- >- kvlist = rte_kvargs_parse(devargs->args, valid_args); >- if (!kvlist) { >- IPN3KE_AFU_PMD_ERR("error when parsing param"); >- goto end; >- } >- >- if (rte_kvargs_count(kvlist, IPN3KE_AFU_NAME) == 1) { >- if (rte_kvargs_process(kvlist, IPN3KE_AFU_NAME, >- &rte_ifpga_get_string_arg, >- &afu_name) < 0) { >- IPN3KE_AFU_PMD_ERR("error to parse %s", >- IPN3KE_AFU_NAME); >- } else { >- afu_dev = rte_ifpga_find_afu_by_name(afu_name); >- if (!afu_dev) >- goto end; >- ret = ipn3ke_vswitch_remove(afu_dev); >- } >- } else { >- IPN3KE_AFU_PMD_ERR("Remove ipn3ke_cfg %p error", dev); >- } >- >-end: >- if (kvlist) >- rte_kvargs_free(kvlist); >- >- return ret; >-} >- >-static struct rte_vdev_driver ipn3ke_cfg_driver = { >- .probe = ipn3ke_cfg_probe, >- .remove = ipn3ke_cfg_remove, >-}; >- >-RTE_PMD_REGISTER_VDEV(ipn3ke_cfg, ipn3ke_cfg_driver); >-RTE_PMD_REGISTER_PARAM_STRING(ipn3ke_cfg, >- "afu= " >- "fpga_acc=" >- "i40e_pf="); >- > RTE_INIT(ipn3ke_afu_init_log) > { > ipn3ke_afu_logtype = rte_log_register("pmd.afu.ipn3ke"); >diff --git a/drivers/net/ipn3ke/ipn3ke_representor.c b/drivers/net/ipn3ke/ipn3ke_representor.c >index d37f5e2..7e5d29d 100644 >--- a/drivers/net/ipn3ke/ipn3ke_representor.c >+++ b/drivers/net/ipn3ke/ipn3ke_representor.c >@@ -20,6 +20,7 @@ > #include > #include > #include >+#include > > #include "ipn3ke_rawdev_api.h" > #include "ipn3ke_flow.h" >@@ -2918,8 +2919,11 @@ static uint16_t ipn3ke_rpst_recv_pkts(__rte_unused void *rx_q, > rpst->switch_domain_id = representor_param->switch_domain_id; > rpst->port_id = representor_param->port_id; > rpst->hw = representor_param->hw; >- rpst->i40e_pf_eth = NULL; >- rpst->i40e_pf_eth_port_id = 0xFFFF; >+ rpst->i40e_pf_eth = representor_param->i40e_pf_eth; >+ rpst->i40e_pf_eth_port_id = representor_param->i40e_pf_eth_port_id; >+ if (rpst->i40e_pf_eth) >+ rte_pmd_i40e_set_switch_dev(rpst->i40e_pf_eth_port_id, >+ rpst->ethdev); > > ethdev->data->mac_addrs = rte_zmalloc("ipn3ke", RTE_ETHER_ADDR_LEN, 0); > if (!ethdev->data->mac_addrs) { >diff --git a/drivers/net/ipn3ke/meson.build b/drivers/net/ipn3ke/meson.build >index 74b4d7c..4ea57b9 100644 >--- a/drivers/net/ipn3ke/meson.build >+++ b/drivers/net/ipn3ke/meson.build >@@ -14,4 +14,4 @@ sources += files('ipn3ke_ethdev.c', > 'ipn3ke_representor.c', > 'ipn3ke_tm.c', > 'ipn3ke_flow.c') >-deps += ['bus_ifpga', 'sched'] >+deps += ['bus_ifpga', 'sched', 'pmd_i40e', 'rawdev', 'rawdev_ifpga'] >diff --git a/drivers/raw/ifpga/meson.build b/drivers/raw/ifpga/meson.build >index 0ab6fd7..dbd74b9 100644 >--- a/drivers/raw/ifpga/meson.build >+++ b/drivers/raw/ifpga/meson.build >@@ -8,13 +8,19 @@ objs = [base_objs] > > dep = dependency('libfdt', required: false) > if not dep.found() >+ dep = cc.find_library('libfdt', required: false) >+endif >+if not dep.found() > build = false > reason = 'missing dependency, "libfdt"' > endif > deps += ['rawdev', 'pci', 'bus_pci', 'kvargs', > 'bus_vdev', 'bus_ifpga', 'net'] >+ext_deps += dep >+ > sources = files('ifpga_rawdev.c') > > includes += include_directories('base') >+includes += include_directories('../../net/ipn3ke') > > allow_experimental_apis = true >diff --git a/drivers/raw/ifpga/rte_rawdev_ifpga_version.map b/drivers/raw/ifpga/rte_rawdev_ifpga_version.map >index 9b9ab1a..acea4d7 100644 >--- a/drivers/raw/ifpga/rte_rawdev_ifpga_version.map >+++ b/drivers/raw/ifpga/rte_rawdev_ifpga_version.map >@@ -2,3 +2,9 @@ DPDK_18.05 { > > local: *; > }; >+ >+EXPERIMENTAL { >+ global: >+ >+ ifpga_rawdev_get; >+} DPDK_18.05; >\ No newline at end of file >-- >1.8.3.1 >