> -----Original Message----- > From: David Marchand <david.march...@redhat.com> > Sent: Friday, September 3, 2021 12:45 PM > To: Apeksha Gupta <apeksha.gu...@nxp.com> > Cc: Andrew Rybchenko <andrew.rybche...@oktetlabs.ru>; Yigit, Ferruh > <ferruh.yi...@intel.com>; dev <dev@dpdk.org>; Hemant Agrawal > <hemant.agra...@nxp.com>; Sachin Saxena <sachin.sax...@nxp.com> > Subject: [EXT] Re: [dpdk-dev] [PATCH v2 1/5] net/enetfec: introduce NXP > ENETFEC driver > > Caution: EXT Email > > On Thu, Sep 2, 2021 at 8:01 PM Apeksha Gupta <apeksha.gu...@nxp.com> > wrote: > > > > ENETFEC (Fast Ethernet Controller) is a network poll mode driver > > for NXP SoC i.MX 8M Mini. > > > > This patch adds skeleton for enetfec driver with probe function. > > > > Signed-off-by: Sachin Saxena <sachin.sax...@nxp.com> > > Signed-off-by: Apeksha Gupta <apeksha.gu...@nxp.com> > > --- > > doc/guides/nics/enetfec.rst | 121 ++++++++++++++++++++ > > doc/guides/nics/features/enetfec.ini | 8 ++ > > doc/guides/nics/index.rst | 1 + > > drivers/net/enetfec/enet_ethdev.c | 95 ++++++++++++++++ > > drivers/net/enetfec/enet_ethdev.h | 160 +++++++++++++++++++++++++++ > > drivers/net/enetfec/enet_pmd_logs.h | 31 ++++++ > > drivers/net/enetfec/meson.build | 15 +++ > > drivers/net/enetfec/version.map | 3 + > > drivers/net/meson.build | 1 + > > 9 files changed, 435 insertions(+) > > create mode 100644 doc/guides/nics/enetfec.rst > > create mode 100644 doc/guides/nics/features/enetfec.ini > > create mode 100644 drivers/net/enetfec/enet_ethdev.c > > create mode 100644 drivers/net/enetfec/enet_ethdev.h > > create mode 100644 drivers/net/enetfec/enet_pmd_logs.h > > create mode 100644 drivers/net/enetfec/meson.build > > create mode 100644 drivers/net/enetfec/version.map > > Please update MAINTAINERS and release notes in this first patch. [Apeksha] okay, added in v3. > > > > > diff --git a/doc/guides/nics/enetfec.rst b/doc/guides/nics/enetfec.rst > > new file mode 100644 > > index 0000000000..f151bb26c4 > > --- /dev/null > > +++ b/doc/guides/nics/enetfec.rst > > @@ -0,0 +1,121 @@ > > +.. SPDX-License-Identifier: BSD-3-Clause > > + Copyright 2021 NXP > > + > > +ENETFEC Poll Mode Driver > > +======================== > > + > > +The ENETFEC NIC PMD (**librte_net_enetfec**) provides poll mode driver > > +support for the inbuilt NIC found in the ** NXP i.MX 8M Mini** SoC. > > + > > +More information can be found at NXP Official Website > > > +<https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww. > nxp.com%2Fproducts%2Fprocessors-and-microcontrollers%2Farm- > processors%2Fi-mx-applications-processors%2Fi-mx-8-processors%2Fi-mx-8m- > mini-arm-cortex-a53-cortex-m4-audio-voice- > video%3Ai.MX8MMINI&data=04%7C01%7Capeksha.gupta%40nxp.com%7 > Ca965cce583974ae4b49408d96eaa8a58%7C686ea1d3bc2b4c6fa92cd99c5c301 > 635%7C0%7C1%7C637662501011576537%7CUnknown%7CTWFpbGZsb3d8eyJ > WIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C > 1000&sdata=2iLDhMwWZvZjskijEk6IGUPNLzw8D0xhPsvwJe305ng%3D&am > p;reserved=0> > > + > > +ENETFEC > > +------- > > + > > +This section provides an overview of the NXP ENETFEC and how it is > > +integrated into the DPDK. > > + > > +Contents summary > > + > > +- ENETFEC overview > > +- ENETFEC features > > +- Supported ENETFEC SoCs > > +- Prerequisites > > +- Driver compilation and testing > > +- Limitations > > + > > +ENETFEC Overview > > +~~~~~~~~~~~~~~~~ > > +The i.MX 8M Mini Media Applications Processor is built to achieve both high > > +performance and low power consumption. ENETFEC is a hardware > programmable > > +packet forwarding engine to provide high performance Ethernet interface. > > +The diagram below shows a system level overview of ENETFEC: > > + > > + > ====================================================+============ > === > > + US +-----------------------------------------+ | Kernel Space > > + | | | > > + | ENETFEC Driver | | > > + +-----------------------------------------+ | > > + ^ | | > > + ENETFEC RXQ | | TXQ | > > + PMD | | | > > + | v | +----------+ > > Misalignment of the right part. > > > > + +-------------+ | | fec-uio | > > What is fec-uio? > I can't find it in upstream linux kernel. [Apeksha] fec-uio is the kernel driver. We have also initiated the process of upstreaming it. > > > > + | net_enetfec | | +----------+ > > + +-------------+ | > > + ^ | | > > + TXQ | | RXQ | > > + | | | > > + | v | > > + > ===================================================+============= > == > > + +----------------------------------------+ > > + | | HW > > + | i.MX 8M MINI EVK | > > + | +-----+ | > > + | | MAC | | > > + +---------------+-----+------------------+ > > + | PHY | > > + +-----+ > > Misalignment. > > > > + > > +ENETFEC Ethernet driver is traditional DPDK PMD driver running in the > userspace. > > +The MAC and PHY are the hardware blocks. 'fec-uio' is the UIO driver, > ENETFEC PMD > > +uses UIO interface to interact with kernel for PHY initialisation and for > mapping > > +the allocated memory of register & BD in kernel with DPDK which gives > access to > > +non-cacheable memory for BD. net_enetfec is logical Ethernet interface, > created by > > +ENETFEC driver. > > + > > +- ENETFEC driver registers the device in virtual device driver. > > +- RTE framework scans and will invoke the probe function of ENETFEC driver. > > +- The probe function will set the basic device registers and also setups BD > rings. > > +- On packet Rx the respective BD Ring status bit is set which is then used > > for > > + packet processing. > > +- Then Tx is done first followed by Rx via logical interfaces. > > + > > +ENETFEC Features > > +~~~~~~~~~~~~~~~~~ > > + > > +- ARMv8 > > + > > +Supported ENETFEC SoCs > > +~~~~~~~~~~~~~~~~~~~~~~ > > + > > +- i.MX 8M Mini > > + > > +Prerequisites > > +~~~~~~~~~~~~~ > > + > > +There are three main pre-requisites for executing ENETFEC PMD on a i.MX > 8M Mini > > +compatible board: > > + > > +1. **ARM 64 Tool Chain** > > + > > + For example, the `*aarch64* Linaro Toolchain > <https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Freleases > .linaro.org%2Fcomponents%2Ftoolchain%2Fbinaries%2F7.4- > 2019.02%2Faarch64-linux-gnu%2Fgcc-linaro-7.4.1-2019.02-x86_64_aarch64- > linux- > gnu.tar.xz&data=04%7C01%7Capeksha.gupta%40nxp.com%7Ca965cce583 > 974ae4b49408d96eaa8a58%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C > 1%7C637662501011586493%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjA > wMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sda > ta=mHBmrwivWNwEJiXBQTR8EAADgrZtd44ggXqJFyRJxTA%3D&reserved=0 > >`_. > > + > > +2. **Linux Kernel** > > + > > + It can be obtained from `NXP's Github hosting > <https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fsource. > codeaurora.org%2Fexternal%2Fqoriq%2Fqoriq- > components%2Flinux&data=04%7C01%7Capeksha.gupta%40nxp.com%7Ca > 965cce583974ae4b49408d96eaa8a58%7C686ea1d3bc2b4c6fa92cd99c5c30163 > 5%7C0%7C1%7C637662501011586493%7CUnknown%7CTWFpbGZsb3d8eyJWIj > oiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C100 > 0&sdata=4im4j9xK%2FlTxAa0aVyMFVwQ7Klmy3tnTaYSDtu9yVg8%3D& > ;reserved=0>`_. > > + > > +3. **Rootfile system** > > + > > + Any *aarch64* supporting filesystem can be used. For example, > > + Ubuntu 18.04 LTS (Bionic) or 20.04 LTS(Focal) userland which can be > obtained > > + from `here > <https://eur01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fcdimage. > ubuntu.com%2Fubuntu-base%2Freleases%2F18.04%2Frelease%2Fubuntu-base- > 18.04.1-base- > arm64.tar.gz&data=04%7C01%7Capeksha.gupta%40nxp.com%7Ca965cce5 > 83974ae4b49408d96eaa8a58%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0% > 7C1%7C637662501011586493%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wL > jAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&s > data=jBnLNy7HsO%2BPVDOLY3tCizW%2Bvs%2FA86KjTTe73xBLGPY%3D&r > eserved=0>`_. > > + > > +4. The Ethernet device will be registered as virtual device, so ENETFEC has > dependency on > > + **rte_bus_vdev** library and it is mandatory to use `--vdev` with value > `net_enetfec` to > > + run DPDK application. > > + > > +Driver compilation and testing > > +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > > + > > +Follow instructions available in the document > > +:ref:`compiling and testing a PMD for a NIC <pmd_build_and_test>` > > +to launch **testpmd** > > dpdk-testpmd. > > > > + > > +Limitations > > +~~~~~~~~~~~ > > + > > +- Multi queue is not supported. > > +- Link status is down always. > > +- Single Ethernet interface. > > diff --git a/doc/guides/nics/features/enetfec.ini > b/doc/guides/nics/features/enetfec.ini > > new file mode 100644 > > index 0000000000..5700697981 > > --- /dev/null > > +++ b/doc/guides/nics/features/enetfec.ini > > @@ -0,0 +1,8 @@ > > +; > > +; Supported features of the 'enetfec' network poll mode driver. > > +; > > +; Refer to default.ini for the full list of available PMD features. > > +; > > +[Features] > > +ARMv8 = Y > > +Usage doc = Y > > diff --git a/doc/guides/nics/index.rst b/doc/guides/nics/index.rst > > index 784d5d39f6..777fdab4a0 100644 > > --- a/doc/guides/nics/index.rst > > +++ b/doc/guides/nics/index.rst > > @@ -26,6 +26,7 @@ Network Interface Controller Drivers > > e1000em > > ena > > enetc > > + enetfec > > enic > > fm10k > > hinic > > diff --git a/drivers/net/enetfec/enet_ethdev.c > b/drivers/net/enetfec/enet_ethdev.c > > new file mode 100644 > > index 0000000000..88774788cf > > --- /dev/null > > +++ b/drivers/net/enetfec/enet_ethdev.c > > @@ -0,0 +1,95 @@ > > +/* SPDX-License-Identifier: BSD-3-Clause > > + * Copyright 2020-2021 NXP > > + */ > > + > > +#include <stdio.h> > > +#include <fcntl.h> > > +#include <stdlib.h> > > +#include <unistd.h> > > +#include <errno.h> > > +#include <rte_kvargs.h> > > +#include <ethdev_vdev.h> > > +#include <rte_bus_vdev.h> > > +#include <rte_dev.h> > > +#include <rte_ether.h> > > +#include "enet_ethdev.h" > > +#include "enet_pmd_logs.h" > > + > > +#define ENETFEC_NAME_PMD net_enetfec > > +#define ENETFEC_VDEV_GEM_ID_ARG "intf" > > +#define ENETFEC_CDEV_INVALID_FD -1 > > + > > +int enetfec_logtype_pmd; > > If using RTE_LOG_REGISTER* macros (see below), you don't need this definition. [Apeksha] okay. > > > > + > > +static int > > +enetfec_eth_init(struct rte_eth_dev *dev) > > +{ > > + rte_eth_dev_probing_finish(dev); > > + return 0; > > +} > > + > > +static int > > +pmd_enetfec_probe(struct rte_vdev_device *vdev) > > +{ > > + struct rte_eth_dev *dev = NULL; > > + struct enetfec_private *fep; > > + const char *name; > > + int rc; > > + > > + name = rte_vdev_device_name(vdev); > > + if (name == NULL) > > + return -EINVAL; > > + ENETFEC_PMD_LOG(INFO, "Initializing pmd_fec for %s", name); > > + > > + dev = rte_eth_vdev_allocate(vdev, sizeof(*fep)); > > + if (dev == NULL) > > + return -ENOMEM; > > + > > + /* setup board info structure */ > > + fep = dev->data->dev_private; > > + fep->dev = dev; > > + rc = enetfec_eth_init(dev); > > + if (rc) > > + goto failed_init; > > + > > + return 0; > > + > > +failed_init: > > + ENETFEC_PMD_ERR("Failed to init"); > > + return rc; > > +} > > + > > +static int > > +pmd_enetfec_remove(struct rte_vdev_device *vdev) > > +{ > > + struct rte_eth_dev *eth_dev = NULL; > > + int ret; > > + > > + /* find the ethdev entry */ > > + eth_dev = rte_eth_dev_allocated(rte_vdev_device_name(vdev)); > > + if (eth_dev == NULL) > > + return -ENODEV; > > + > > + ret = rte_eth_dev_release_port(eth_dev); > > + if (ret != 0) > > + return -EINVAL; > > + > > + ENETFEC_PMD_INFO("Closing sw device"); > > + return 0; > > +} > > + > > +static struct rte_vdev_driver pmd_enetfec_drv = { > > + .probe = pmd_enetfec_probe, > > + .remove = pmd_enetfec_remove, > > +}; > > + > > +RTE_PMD_REGISTER_VDEV(ENETFEC_NAME_PMD, pmd_enetfec_drv); > > +RTE_PMD_REGISTER_PARAM_STRING(ENETFEC_NAME_PMD, > ENETFEC_VDEV_GEM_ID_ARG "=<int>"); > > + > > +RTE_INIT(enetfec_pmd_init_log) > > +{ > > + int ret; > > + ret = rte_log_register_type_and_pick_level(ENETFEC_LOGTYPE_PREFIX > "driver", > > + RTE_LOG_NOTICE); > > + enetfec_logtype_pmd = (ret < 0) ? RTE_LOGTYPE_PMD : ret; > > +} > > Please use RTE_LOG_REGISTER_DEFAULT. > > > > diff --git a/drivers/net/enetfec/enet_ethdev.h > b/drivers/net/enetfec/enet_ethdev.h > > new file mode 100644 > > index 0000000000..8c61176fb5 > > --- /dev/null > > +++ b/drivers/net/enetfec/enet_ethdev.h > > @@ -0,0 +1,160 @@ > > +/* SPDX-License-Identifier: BSD-3-Clause > > + * Copyright 2020-2021 NXP > > + */ > > + > > +#ifndef __ENETFEC_ETHDEV_H__ > > +#define __ENETFEC_ETHDEV_H__ > > + > > +#include <compat.h> > > +#include <rte_ethdev.h> > > + > > +/* Common log type name prefix */ > > +#define ENETFEC_LOGTYPE_PREFIX "pmd.net.enetfec." > > + > > +/* > > + * ENETFEC with AVB IP can support maximum 3 rx and tx queues. > > + */ > > +#define ENETFEC_MAX_Q 3 > > + > > +#define BD_LEN 49152 > > +#define ENETFEC_TX_FR_SIZE 2048 > > +#define MAX_TX_BD_RING_SIZE 512 /* It should be power of 2 */ > > +#define MAX_RX_BD_RING_SIZE 512 > > + > > +/* full duplex or half duplex */ > > +#define HALF_DUPLEX 0x00 > > +#define FULL_DUPLEX 0x01 > > +#define UNKNOWN_DUPLEX 0xff > > + > > +#define PKT_MAX_BUF_SIZE 1984 > > +#define OPT_FRAME_SIZE (PKT_MAX_BUF_SIZE << 16) > > +#define ETH_ALEN RTE_ETHER_ADDR_LEN > > +#define ETH_HLEN RTE_ETHER_HDR_LEN > > +#define VLAN_HLEN 4 > > + > > +struct bufdesc { > > + uint16_t bd_datlen; /* buffer data length */ > > + uint16_t bd_sc; /* buffer control & status */ > > + uint32_t bd_bufaddr; /* buffer address */ > > +}; > > + > > +struct bufdesc_ex { > > + struct bufdesc desc; > > + uint32_t bd_esc; > > + uint32_t bd_prot; > > + uint32_t bd_bdu; > > + uint32_t ts; > > + uint16_t res0[4]; > > +}; > > + > > +struct bufdesc_prop { > > + int que_id; > > + /* Addresses of Tx and Rx buffers */ > > + struct bufdesc *base; > > + struct bufdesc *last; > > + struct bufdesc *cur; > > + void __iomem *active_reg_desc; > > + uint64_t descr_baseaddr_p; > > + unsigned short ring_size; > > + unsigned char d_size; > > + unsigned char d_size_log2; > > +}; > > + > > +struct enetfec_priv_tx_q { > > + struct bufdesc_prop bd; > > + struct rte_mbuf *tx_mbuf[MAX_TX_BD_RING_SIZE]; > > + struct bufdesc *dirty_tx; > > + struct rte_mempool *pool; > > + struct enetfec_private *fep; > > +}; > > + > > +struct enetfec_priv_rx_q { > > + struct bufdesc_prop bd; > > + struct rte_mbuf *rx_mbuf[MAX_RX_BD_RING_SIZE]; > > + struct rte_mempool *pool; > > + struct enetfec_private *fep; > > +}; > > + > > +/* Buffer descriptors of FEC are used to track the ring buffers. Buffer > > + * descriptor base is x_bd_base. Currently available buffer are x_cur > > + * and x_cur. where x is rx or tx. Current buffer is tracked by dirty_tx > > + * that is sent by the controller. > > + * The tx_cur and dirty_tx are same in completely full and empty > > + * conditions. Actual condition is determined by empty & ready bits. > > + */ > > +struct enetfec_private { > > + struct rte_eth_dev *dev; > > + struct rte_eth_stats stats; > > + struct rte_mempool *pool; > > + uint16_t max_rx_queues; > > + uint16_t max_tx_queues; > > + unsigned int total_tx_ring_size; > > + unsigned int total_rx_ring_size; > > + bool bufdesc_ex; > > + unsigned int tx_align; > > + unsigned int rx_align; > > + int full_duplex; > > + unsigned int phy_speed; > > + u_int32_t quirks; > > + int flag_csum; > > + int flag_pause; > > + int flag_wol; > > + bool rgmii_txc_delay; > > + bool rgmii_rxc_delay; > > + int link; > > + void *hw_baseaddr_v; > > + uint64_t hw_baseaddr_p; > > + void *bd_addr_v; > > + uint64_t bd_addr_p; > > + uint64_t bd_addr_p_r[ENETFEC_MAX_Q]; > > + uint64_t bd_addr_p_t[ENETFEC_MAX_Q]; > > + void *dma_baseaddr_r[ENETFEC_MAX_Q]; > > + void *dma_baseaddr_t[ENETFEC_MAX_Q]; > > + uint64_t cbus_size; > > + unsigned int reg_size; > > + unsigned int bd_size; > > + int hw_ts_rx_en; > > + int hw_ts_tx_en; > > + struct enetfec_priv_rx_q *rx_queues[ENETFEC_MAX_Q]; > > + struct enetfec_priv_tx_q *tx_queues[ENETFEC_MAX_Q]; > > +}; > > + > > +#define writel(v, p) ({*(volatile unsigned int *)(p) = (v); }) > > +#define readl(p) rte_read32(p) > > + > > +static inline struct > > +bufdesc *enet_get_nextdesc(struct bufdesc *bdp, struct bufdesc_prop *bd) > > +{ > > + return (bdp >= bd->last) ? bd->base > > + : (struct bufdesc *)(((void *)bdp) + bd->d_size); > > +} > > + > > +static inline struct > > +bufdesc *enet_get_prevdesc(struct bufdesc *bdp, struct bufdesc_prop *bd) > > +{ > > + return (bdp <= bd->base) ? bd->last > > + : (struct bufdesc *)(((void *)bdp) - bd->d_size); > > +} > > + > > +static inline int > > +enet_get_bd_index(struct bufdesc *bdp, struct bufdesc_prop *bd) > > +{ > > + return ((const char *)bdp - (const char *)bd->base) >> > > bd->d_size_log2; > > +} > > + > > +static inline int > > +fls64(unsigned long word) > > +{ > > + return (64 - __builtin_clzl(word)) - 1; > > +} > > + > > +uint16_t enetfec_recv_pkts(void *rxq1, __rte_unused struct rte_mbuf > **rx_pkts, > > + uint16_t nb_pkts); > > +uint16_t enetfec_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, > > + uint16_t nb_pkts); > > +struct bufdesc *enet_get_nextdesc(struct bufdesc *bdp, > > + struct bufdesc_prop *bd); > > +int enet_new_rxbdp(struct enetfec_private *fep, struct bufdesc *bdp, > > + struct rte_mbuf *mbuf); > > + > > +#endif /*__ENETFEC_ETHDEV_H__*/ > > diff --git a/drivers/net/enetfec/enet_pmd_logs.h > b/drivers/net/enetfec/enet_pmd_logs.h > > new file mode 100644 > > index 0000000000..e7b3964a0e > > --- /dev/null > > +++ b/drivers/net/enetfec/enet_pmd_logs.h > > @@ -0,0 +1,31 @@ > > +/* SPDX-License-Identifier: BSD-3-Clause > > + * Copyright 2020-2021 NXP > > + */ > > + > > +#ifndef _ENETFEC_LOGS_H_ > > +#define _ENETFEC_LOGS_H_ > > + > > +extern int enetfec_logtype_pmd; > > + > > +/* PMD related logs */ > > +#define ENETFEC_PMD_LOG(level, fmt, args...) \ > > + rte_log(RTE_LOG_ ## level, enetfec_logtype_pmd, "\nfec_net: %s()" \ > > + fmt "\n", __func__, ##args) > > + > > +#define PMD_INIT_FUNC_TRACE() ENET_PMD_LOG(DEBUG, " >>") > > + > > +#define ENETFEC_PMD_DEBUG(fmt, args...) \ > > + ENETFEC_PMD_LOG(DEBUG, fmt, ## args) > > +#define ENETFEC_PMD_ERR(fmt, args...) \ > > + ENETFEC_PMD_LOG(ERR, fmt, ## args) > > +#define ENETFEC_PMD_INFO(fmt, args...) \ > > + ENETFEC_PMD_LOG(INFO, fmt, ## args) > > + > > +#define ENETFEC_PMD_WARN(fmt, args...) \ > > + ENETFEC_PMD_LOG(WARNING, fmt, ## args) > > + > > +/* DP Logs, toggled out at compile time if level lower than current level > > */ > > +#define ENETFEC_DP_LOG(level, fmt, args...) \ > > + RTE_LOG_DP(level, PMD, fmt, ## args) > > + > > +#endif /* _ENETFEC_LOGS_H_ */ > > diff --git a/drivers/net/enetfec/meson.build > b/drivers/net/enetfec/meson.build > > new file mode 100644 > > index 0000000000..252bf83309 > > --- /dev/null > > +++ b/drivers/net/enetfec/meson.build > > @@ -0,0 +1,15 @@ > > +# SPDX-License-Identifier: BSD-3-Clause > > +# Copyright 2021 NXP > > + > > +if not is_linux > > + build = false > > + reason = 'only supported on linux' > > The doc specifies that only armv8 is supported. > > > > +endif > > + > > +deps += ['common_dpaax'] > > + > > +sources = files('enet_ethdev.c') > > + > > +if cc.has_argument('-Wno-pointer-arith') > > + cflags += '-Wno-pointer-arith' > > +endif > > Can't this be fixed in the code rather than ignored? > > > > diff --git a/drivers/net/enetfec/version.map > b/drivers/net/enetfec/version.map > > new file mode 100644 > > index 0000000000..170c04fe53 > > --- /dev/null > > +++ b/drivers/net/enetfec/version.map > > @@ -0,0 +1,3 @@ > > +DPDK_20.0 { > > Wrong ABI version. > > > > + local: *; > > +}; > > diff --git a/drivers/net/meson.build b/drivers/net/meson.build > > index bcf488f203..92f433d5e8 100644 > > --- a/drivers/net/meson.build > > +++ b/drivers/net/meson.build > > @@ -19,6 +19,7 @@ drivers = [ > > 'e1000', > > 'ena', > > 'enetc', > > + 'enetfec', > > Indent. > > > > 'enic', > > 'failsafe', > > 'fm10k', > > -- > > 2.17.1 > > > > -- > David Marchand