7. Marvell OCTEON TX2 End Point Rawdev Driver

OCTEON TX2 has an internal SDP unit which provides End Point mode of operation by exposing its IOQs to Host, IOQs are used for packet I/O between Host and OCTEON TX2. Each OCTEON TX2 SDP PF supports a max of 128 VFs and Each VF is associated with a set of IOQ pairs.

7.1. Features

This OCTEON TX2 End Point mode PMD supports

  1. Packet Input - Host to OCTEON TX2 with direct data instruction mode.

  2. Packet Output - OCTEON TX2 to Host with info pointer mode.

7.2. Initialization

The number of SDP VFs enabled, can be controlled by setting sysfs entry sriov_numvfs for the corresponding PF driver.

echo <num_vfs> > /sys/bus/pci/drivers/octeontx2-ep/0000\:04\:00.0/sriov_numvfs

Once the required VFs are enabled, to be accessible from DPDK, VFs need to be bound to vfio-pci driver.

7.3. Device Setup

The OCTEON TX2 SDP End Point VF devices will need to be bound to a user-space IO driver for use. The script dpdk-devbind.py script included with DPDK can be used to view the state of the devices and to bind them to a suitable DPDK-supported kernel driver. When querying the status of the devices, they will appear under the category of “Misc (rawdev) devices”, i.e. the command dpdk-devbind.py --status-dev misc can be used to see the state of those devices alone.

7.4. Device Configuration

Configuring SDP EP rawdev device is done using the rte_rawdev_configure() API, which takes the mempool as parameter. PMD uses this pool to send/receive packets to/from the HW.

The following code shows how the device is configured

struct sdp_rawdev_info config = {0};
struct rte_rawdev_info rdev_info = {.dev_private = &config};
config.enqdeq_mpool = (void *)rte_mempool_create(...);

rte_rawdev_configure(dev_id, (rte_rawdev_obj_t)&rdev_info,
                     sizeof(config));

7.5. Performing Data Transfer

To perform data transfer using SDP VF EP rawdev devices use standard rte_rawdev_enqueue_buffers() and rte_rawdev_dequeue_buffers() APIs.

7.6. Self test

On EAL initialization, SDP VF devices will be probed and populated into the raw devices. The rawdev ID of the device can be obtained using

  • Invoke rte_rawdev_get_dev_id("SDPEP:x") from the test application where x is the VF device’s bus id specified in “bus:device.func”(BDF) format. Use this index for further rawdev function calls.

  • The driver’s selftest rawdev API can be used to verify the SDP EP mode functional tests which can send/receive the raw data packets to/from the EP device.