diff mbox series

[v11,12/19] net/ipn3ke: remove configuration for i40e port bonding

Message ID 1571641024-114601-13-git-send-email-andy.pei@intel.com (mailing list archive)
State Superseded, archived
Delegated to: xiaolong ye
Headers show
Series add PCIe AER disable and IRQ support for ipn3ke | expand

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation fail Compilation issues

Commit Message

Andy Pei Oct. 21, 2019, 6:56 a.m. UTC
From: Rosen Xu <rosen.xu@intel.com>

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 <rosen.xu@intel.com>
Signed-off-by: Andy Pei <andy.pei@intel.com>
---
 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(-)

Comments

Xiaolong Ye Oct. 21, 2019, 7:23 a.m. UTC | #1
+Bruce for the meson change.

Thanks,
Xiaolong

On 10/21, Andy Pei wrote:
>From: Rosen Xu <rosen.xu@intel.com>
>
>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 <rosen.xu@intel.com>
>Signed-off-by: Andy Pei <andy.pei@intel.com>
>---
> 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 <rte_bus_ifpga.h>
> #include <ifpga_common.h>
> #include <ifpga_logs.h>
>+#include <ifpga_rawdev.h>
> 
> #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=<string> "
>-	"fpga_acc=<string>"
>-	"i40e_pf=<string>");
>-
> 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 <rte_rawdev_pmd.h>
> #include <rte_bus_ifpga.h>
> #include <ifpga_logs.h>
>+#include <rte_pmd_i40e.h>
> 
> #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
>
Bruce Richardson Oct. 22, 2019, 11 a.m. UTC | #2
On Mon, Oct 21, 2019 at 03:23:09PM +0800, Ye Xiaolong wrote:
> +Bruce for the meson change.
> 
> Thanks,
> Xiaolong
> 
> On 10/21, Andy Pei wrote:
> >From: Rosen Xu <rosen.xu@intel.com>
> >
> >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 <rosen.xu@intel.com>
> >Signed-off-by: Andy Pei <andy.pei@intel.com>
> >---
> > 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']
> > 

This needs an explanation in the commit log, and possibly should be a
separate patch. The comment on "net" need to be updated explaining why it
comes after raw.

> > 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
> > 

This doesn't belong in this patch. It's covered by:
http://patches.dpdk.org/patch/59470/, so feel free to ack that patch
instead.

> >diff --git a/drivers/net/ipn3ke/Makefile b/drivers/net/ipn3ke/Makefile
> >index 8c3ae37..2c65e49 100644

<snip>

> >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']

Minor nit: rawdev_ifpga already depends on rawdev and buf_ifpga, so you can
drop them to shorten the list if you like.
	deps += ['sched', 'pmd_i40e', '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']

Similarly, if you want to cut this list down: 'kvargs' is always depended
upon by everything since its a dependency of eal, every rawdev already
depends upon the rawdev library and bus_pci depends upon pci.

	deps += ['bus_pci', 'bus_vdev', 'bus_ifpga', 'net']

should work on it's own.

Cutting the dependency list can help speed up configuration a little as fewer
dependency chains need to be iterated.
diff mbox series

Patch

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 <rte_bus_ifpga.h>
 #include <ifpga_common.h>
 #include <ifpga_logs.h>
+#include <ifpga_rawdev.h>
 
 #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=<string> "
-	"fpga_acc=<string>"
-	"i40e_pf=<string>");
-
 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 <rte_rawdev_pmd.h>
 #include <rte_bus_ifpga.h>
 #include <ifpga_logs.h>
+#include <rte_pmd_i40e.h>
 
 #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