34. MVNETA Poll Mode Driver

The MVNETA PMD (librte_pmd_mvneta) provides poll mode driver support for the Marvell NETA 1/2.5 Gbps adapter.

Detailed information about SoCs that use PPv2 can be obtained here:

Note

Due to external dependencies, this driver is disabled by default. It must be enabled manually by setting relevant configuration option manually. Please refer to Config File Options section for further details.

34.1. Features

Features of the MVNETA PMD are:

  • Start/stop
  • tx/rx_queue_setup
  • tx/rx_burst
  • Speed capabilities
  • Jumbo frame
  • MTU update
  • Promiscuous mode
  • Unicast MAC filter
  • Link status
  • CRC offload
  • L3 checksum offload
  • L4 checksum offload
  • Packet type parsing
  • Basic stats

34.2. Limitations

  • Flushing vlans added for filtering is not possible due to MUSDK missing functionality. Current workaround is to reset board so that NETA has a chance to start in a sane state.

34.3. Prerequisites

  • Custom Linux Kernel sources

    git clone https://github.com/MarvellEmbeddedProcessors/linux-marvell.git -b linux-4.4.120-armada-18.09
    
  • MUSDK (Marvell User-Space SDK) sources

    git clone https://github.com/MarvellEmbeddedProcessors/musdk-marvell.git -b musdk-armada-18.09
    

    MUSDK is a light-weight library that provides direct access to Marvell’s NETA. Alternatively prebuilt MUSDK library can be requested from Marvell Extranet. Once approval has been granted, library can be found by typing musdk in the search box.

    MUSDK must be configured with the following features:

    --enable-pp2=no --enable-neta
    
  • DPDK environment

    Follow the DPDK Getting Started Guide for Linux to setup DPDK environment.

34.4. Pre-Installation Configuration

34.4.1. Config File Options

The following options can be modified in the config file.

  • CONFIG_RTE_LIBRTE_MVNETA_PMD (default n)

    Toggle compilation of the librte_pmd_mvneta driver.

34.4.2. Runtime options

The following devargs options can be enabled at runtime. They must be passed as part of EAL arguments.

  • iface (mandatory, with no default value)

    The name of port (owned by MUSDK) that should be enabled in DPDK. This options can be repeated resulting in a list of ports to be enabled. For instance below will enable eth0 and eth1 ports.

./testpmd --vdev=net_mvneta,iface=eth0,iface=eth1 \
 -c 3 -- -i --p 3 -a

34.5. Building DPDK

Driver needs precompiled MUSDK library during compilation.

export CROSS_COMPILE=<toolchain>/bin/aarch64-linux-gnu-
./bootstrap
./configure --host=aarch64-linux-gnu --enable-pp2=no --enable-neta
make install

MUSDK will be installed to usr/local under current directory. For the detailed build instructions please consult doc/musdk_get_started.txt.

Before the DPDK build process the environmental variable LIBMUSDK_PATH with the path to the MUSDK installation directory needs to be exported.

export LIBMUSDK_PATH=<musdk>/usr/local
export CROSS=aarch64-linux-gnu-
make config T=arm64-armv8a-linux-gcc
sed -ri 's,(MVNETA_PMD=)n,\1y,' build/.config
make

34.6. Usage Example

MVNETA PMD requires extra out of tree kernel modules to function properly. musdk_uio and mv_neta_uio sources are part of the MUSDK. Please consult doc/musdk_get_started.txt for the detailed build instructions.

insmod musdk_uio.ko
insmod mv_neta_uio.ko

Additionally interfaces used by DPDK application need to be put up:

ip link set eth0 up
ip link set eth1 up

In order to run testpmd example application following command can be used:

./testpmd --vdev=net_mvneta,iface=eth0,iface=eth1 -c 3 -- \
  -i --p 3 -a --txd 256 --rxd 128 --rxq=1 --txq=1  --nb-cores=1

In order to run l2fwd example application following command can be used:

./l2fwd --vdev=net_mvneta,iface=eth0,iface=eth1 -c 3 -- -T 1 -p 3