1.. SPDX-License-Identifier: BSD-3-Clause 2 Copyright(c) 2017 Cavium, Inc 3 4OCTEON TX Poll Mode driver 5========================== 6 7The OCTEON TX ETHDEV PMD (**librte_net_octeontx**) provides poll mode ethdev 8driver support for the inbuilt network device found in the **Cavium OCTEON TX** 9SoC family as well as their virtual functions (VF) in SR-IOV context. 10 11More information can be found at `Cavium, Inc Official Website 12<http://www.cavium.com/OCTEON-TX_ARM_Processors.html>`_. 13 14Features 15-------- 16 17Features of the OCTEON TX Ethdev PMD are: 18 19- Packet type information 20- Promiscuous mode 21- Port hardware statistics 22- Jumbo frames 23- Scatter-Gather IO support 24- Link state information 25- MAC/VLAN filtering 26- MTU update 27- SR-IOV VF 28- Multiple queues for TX 29- Lock-free Tx queue 30- HW offloaded `ethdev Rx queue` to `eventdev event queue` packet injection 31 32Supported OCTEON TX SoCs 33------------------------ 34 35- CN83xx 36 37Unsupported features 38-------------------- 39 40The features supported by the device and not yet supported by this PMD include: 41 42- Receive Side Scaling (RSS) 43- Scattered and gather for TX and RX 44- Ingress classification support 45- Egress hierarchical scheduling, traffic shaping, and marking 46 47Prerequisites 48------------- 49 50See :doc:`../platform/octeontx` for setup information. 51 52Pre-Installation Configuration 53------------------------------ 54 55 56Driver compilation and testing 57~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 58 59Refer to the document :ref:`compiling and testing a PMD for a NIC <pmd_build_and_test>` 60for details. 61 62#. Running testpmd: 63 64 Follow instructions available in the document 65 :ref:`compiling and testing a PMD for a NIC <pmd_build_and_test>` 66 to run testpmd. 67 68 Example output: 69 70 .. code-block:: console 71 72 ./<build_dir>/app/dpdk-testpmd -c 700 \ 73 --base-virtaddr=0x100000000000 \ 74 --mbuf-pool-ops-name="octeontx_fpavf" \ 75 --vdev='event_octeontx' \ 76 --vdev='eth_octeontx,nr_port=2' \ 77 -- --rxq=1 --txq=1 --nb-core=2 \ 78 --total-num-mbufs=16384 -i 79 ..... 80 EAL: Detected 24 lcore(s) 81 EAL: Probing VFIO support... 82 EAL: VFIO support initialized 83 ..... 84 EAL: PCI device 0000:07:00.1 on NUMA socket 0 85 EAL: probe driver: 177d:a04b octeontx_ssovf 86 ..... 87 EAL: PCI device 0001:02:00.7 on NUMA socket 0 88 EAL: probe driver: 177d:a0dd octeontx_pkivf 89 ..... 90 EAL: PCI device 0001:03:01.0 on NUMA socket 0 91 EAL: probe driver: 177d:a049 octeontx_pkovf 92 ..... 93 PMD: octeontx_probe(): created ethdev eth_octeontx for port 0 94 PMD: octeontx_probe(): created ethdev eth_octeontx for port 1 95 ..... 96 Configuring Port 0 (socket 0) 97 Port 0: 00:0F:B7:11:94:46 98 Configuring Port 1 (socket 0) 99 Port 1: 00:0F:B7:11:94:47 100 ..... 101 Checking link statuses... 102 Port 0 Link Up - speed 40000 Mbps - full-duplex 103 Port 1 Link Up - speed 40000 Mbps - full-duplex 104 Done 105 testpmd> 106 107 108Initialization 109-------------- 110 111The OCTEON TX ethdev pmd is exposed as a vdev device which consists of a set 112of PKI and PKO PCIe VF devices. On EAL initialization, 113PKI/PKO PCIe VF devices will be probed and then the vdev device can be created 114from the application code, or from the EAL command line based on 115the number of probed/bound PKI/PKO PCIe VF device to DPDK by 116 117* Invoking ``rte_vdev_init("eth_octeontx")`` from the application 118 119* Using ``--vdev="eth_octeontx"`` in the EAL options, which will call 120 rte_vdev_init() internally 121 122Device arguments 123~~~~~~~~~~~~~~~~ 124Each ethdev port is mapped to a physical port(LMAC), Application can specify 125the number of interesting ports with ``nr_ports`` argument. 126 127Dependency 128~~~~~~~~~~ 129``eth_octeontx`` pmd is depend on ``event_octeontx`` eventdev device and 130``octeontx_fpavf`` external mempool handler. 131 132Example: 133 134.. code-block:: console 135 136 ./your_dpdk_application --mbuf-pool-ops-name="octeontx_fpavf" \ 137 --vdev='event_octeontx' \ 138 --vdev="eth_octeontx,nr_port=2" 139 140Limitations 141----------- 142 143``octeontx_fpavf`` external mempool handler dependency 144~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 145The OCTEON TX SoC family NIC has inbuilt HW assisted external mempool manager. 146This driver will only work with ``octeontx_fpavf`` external mempool handler 147as it is the most performance effective way for packet allocation and Tx buffer 148recycling on OCTEON TX SoC platform. 149 150CRC stripping 151~~~~~~~~~~~~~ 152 153The OCTEON TX SoC family NICs strip the CRC for every packets coming into the 154host interface irrespective of the offload configuration. 155 156Maximum packet length 157~~~~~~~~~~~~~~~~~~~~~ 158 159The OCTEON TX SoC family NICs support a maximum of a 32K jumbo frame. The value 160is fixed and cannot be changed. So, even when the ``rxmode.max_rx_pkt_len`` 161member of ``struct rte_eth_conf`` is set to a value lower than 32k, frames 162up to 32k bytes can still reach the host interface. 163 164Maximum mempool size 165~~~~~~~~~~~~~~~~~~~~ 166 167The maximum mempool size supplied to Rx queue setup should be less than 128K. 168When running testpmd on OCTEON TX the application can limit the number of mbufs 169by using the option ``--total-num-mbufs=131072``. 170