Nathan Skrzypczak | f47122e | 2021-10-08 14:05:35 +0200 | [diff] [blame] | 1 | Marvell device plugin |
| 2 | ===================== |
| 3 | |
| 4 | Overview |
| 5 | -------- |
| 6 | |
| 7 | This plugins provides native device support for Marvell PP2 network |
| 8 | device, by use of Marvell Usermode SDK |
| 9 | (`MUSDK <https://github.com/MarvellEmbeddedProcessors/musdk-marvell>`__). |
| 10 | Code is developed and tested on |
| 11 | `MACCHIATObin <http://macchiatobin.net>`__ board. |
| 12 | |
| 13 | Prerequisites |
| 14 | ------------- |
| 15 | |
| 16 | Plugins depends on installed MUSDK and Marvell provided linux |
| 17 | `kernel <https://github.com/MarvellEmbeddedProcessors/linux-marvell>`__ |
| 18 | with MUSDK provided kernel patches (see ``patches/linux`` in musdk repo |
| 19 | and relevant documentation. Kernel version used: **4.14.22 |
| 20 | armada-18.09.3** MUSDK version used: **armada-18.09.3** Following kernel |
| 21 | modules from MUSDK must be loaded for plugin to work: \* |
| 22 | ``musdk_cma.ko`` \* ``mv_pp_uio.ko`` |
| 23 | |
| 24 | Musdk 18.09.3 compilation steps |
| 25 | ------------------------------- |
| 26 | |
| 27 | :: |
| 28 | |
| 29 | ./bootstrap |
| 30 | ./configure --prefix=/opt/vpp/external/aarch64/ CFLAGS="-Wno-error=unused-result -g -fPIC" --enable-shared=no |
| 31 | sed -i -e 's/marvell,mv-pp-uio/generic-uio/' modules/pp2/mv_pp_uio.c |
| 32 | sed -i -e 's/O_CREAT/O_CREAT, S_IRUSR | S_IWUSR/' src/lib/file_utils.c |
| 33 | make |
| 34 | sudo make install |
| 35 | |
| 36 | Usage |
| 37 | ----- |
| 38 | |
| 39 | Interface Creation |
| 40 | ~~~~~~~~~~~~~~~~~~ |
| 41 | |
| 42 | Interfaces are dynamically created with following CLI: |
| 43 | |
| 44 | :: |
| 45 | |
| 46 | create interface marvell pp2 name eth0 |
| 47 | set interface state mv-ppio-0/0 up |
| 48 | |
| 49 | Where ``eth0`` is linux interface name and ``mv-ppio-X/Y`` is VPP |
| 50 | interface name where X is PP2 device ID and Y is PPIO ID Interface needs |
| 51 | to be assigned to MUSDK in FDT configuration and linux interface state |
| 52 | must be up. |
| 53 | |
| 54 | Interface Deletion |
| 55 | ~~~~~~~~~~~~~~~~~~ |
| 56 | |
| 57 | Interface can be deleted with following CLI: |
| 58 | |
| 59 | :: |
| 60 | |
| 61 | delete interface marvell pp2 <interface name> |
| 62 | |
| 63 | Interface Statistics |
| 64 | ~~~~~~~~~~~~~~~~~~~~ |
| 65 | |
| 66 | Interface statistics can be displayed with |
| 67 | ``sh hardware-interface mv-ppio0/0`` command. |
| 68 | |
| 69 | Interaction with DPDK plugin |
| 70 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 71 | |
| 72 | This plugin doesn’t have any dependency on DPDK or DPDK plugin but it |
| 73 | can work with DPDK plugin enabled or disabled. It is observed that |
| 74 | performance is better around 30% when DPDK plugin is disabled, as DPDK |
| 75 | plugin registers own buffer manager, which needs to deal with additional |
| 76 | metadata in each packet. |
| 77 | |
| 78 | DPKD plugin can be disabled by adding following config to the |
| 79 | startup.conf. |
| 80 | |
| 81 | :: |
| 82 | |
| 83 | plugins { |
| 84 | dpdk_plugin.so { disable } |
| 85 | } |