1*9c4491cfSAnoob Joseph.. SPDX-License-Identifier: BSD-3-Clause 2*9c4491cfSAnoob Joseph Copyright(c) 2018 Cavium, Inc 3*9c4491cfSAnoob Joseph 4*9c4491cfSAnoob JosephCavium OCTEON TX Crypto Poll Mode Driver 5*9c4491cfSAnoob Joseph======================================== 6*9c4491cfSAnoob Joseph 7*9c4491cfSAnoob JosephThe OCTEON TX crypto poll mode driver provides support for offloading 8*9c4491cfSAnoob Josephcryptographic operations to cryptographic accelerator units on 9*9c4491cfSAnoob Joseph**OCTEON TX** :sup:`®` family of processors (CN8XXX). The OCTEON TX crypto 10*9c4491cfSAnoob Josephpoll mode driver enqueues the crypto request to this accelerator and dequeues 11*9c4491cfSAnoob Josephthe response once the operation is completed. 12*9c4491cfSAnoob Joseph 13*9c4491cfSAnoob JosephSupported Algorithms 14*9c4491cfSAnoob Joseph-------------------- 15*9c4491cfSAnoob Joseph 16*9c4491cfSAnoob JosephCipher Algorithms 17*9c4491cfSAnoob Joseph~~~~~~~~~~~~~~~~~ 18*9c4491cfSAnoob Joseph 19*9c4491cfSAnoob Joseph* ``RTE_CRYPTO_CIPHER_NULL`` 20*9c4491cfSAnoob Joseph* ``RTE_CRYPTO_CIPHER_3DES_CBC`` 21*9c4491cfSAnoob Joseph* ``RTE_CRYPTO_CIPHER_3DES_ECB`` 22*9c4491cfSAnoob Joseph* ``RTE_CRYPTO_CIPHER_AES_CBC`` 23*9c4491cfSAnoob Joseph* ``RTE_CRYPTO_CIPHER_AES_CTR`` 24*9c4491cfSAnoob Joseph* ``RTE_CRYPTO_CIPHER_AES_XTS`` 25*9c4491cfSAnoob Joseph* ``RTE_CRYPTO_CIPHER_DES_CBC`` 26*9c4491cfSAnoob Joseph* ``RTE_CRYPTO_CIPHER_KASUMI_F8`` 27*9c4491cfSAnoob Joseph* ``RTE_CRYPTO_CIPHER_SNOW3G_UEA2`` 28*9c4491cfSAnoob Joseph* ``RTE_CRYPTO_CIPHER_ZUC_EEA3`` 29*9c4491cfSAnoob Joseph 30*9c4491cfSAnoob JosephHash Algorithms 31*9c4491cfSAnoob Joseph~~~~~~~~~~~~~~~ 32*9c4491cfSAnoob Joseph 33*9c4491cfSAnoob Joseph* ``RTE_CRYPTO_AUTH_NULL`` 34*9c4491cfSAnoob Joseph* ``RTE_CRYPTO_AUTH_AES_GMAC`` 35*9c4491cfSAnoob Joseph* ``RTE_CRYPTO_AUTH_KASUMI_F9`` 36*9c4491cfSAnoob Joseph* ``RTE_CRYPTO_AUTH_MD5`` 37*9c4491cfSAnoob Joseph* ``RTE_CRYPTO_AUTH_MD5_HMAC`` 38*9c4491cfSAnoob Joseph* ``RTE_CRYPTO_AUTH_SHA1`` 39*9c4491cfSAnoob Joseph* ``RTE_CRYPTO_AUTH_SHA1_HMAC`` 40*9c4491cfSAnoob Joseph* ``RTE_CRYPTO_AUTH_SHA224`` 41*9c4491cfSAnoob Joseph* ``RTE_CRYPTO_AUTH_SHA224_HMAC`` 42*9c4491cfSAnoob Joseph* ``RTE_CRYPTO_AUTH_SHA256`` 43*9c4491cfSAnoob Joseph* ``RTE_CRYPTO_AUTH_SHA256_HMAC`` 44*9c4491cfSAnoob Joseph* ``RTE_CRYPTO_AUTH_SHA384`` 45*9c4491cfSAnoob Joseph* ``RTE_CRYPTO_AUTH_SHA384_HMAC`` 46*9c4491cfSAnoob Joseph* ``RTE_CRYPTO_AUTH_SHA512`` 47*9c4491cfSAnoob Joseph* ``RTE_CRYPTO_AUTH_SHA512_HMAC`` 48*9c4491cfSAnoob Joseph* ``RTE_CRYPTO_AUTH_SNOW3G_UIA2`` 49*9c4491cfSAnoob Joseph* ``RTE_CRYPTO_AUTH_ZUC_EIA3`` 50*9c4491cfSAnoob Joseph 51*9c4491cfSAnoob JosephAEAD Algorithms 52*9c4491cfSAnoob Joseph~~~~~~~~~~~~~~~ 53*9c4491cfSAnoob Joseph 54*9c4491cfSAnoob Joseph* ``RTE_CRYPTO_AEAD_AES_GCM`` 55*9c4491cfSAnoob Joseph 56*9c4491cfSAnoob JosephCompilation 57*9c4491cfSAnoob Joseph----------- 58*9c4491cfSAnoob Joseph 59*9c4491cfSAnoob JosephThe **OCTEON TX** :sup:`®` board must be running the linux kernel based on 60*9c4491cfSAnoob Josephsdk-6.2.0 patch 3. In this, the OCTEON TX crypto PF driver is already built in. 61*9c4491cfSAnoob Joseph 62*9c4491cfSAnoob JosephFor compiling the OCTEON TX crypto poll mode driver, please check if the 63*9c4491cfSAnoob JosephCONFIG_RTE_LIBRTE_PMD_OCTEONTX_CRYPTO setting is set to `y` in 64*9c4491cfSAnoob Josephconfig/common_base file. 65*9c4491cfSAnoob Joseph 66*9c4491cfSAnoob Joseph* ``CONFIG_RTE_LIBRTE_PMD_OCTEONTX_CRYPTO=y`` 67*9c4491cfSAnoob Joseph 68*9c4491cfSAnoob JosephThe following are the steps to compile the OCTEON TX crypto poll mode driver: 69*9c4491cfSAnoob Joseph 70*9c4491cfSAnoob Joseph.. code-block:: console 71*9c4491cfSAnoob Joseph 72*9c4491cfSAnoob Joseph cd <dpdk directory> 73*9c4491cfSAnoob Joseph make config T=arm64-thunderx-linuxapp-gcc 74*9c4491cfSAnoob Joseph make 75*9c4491cfSAnoob Joseph 76*9c4491cfSAnoob JosephThe example applications can be compiled using the following: 77*9c4491cfSAnoob Joseph 78*9c4491cfSAnoob Joseph.. code-block:: console 79*9c4491cfSAnoob Joseph 80*9c4491cfSAnoob Joseph cd <dpdk directory> 81*9c4491cfSAnoob Joseph export RTE_SDK=$PWD 82*9c4491cfSAnoob Joseph export RTE_TARGET=build 83*9c4491cfSAnoob Joseph cd examples/<application> 84*9c4491cfSAnoob Joseph make 85*9c4491cfSAnoob Joseph 86*9c4491cfSAnoob JosephExecution 87*9c4491cfSAnoob Joseph--------- 88*9c4491cfSAnoob Joseph 89*9c4491cfSAnoob JosephThe number of crypto VFs to be enabled can be controlled by setting sysfs entry, 90*9c4491cfSAnoob Joseph`sriov_numvfs`, for the corresponding PF driver. 91*9c4491cfSAnoob Joseph 92*9c4491cfSAnoob Joseph.. code-block:: console 93*9c4491cfSAnoob Joseph 94*9c4491cfSAnoob Joseph echo <num_vfs> > /sys/bus/pci/devices/<dev_bus_id>/sriov_numvfs 95*9c4491cfSAnoob Joseph 96*9c4491cfSAnoob JosephThe device bus ID, `dev_bus_id`, to be used in the above step can be found out 97*9c4491cfSAnoob Josephby using dpdk-devbind.py script. The OCTEON TX crypto PF device need to be 98*9c4491cfSAnoob Josephidentified and the corresponding device number can be used to tune various PF 99*9c4491cfSAnoob Josephproperties. 100*9c4491cfSAnoob Joseph 101*9c4491cfSAnoob Joseph 102*9c4491cfSAnoob JosephOnce the required VFs are enabled, dpdk-devbind.py script can be used to 103*9c4491cfSAnoob Josephidentify the VFs. To be accessible from DPDK, VFs need to be bound to vfio-pci 104*9c4491cfSAnoob Josephdriver: 105*9c4491cfSAnoob Joseph 106*9c4491cfSAnoob Joseph.. code-block:: console 107*9c4491cfSAnoob Joseph 108*9c4491cfSAnoob Joseph cd <dpdk directory> 109*9c4491cfSAnoob Joseph ./usertools/dpdk-devbind.py -u <vf device no> 110*9c4491cfSAnoob Joseph ./usertools/dpdk-devbind.py -b vfio-pci <vf device no> 111*9c4491cfSAnoob Joseph 112*9c4491cfSAnoob JosephAppropriate huge page need to be setup in order to run the DPDK example 113*9c4491cfSAnoob Josephapplications. 114*9c4491cfSAnoob Joseph 115*9c4491cfSAnoob Joseph.. code-block:: console 116*9c4491cfSAnoob Joseph 117*9c4491cfSAnoob Joseph echo 8 > /sys/kernel/mm/hugepages/hugepages-524288kB/nr_hugepages 118*9c4491cfSAnoob Joseph mkdir /mnt/huge 119*9c4491cfSAnoob Joseph mount -t hugetlbfs nodev /mnt/huge 120*9c4491cfSAnoob Joseph 121*9c4491cfSAnoob JosephExample applications can now be executed with crypto operations offloaded to 122*9c4491cfSAnoob JosephOCTEON TX crypto PMD. 123*9c4491cfSAnoob Joseph 124*9c4491cfSAnoob Joseph.. code-block:: console 125*9c4491cfSAnoob Joseph 126*9c4491cfSAnoob Joseph ./build/ipsec-secgw --log-level=8 -c 0xff -- -P -p 0x3 -u 0x2 --config 127*9c4491cfSAnoob Joseph "(1,0,0),(0,0,0)" -f ep1.cfg 128