From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id A0F7DA0C46; Wed, 9 Jun 2021 12:46:13 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id C7AEA4069B; Wed, 9 Jun 2021 12:46:12 +0200 (CEST) Received: from mail-pf1-f172.google.com (mail-pf1-f172.google.com [209.85.210.172]) by mails.dpdk.org (Postfix) with ESMTP id 7FB8C4003C for ; Wed, 9 Jun 2021 12:46:11 +0200 (CEST) Received: by mail-pf1-f172.google.com with SMTP id g6so18102018pfq.1 for ; Wed, 09 Jun 2021 03:46:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to; bh=5ueInGOQvW8bPB3vZrzKHjP4TLLTGMc7xjKgB8vZWPQ=; b=AEEhZYpJ9l4/pKbWHSW2IA9L8RsY5MOhU0CzGxspyqhA/m6FuYCpYd1lWeBl7wjg1s CUFAm6U0UKOPXKDaJ6i6sGxF/ZmeIn8mKhF3AJBbMY+hRheu7ZaUTlzDCU4+G/Y6Ex8L JqcvDB8p8YE6Po9x+iOOdzqbMft3dCugvUP2kneeFXuAnvLz/iMPpd9lroJm7wNLJ5np vonBflNOmLROroOoQ3kceRWfRxDi1jcSMo++aFqitkHgBA6g6c1R0FnNN3VYzcjhwyMU b9OULR4Wn2NoHt5tFYmKZ7URBLfGaSifW0yGwNSzUudah0lj2l4pkcjrsXSrZtHZFtqr d+wQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=5ueInGOQvW8bPB3vZrzKHjP4TLLTGMc7xjKgB8vZWPQ=; b=Vm4uBUA2Tt7YE2GrhYd9k6sQyTVGIOml+Ysxew2pZHV0xD4bEt5Ay+aYCYDEOsTVJm nHglauTJKaUAAX7gW3Xl51LHFqFe56yheOV2NEKYltQm2k238+6biAj+F+fSxuEaPP5B tnD8hpIm03ThwD7Sdnr5lz+nYXGpeBMZW2L8CidUmNHoo7n8qT5vbEdDnxmBRNv+REIe bAeSi+7rAJApqhwi2uiJdix2ocUsKhkDB0RJI9e1j8j5eh5P+9zb+x1T3VGYceQpTh5s xtKCdoUGFXPZ/yn4uGNREivgLzmzsT4EVuVXZhQLcOsAhvvZIcL/HzwN7n18hXYDzth/ +30A== X-Gm-Message-State: AOAM530eMNDl7CKHDDbSVuaekjdNgoNjU3m6B+kOWErOXEDrPy7Kd9am S0W1u8fknqderMxJ7QFgK8U= X-Google-Smtp-Source: ABdhPJxSB1u4cYi3vq5YD4wHIhQcu41gEN6Fgk6AJr9AY0OYZc+IrjtdrP+apIAT7VVi5e8kcORvCA== X-Received: by 2002:a63:4e4f:: with SMTP id o15mr3237886pgl.208.1623235570515; Wed, 09 Jun 2021 03:46:10 -0700 (PDT) Received: from gmail.com ([1.6.215.26]) by smtp.gmail.com with ESMTPSA id r10sm14977417pga.48.2021.06.09.03.46.07 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 09 Jun 2021 03:46:09 -0700 (PDT) Date: Wed, 9 Jun 2021 16:15:39 +0530 From: Nithin Dabilpuram To: Huisong Li Cc: dev@dpdk.org, jerinj@marvell.com, skori@marvell.com, skoteshwar@marvell.com, pbhagavatula@marvell.com, kirankumark@marvell.com, psatheesh@marvell.com, asekhar@marvell.com Message-ID: References: <20210306153404.10781-1-ndabilpuram@marvell.com> <20210607175943.31690-1-ndabilpuram@marvell.com> <20210607175943.31690-10-ndabilpuram@marvell.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: Subject: Re: [dpdk-dev] [PATCH v2 09/62] net/cnxk: add build infra and common probe X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 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" On Wed, Jun 09, 2021 at 09:38:04AM +0800, Huisong Li wrote: > > 在 2021/6/8 1:58, Nithin Dabilpuram 写道: > > Add build infrastructure and common probe and remove for cnxk driver > > which is used by both CN10K and CN9K SoC. > > > > Signed-off-by: Nithin Dabilpuram > > --- > > MAINTAINERS | 3 + > > doc/guides/nics/cnxk.rst | 29 +++++ > > doc/guides/nics/features/cnxk.ini | 9 ++ > > doc/guides/nics/features/cnxk_vec.ini | 9 ++ > > doc/guides/nics/features/cnxk_vf.ini | 9 ++ > > doc/guides/nics/index.rst | 1 + > > doc/guides/platform/cnxk.rst | 3 + > > drivers/net/cnxk/cnxk_ethdev.c | 219 ++++++++++++++++++++++++++++++++++ > > drivers/net/cnxk/cnxk_ethdev.h | 57 +++++++++ > > drivers/net/cnxk/meson.build | 21 ++++ > > drivers/net/cnxk/version.map | 3 + > > drivers/net/meson.build | 1 + > > 12 files changed, 364 insertions(+) > > create mode 100644 doc/guides/nics/cnxk.rst > > create mode 100644 doc/guides/nics/features/cnxk.ini > > create mode 100644 doc/guides/nics/features/cnxk_vec.ini > > create mode 100644 doc/guides/nics/features/cnxk_vf.ini > > create mode 100644 drivers/net/cnxk/cnxk_ethdev.c > > create mode 100644 drivers/net/cnxk/cnxk_ethdev.h > > create mode 100644 drivers/net/cnxk/meson.build > > create mode 100644 drivers/net/cnxk/version.map > > > > diff --git a/MAINTAINERS b/MAINTAINERS > > index 5877a16..2be220e 100644 > > --- a/MAINTAINERS > > +++ b/MAINTAINERS > > @@ -746,6 +746,9 @@ M: Sunil Kumar Kori > > M: Satha Rao > > T: git://dpdk.org/next/dpdk-next-net-mrvl > > F: drivers/common/cnxk/ > > +F: drivers/net/cnxk/ > > +F: doc/guides/nics/cnxk.rst > > +F: doc/guides/nics/features/cnxk*.ini > > F: doc/guides/platform/cnxk.rst > > Marvell mvpp2 > > diff --git a/doc/guides/nics/cnxk.rst b/doc/guides/nics/cnxk.rst > > new file mode 100644 > > index 0000000..ca21842 > > --- /dev/null > > +++ b/doc/guides/nics/cnxk.rst > > @@ -0,0 +1,29 @@ > > +.. SPDX-License-Identifier: BSD-3-Clause > > + Copyright(C) 2021 Marvell. > > + > > +CNXK Poll Mode driver > > +===================== > > + > > +The CNXK ETHDEV PMD (**librte_net_cnxk**) provides poll mode ethdev driver > > +support for the inbuilt network device found in **Marvell OCTEON CN9K/CN10K** > > +SoC family as well as for their virtual functions (VF) in SR-IOV context. > > + > > +More information can be found at `Marvell Official Website > > +`_. > > + > > +Features > > +-------- > > + > > +Features of the CNXK Ethdev PMD are: > > + > > +Prerequisites > > +------------- > > + > > +See :doc:`../platform/cnxk` for setup information. > > + > > + > > +Driver compilation and testing > > +------------------------------ > > + > > +Refer to the document :ref:`compiling and testing a PMD for a NIC ` > > +for details. > > diff --git a/doc/guides/nics/features/cnxk.ini b/doc/guides/nics/features/cnxk.ini > > new file mode 100644 > > index 0000000..2c23464 > > --- /dev/null > > +++ b/doc/guides/nics/features/cnxk.ini > > @@ -0,0 +1,9 @@ > > +; > > +; Supported features of the 'cnxk' network poll mode driver. > > +; > > +; Refer to default.ini for the full list of available PMD features. > > +; > > +[Features] > > +Linux = Y > > +ARMv8 = Y > > +Usage doc = Y > > diff --git a/doc/guides/nics/features/cnxk_vec.ini b/doc/guides/nics/features/cnxk_vec.ini > > new file mode 100644 > > index 0000000..de78516 > > --- /dev/null > > +++ b/doc/guides/nics/features/cnxk_vec.ini > > @@ -0,0 +1,9 @@ > > +; > > +; Supported features of the 'cnxk_vec' network poll mode driver. > > +; > > +; Refer to default.ini for the full list of available PMD features. > > +; > > +[Features] > > +Linux = Y > > +ARMv8 = Y > > +Usage doc = Y > > diff --git a/doc/guides/nics/features/cnxk_vf.ini b/doc/guides/nics/features/cnxk_vf.ini > > new file mode 100644 > > index 0000000..9c96351 > > --- /dev/null > > +++ b/doc/guides/nics/features/cnxk_vf.ini > > @@ -0,0 +1,9 @@ > > +; > > +; Supported features of the 'cnxk_vf' network poll mode driver. > > +; > > +; Refer to default.ini for the full list of available PMD features. > > +; > > +[Features] > > +Linux = Y > > +ARMv8 = Y > > +Usage doc = Y > > diff --git a/doc/guides/nics/index.rst b/doc/guides/nics/index.rst > > index 799697c..c1a04d9 100644 > > --- a/doc/guides/nics/index.rst > > +++ b/doc/guides/nics/index.rst > > @@ -19,6 +19,7 @@ Network Interface Controller Drivers > > axgbe > > bnx2x > > bnxt > > + cnxk > > cxgbe > > dpaa > > dpaa2 > > diff --git a/doc/guides/platform/cnxk.rst b/doc/guides/platform/cnxk.rst > > index cebb3d0..b506c11 100644 > > --- a/doc/guides/platform/cnxk.rst > > +++ b/doc/guides/platform/cnxk.rst > > @@ -142,6 +142,9 @@ HW Offload Drivers > > This section lists dataplane H/W block(s) available in cnxk SoC. > > +#. **Ethdev Driver** > > + See :doc:`../nics/cnxk` for NIX Ethdev driver information. > > + > > #. **Mempool Driver** > > See :doc:`../mempool/cnxk` for NPA mempool driver information. > > diff --git a/drivers/net/cnxk/cnxk_ethdev.c b/drivers/net/cnxk/cnxk_ethdev.c > > new file mode 100644 > > index 0000000..6717410 > > --- /dev/null > > +++ b/drivers/net/cnxk/cnxk_ethdev.c > > @@ -0,0 +1,219 @@ > > +/* SPDX-License-Identifier: BSD-3-Clause > > + * Copyright(C) 2021 Marvell. > > + */ > > +#include > > + > > +/* CNXK platform independent eth dev ops */ > > +struct eth_dev_ops cnxk_eth_dev_ops; > > + > > +static int > > +cnxk_eth_dev_init(struct rte_eth_dev *eth_dev) > > +{ > > + struct cnxk_eth_dev *dev = cnxk_eth_pmd_priv(eth_dev); > > + struct roc_nix *nix = &dev->nix; > > + struct rte_pci_device *pci_dev; > > + int rc, max_entries; > > + > > + eth_dev->dev_ops = &cnxk_eth_dev_ops; > > + > > + /* For secondary processes, the primary has done all the work */ > > + if (rte_eal_process_type() != RTE_PROC_PRIMARY) > > + return 0; > > + > > + pci_dev = RTE_ETH_DEV_TO_PCI(eth_dev); > > + rte_eth_copy_pci_info(eth_dev, pci_dev); > > + eth_dev->data->dev_flags |= RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS; > Hi, > > It is recommended not to use this flag when add new driver. Queue stats will > be moved to xstats and be filled by PMDs. > > Please check the following patch: > > commit f30e69b41f949cd4a9afb6ff39de196e661708e2 > Author: Ferruh Yigit > Date:   Wed Oct 14 03:26:47 2020 +0100 > >     ethdev: add device flag to bypass auto-filled queue xstats > >     Queue stats are stored in 'struct rte_eth_stats' as array and array size >     is defined by 'RTE_ETHDEV_QUEUE_STAT_CNTRS' compile time flag. > >     As a result of technical board discussion, decided to remove the queue >     statistics from 'struct rte_eth_stats' in the long term. > >     Instead PMDs should represent the queue statistics via xstats, this >     gives more flexibility on the number of the queues supported. > >     Currently queue stats in the xstats are filled by ethdev layer, using >     some basic stats, when queue stats removed from basic stats the >     responsibility to fill the relevant xstats will be pushed to the PMDs. > >     During the switch period, temporary 'RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS' >     device flag is created. Initially all PMDs using xstats set this flag. >     The PMDs implemented queue stats in the xstats should clear the flag. > >     When all PMDs switch to the xstats for the queue stats, queue stats >     related fields from 'struct rte_eth_stats' will be removed, as well as >     'RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS' flag. >     Later 'RTE_ETHDEV_QUEUE_STAT_CNTRS' compile time flag also can be >     removed. > >     Signed-off-by: Ferruh Yigit >     Acked-by: Haiyue Wang >     Acked-by: Xiao Wang >     Acked-by: Thomas Monjalon Ack, will fix it in V3. > > > + > > + /* Initialize base roc nix */ > > + nix->pci_dev = pci_dev; > > + rc = roc_nix_dev_init(nix); > > + if (rc) { > > + plt_err("Failed to initialize roc nix rc=%d", rc); > > + goto error; > > + } > > + > > + dev->eth_dev = eth_dev; > > + > > + /* For vfs, returned max_entries will be 0. but to keep default mac > > + * address, one entry must be allocated. so setting up to 1. > > + */ > > + if (roc_nix_is_vf_or_sdp(nix)) > > + max_entries = 1; > > + else > > + max_entries = roc_nix_mac_max_entries_get(nix); > > + > > + if (max_entries <= 0) { > > + plt_err("Failed to get max entries for mac addr"); > > + rc = -ENOTSUP; > > + goto dev_fini; > > + } > > + > > + eth_dev->data->mac_addrs = > > + rte_zmalloc("mac_addr", max_entries * RTE_ETHER_ADDR_LEN, 0); > > + if (eth_dev->data->mac_addrs == NULL) { > > + plt_err("Failed to allocate memory for mac addr"); > > + rc = -ENOMEM; > > + goto dev_fini; > > + } > > + > > + dev->max_mac_entries = max_entries; > > + > > + /* Get mac address */ > > + rc = roc_nix_npc_mac_addr_get(nix, dev->mac_addr); > > + if (rc) { > > + plt_err("Failed to get mac addr, rc=%d", rc); > > + goto free_mac_addrs; > > + } > > + > > + /* Update the mac address */ > > + memcpy(eth_dev->data->mac_addrs, dev->mac_addr, RTE_ETHER_ADDR_LEN); > > + > > + if (!roc_nix_is_vf_or_sdp(nix)) { > > + /* Sync same MAC address to CGX/RPM table */ > > + rc = roc_nix_mac_addr_set(nix, dev->mac_addr); > > + if (rc) { > > + plt_err("Failed to set mac addr, rc=%d", rc); > > + goto free_mac_addrs; > > + } > > + } > > + > > + /* Initialize roc npc */ > > + plt_nix_dbg("Port=%d pf=%d vf=%d ver=%s hwcap=0x%" PRIx64 > > + " rxoffload_capa=0x%" PRIx64 " txoffload_capa=0x%" PRIx64, > > + eth_dev->data->port_id, roc_nix_get_pf(nix), > > + roc_nix_get_vf(nix), CNXK_ETH_DEV_PMD_VERSION, dev->hwcap, > > + dev->rx_offload_capa, dev->tx_offload_capa); > > + return 0; > > + > > +free_mac_addrs: > > + rte_free(eth_dev->data->mac_addrs); > > +dev_fini: > > + roc_nix_dev_fini(nix); > > +error: > > + plt_err("Failed to init nix eth_dev rc=%d", rc); > > + return rc; > > +} > > + > > +static int > > +cnxk_eth_dev_uninit(struct rte_eth_dev *eth_dev, bool mbox_close) > > +{ > > + struct cnxk_eth_dev *dev = cnxk_eth_pmd_priv(eth_dev); > > + const struct eth_dev_ops *dev_ops = eth_dev->dev_ops; > > + struct roc_nix *nix = &dev->nix; > > + int rc, i; > > + > > + /* Nothing to be done for secondary processes */ > > + if (rte_eal_process_type() != RTE_PROC_PRIMARY) > > + return 0; > > + > > + roc_nix_npc_rx_ena_dis(nix, false); > > + > > + /* Free up SQs */ > > + for (i = 0; i < eth_dev->data->nb_tx_queues; i++) { > > + dev_ops->tx_queue_release(eth_dev->data->tx_queues[i]); > > + eth_dev->data->tx_queues[i] = NULL; > > + } > > + eth_dev->data->nb_tx_queues = 0; > > + > > + /* Free up RQ's and CQ's */ > > + for (i = 0; i < eth_dev->data->nb_rx_queues; i++) { > > + dev_ops->rx_queue_release(eth_dev->data->rx_queues[i]); > > + eth_dev->data->rx_queues[i] = NULL; > > + } > > + eth_dev->data->nb_rx_queues = 0; > > + > > + /* Free tm resources */ > > + roc_nix_tm_fini(nix); > > + > > + /* Unregister queue irqs */ > > + roc_nix_unregister_queue_irqs(nix); > > + > > + /* Unregister cq irqs */ > > + if (eth_dev->data->dev_conf.intr_conf.rxq) > > + roc_nix_unregister_cq_irqs(nix); > > + > > + /* Free nix lf resources */ > > + rc = roc_nix_lf_free(nix); > > + if (rc) > > + plt_err("Failed to free nix lf, rc=%d", rc); > > + > > + rte_free(eth_dev->data->mac_addrs); > > + eth_dev->data->mac_addrs = NULL; > > + > > + /* Check if mbox close is needed */ > > + if (!mbox_close) > > + return 0; > > + > > + rc = roc_nix_dev_fini(nix); > > + /* Can be freed later by PMD if NPA LF is in use */ > > + if (rc == -EAGAIN) { > > + eth_dev->data->dev_private = NULL; > > + return 0; > > + } else if (rc) { > > + plt_err("Failed in nix dev fini, rc=%d", rc); > > + } > > + > > + return rc; > > +} > > + > > +int > > +cnxk_nix_remove(struct rte_pci_device *pci_dev) > > +{ > > + struct rte_eth_dev *eth_dev; > > + struct roc_nix *nix; > > + int rc = -EINVAL; > > + > > + eth_dev = rte_eth_dev_allocated(pci_dev->device.name); > > + if (eth_dev) { > > + /* Cleanup eth dev */ > > + rc = cnxk_eth_dev_uninit(eth_dev, true); > > + if (rc) > > + return rc; > > + > > + rte_eth_dev_release_port(eth_dev); > > + } > > + > > + /* Nothing to be done for secondary processes */ > > + if (rte_eal_process_type() != RTE_PROC_PRIMARY) > > + return 0; > > + > > + /* Check if this device is hosting common resource */ > > + nix = roc_idev_npa_nix_get(); > > + if (nix->pci_dev != pci_dev) > > + return 0; > > + > > + /* Try nix fini now */ > > + rc = roc_nix_dev_fini(nix); > > + if (rc == -EAGAIN) { > > + plt_info("%s: common resource in use by other devices", > > + pci_dev->name); > > + goto exit; > > + } else if (rc) { > > + plt_err("Failed in nix dev fini, rc=%d", rc); > > + goto exit; > > + } > > + > > + /* Free device pointer as rte_ethdev does not have it anymore */ > > + rte_free(nix); > > +exit: > > + return rc; > > +} > > + > > +int > > +cnxk_nix_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev) > > +{ > > + int rc; > > + > > + RTE_SET_USED(pci_drv); > > + > > + rc = rte_eth_dev_pci_generic_probe(pci_dev, sizeof(struct cnxk_eth_dev), > > + cnxk_eth_dev_init); > > + > > + /* On error on secondary, recheck if port exists in primary or > > + * in mid of detach state. > > + */ > > + if (rte_eal_process_type() != RTE_PROC_PRIMARY && rc) > > + if (!rte_eth_dev_allocated(pci_dev->device.name)) > > + return 0; > > + return rc; > > +} > > diff --git a/drivers/net/cnxk/cnxk_ethdev.h b/drivers/net/cnxk/cnxk_ethdev.h > > new file mode 100644 > > index 0000000..0460d1e > > --- /dev/null > > +++ b/drivers/net/cnxk/cnxk_ethdev.h > > @@ -0,0 +1,57 @@ > > +/* SPDX-License-Identifier: BSD-3-Clause > > + * Copyright(C) 2021 Marvell. > > + */ > > +#ifndef __CNXK_ETHDEV_H__ > > +#define __CNXK_ETHDEV_H__ > > + > > +#include > > +#include > > + > > +#include > > +#include > > + > > +#include "roc_api.h" > > + > > +#define CNXK_ETH_DEV_PMD_VERSION "1.0" > > + > > +struct cnxk_eth_dev { > > + /* ROC NIX */ > > + struct roc_nix nix; > > + > > + /* Max macfilter entries */ > > + uint8_t max_mac_entries; > > + > > + uint16_t flags; > > + > > + /* Pointer back to rte */ > > + struct rte_eth_dev *eth_dev; > > + > > + /* HW capabilities / Limitations */ > > + union { > > + uint64_t hwcap; > > + }; > > + > > + /* Rx and Tx offload capabilities */ > > + uint64_t rx_offload_capa; > > + uint64_t tx_offload_capa; > > + uint32_t speed_capa; > > + > > + /* Default mac address */ > > + uint8_t mac_addr[RTE_ETHER_ADDR_LEN]; > > +}; > > + > > +static inline struct cnxk_eth_dev * > > +cnxk_eth_pmd_priv(struct rte_eth_dev *eth_dev) > > +{ > > + return eth_dev->data->dev_private; > > +} > > + > > +/* Common ethdev ops */ > > +extern struct eth_dev_ops cnxk_eth_dev_ops; > > + > > +/* Ops */ > > +int cnxk_nix_probe(struct rte_pci_driver *pci_drv, > > + struct rte_pci_device *pci_dev); > > +int cnxk_nix_remove(struct rte_pci_device *pci_dev); > > + > > +#endif /* __CNXK_ETHDEV_H__ */ > > diff --git a/drivers/net/cnxk/meson.build b/drivers/net/cnxk/meson.build > > new file mode 100644 > > index 0000000..77b2f18 > > --- /dev/null > > +++ b/drivers/net/cnxk/meson.build > > @@ -0,0 +1,21 @@ > > +# SPDX-License-Identifier: BSD-3-Clause > > +# Copyright(C) 2021 Marvell. > > +# > > + > > +if not dpdk_conf.get('RTE_ARCH_64') > > + build = false > > + reason = 'only supported on 64-bit' > > + subdir_done() > > +endif > > + > > +sources = files('cnxk_ethdev.c') > > + > > +deps += ['bus_pci', 'cryptodev', 'eventdev', 'security'] > > +deps += ['common_cnxk', 'mempool_cnxk'] > > + > > +extra_flags = ['-flax-vector-conversions', '-Wno-strict-aliasing'] > > +foreach flag: extra_flags > > + if cc.has_argument(flag) > > + cflags += flag > > + endif > > +endforeach > > diff --git a/drivers/net/cnxk/version.map b/drivers/net/cnxk/version.map > > new file mode 100644 > > index 0000000..ee80c51 > > --- /dev/null > > +++ b/drivers/net/cnxk/version.map > > @@ -0,0 +1,3 @@ > > +INTERNAL { > > + local: *; > > +}; > > diff --git a/drivers/net/meson.build b/drivers/net/meson.build > > index c8b5ce2..5b066fd 100644 > > --- a/drivers/net/meson.build > > +++ b/drivers/net/meson.build > > @@ -12,6 +12,7 @@ drivers = [ > > 'bnx2x', > > 'bnxt', > > 'bonding', > > + 'cnxk', > > 'cxgbe', > > 'dpaa', > > 'dpaa2',