1. Mellanox BlueField Board Support Package

This document has information about steps to setup Mellanox BlueField platform and common offload HW drivers of Mellanox BlueField family SoC.

1.1. Supported BlueField family SoCs

1.3. Common Offload HW Drivers

  1. NIC Driver

    See MLX5 poll mode driver for Mellanox mlx5 NIC driver information.

  2. Cryptodev Driver

    This is based on the crypto extension support of armv8. See ARMv8 Crypto Poll Mode Driver for armv8 crypto driver information.

Note

BlueField has a variant having no armv8 crypto extension support.

1.4. Steps To Setup Platform

Toolchains, OS and drivers can be downloaded and installed individually from the Web. But it is recommended to follow instructions at Mellanox BlueField Software Website.

1.5. Compile DPDK

DPDK can be compiled either natively on BlueField platforms or cross-compiled on an x86 based platform.

1.5.1. Native Compilation

Refer to MLX5 poll mode driver for prerequisites. Either Mellanox OFED/EN or rdma-core library with corresponding kernel drivers is required.

1.5.1.1. make build

make config T=arm64-bluefield-linuxapp-gcc
make -j

1.5.1.2. meson build

meson build
ninja -C build

1.5.2. Cross Compilation

Refer to Cross compile DPDK for ARM64 to install the cross toolchain for ARM64. Base on that, additional header files and libraries are required:

  • libibverbs
  • libmnl
  • libmlx5
  • libnl-3
  • libnl-route-3

Such header files and libraries can be cross-compiled and installed on to the cross toolchain directory like depicted in Getting the prerequisite library, but those can also be simply copied from the filesystem of a working BlueField platform. The following script can be run on a BlueField platform in order to create a supplementary tarball for the cross toolchain.

mkdir -p aarch64-linux-gnu/libc
pushd $PWD
cd aarch64-linux-gnu/libc

# Copy libraries
mkdir -p lib64
cp -a /lib64/libibverbs* lib64/
cp -a /lib64/libmnl* lib64/
cp -a /lib64/libmlx5* lib64/
cp -a /lib64/libnl-3* lib64/
cp -a /lib64/libnl-route-3* lib64/

# Copy header files
mkdir -p usr/include/infiniband
mkdir -p usr/include/libmnl
cp -a /usr/include/infiniband/ib_user_ioctl_verbs.h usr/include/infiniband/
cp -a /usr/include/infiniband/mlx5*.h usr/include/infiniband/
cp -a /usr/include/infiniband/tm_types.h usr/include/infiniband/
cp -a /usr/include/infiniband/verbs*.h usr/include/infiniband/
cp -a /usr/include/libmnl/libmnl.h usr/include/libmnl/

# Create supplementary tarball
popd
tar cf aarch64-linux-gnu-mlx.tar aarch64-linux-gnu/

Then, untar the tarball at the cross toolchain directory on the x86 host.

cd $(dirname $(which aarch64-linux-gnu-gcc))/..
tar xf aarch64-linux-gnu-mlx.tar

1.5.2.1. make build

make config T=arm64-bluefield-linuxapp-gcc
make -j CROSS=aarch64-linux-gnu- CONFIG_RTE_KNI_KMOD=n CONFIG_RTE_EAL_IGB_UIO=n

1.5.2.2. meson build

meson build --cross-file config/arm/arm64_bluefield_linux_gcc
ninja -C build