> -----Original Message----- > From: Ferruh Yigit <ferruh.yi...@intel.com> > Sent: Wednesday, October 27, 2021 7:49 PM > To: Apeksha Gupta <apeksha.gu...@nxp.com>; > david.march...@redhat.com; andrew.rybche...@oktetlabs.ru > Cc: dev@dpdk.org; Sachin Saxena <sachin.sax...@nxp.com>; Hemant > Agrawal <hemant.agra...@nxp.com> > Subject: [EXT] Re: [dpdk-dev] [PATCH v6 1/5] net/enetfec: introduce NXP > ENETFEC driver > > Caution: EXT Email > > On 10/21/2021 5:46 AM, Apeksha Gupta 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> > > <...> > > > +Follow instructions available in the document > > +:ref:`compiling and testing a PMD for a NIC <pmd_build_and_test>` > > +to launch **dpdk-testpmd** > > + > > +Limitations > > +~~~~~~~~~~~ > > + > > +- Multi queue is not supported. > > in 'enetfec_eth_info()' > max_rx_queues/max_tx_queues returned as 3 (ENETFEC_MAX_Q). > If multi queue is not supported why it is not one? [Apeksha] I agree, As multi queue is not supported we will update ENETFEC_MAX_Q from 3 to 1 in v8 patch series.
> > <...> > > > --- a/doc/guides/rel_notes/release_21_11.rst > > +++ b/doc/guides/rel_notes/release_21_11.rst > > @@ -20,6 +20,10 @@ DPDK Release 21.11 > > ninja -C build doc > > xdg-open build/doc/guides/html/rel_notes/release_21_11.html > > > > +* **Added NXP ENETFEC PMD.** > > + > > + Added the new ENETFEC driver for the NXP IMX8MMEVK platform. See > the > > + :doc:`../nics/enetfec` NIC driver guide for more details on this new > > driver. > > > > Update is in the doc comment, can you please move it down, within the > ethdev > driver group in alphabetically sorted manner. [Apeksha] okay. > > <...> > > > +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; > > Can name be 'NULL'? Not sure if we need this check, can you please check? [Apeksha] yes, this check is required as ' rte_vdev_device_name' may return NULL. rte_vdev_device_name(const struct rte_vdev_device *dev) { if (dev && dev->device.name) return dev->device.name; return NULL; } > > <...> > > > +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"); > > Log can be misleading, there is another dev_ops to close the device. [Apeksha] Okay. Updated in v7 series. > > <...> > > > @@ -0,0 +1,179 @@ > > +/* SPDX-License-Identifier: BSD-3-Clause > > + * Copyright 2020-2021 NXP > > + */ > > + > > +#ifndef __ENETFEC_ETHDEV_H__ > > +#define __ENETFEC_ETHDEV_H__ > > + > > +#include <rte_ethdev.h> > > + > > +/* > > + * ENETFEC with AVB IP can support maximum 3 rx and tx queues. > > + */ > > +#define ENETFEC_MAX_Q 3 > > + > > +#define ETHER_ADDR_LEN 6 > > +#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 > > + > > Some of the defines in this header is not used at all. What about > only adding structs/defines that are used? And add them as they are > needed? > This guarantees not having unused clutter in the code. [Apeksha] I agree. We will update in v8 version. > > <...> > > > +/* Required types */ > > +typedef uint8_t u8; > > +typedef uint16_t u16; > > +typedef uint32_t u32; > > +typedef uint64_t u64; > > + > > Do we need these type definitions, as far as I can see they are used only > in a few places, why not just use uint##_t types? > > <...> > > > +static inline struct > > +bufdesc *enet_get_nextdesc(struct bufdesc *bdp, struct bufdesc_prop > *bd) > > +{ > > + return (bdp >= bd->last) ? bd->base > > + : (struct bufdesc *)(((uintptr_t)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 *)(((uintptr_t)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; > > +} > > + > > Same for these static inline functions, can you please add they when that are > needed? > > > +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); > > These function definitions are not declared, at least not in this patch. > > > +struct bufdesc *enet_get_nextdesc(struct bufdesc *bdp, > > + struct bufdesc_prop *bd); > > This is already static inline function, do we need separate definition for it? > > > +int enet_new_rxbdp(struct enetfec_private *fep, struct bufdesc *bdp, > > + struct rte_mbuf *mbuf); > > + > > ditto, no function declaration. > > <...> > > > + > > +/* 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) > > + > > Not used at all. > > > +#endif /* _ENETFEC_LOGS_H_ */ > > diff --git a/drivers/net/enetfec/meson.build > b/drivers/net/enetfec/meson.build > > new file mode 100644 > > index 0000000000..79dca58dea > > --- /dev/null > > +++ b/drivers/net/enetfec/meson.build > > @@ -0,0 +1,11 @@ > > +# SPDX-License-Identifier: BSD-3-Clause > > +# Copyright 2021 NXP > > + > > +if not is_linux > > + build = false > > + reason = 'only supported on linux' > > +endif > > + > > +sources = files('enet_ethdev.c', > > + 'enet_uio.c', > > + 'enet_rxtx.c') > > This should cause build error on this patch, isn't it? Since these files don't > exist in this patch. > Each patch should be built successfully. [Apeksha] I agree, all code cleanup comments are handled in v7 patch series. Also as suggested each patch is built successfully.