18c515d96SZhangfei Gao.. SPDX-License-Identifier: BSD-3-Clause 28c515d96SZhangfei Gao Copyright 2022-2023 Huawei Technologies Co.,Ltd. All rights reserved. 38c515d96SZhangfei Gao Copyright 2022-2023 Linaro ltd. 48c515d96SZhangfei Gao 58c515d96SZhangfei GaoUADK Crypto Poll Mode Driver 68c515d96SZhangfei Gao============================ 78c515d96SZhangfei Gao 88c515d96SZhangfei GaoThis code provides the initial implementation of the UADK poll mode driver. 98c515d96SZhangfei GaoAll cryptographic operations are using UADK library crypto API, 108c515d96SZhangfei Gaowhich is algorithm level API, abstracting accelerators' low level implementations. 118c515d96SZhangfei Gao 128c515d96SZhangfei GaoUADK crypto PMD relies on `UADK library <https://github.com/Linaro/uadk>`_. 138c515d96SZhangfei Gao 148c515d96SZhangfei GaoUADK is a framework for user applications to access hardware accelerators. 158c515d96SZhangfei GaoUADK relies on IOMMU SVA (Shared Virtual Address) feature, 168c515d96SZhangfei Gaowhich share the same page table between IOMMU and MMU. 178c515d96SZhangfei GaoAs a result, user application can directly use virtual address for device DMA, 188c515d96SZhangfei Gaowhich enhances the performance as well as easy usability. 198c515d96SZhangfei Gao 208c515d96SZhangfei Gao 218c515d96SZhangfei GaoFeatures 228c515d96SZhangfei Gao-------- 238c515d96SZhangfei Gao 248c515d96SZhangfei GaoUADK crypto PMD has support for: 258c515d96SZhangfei Gao 263b3cd89eSZhangfei GaoCipher algorithms: 273b3cd89eSZhangfei Gao 283b3cd89eSZhangfei Gao* ``RTE_CRYPTO_CIPHER_AES_ECB`` 293b3cd89eSZhangfei Gao* ``RTE_CRYPTO_CIPHER_AES_CBC`` 303b3cd89eSZhangfei Gao* ``RTE_CRYPTO_CIPHER_AES_XTS`` 313b3cd89eSZhangfei Gao* ``RTE_CRYPTO_CIPHER_DES_CBC`` 328c515d96SZhangfei Gao 33ec23c286SZhangfei GaoHash algorithms: 34ec23c286SZhangfei Gao 35ec23c286SZhangfei Gao* ``RTE_CRYPTO_AUTH_MD5`` 36ec23c286SZhangfei Gao* ``RTE_CRYPTO_AUTH_MD5_HMAC`` 37ec23c286SZhangfei Gao* ``RTE_CRYPTO_AUTH_SHA1`` 38ec23c286SZhangfei Gao* ``RTE_CRYPTO_AUTH_SHA1_HMAC`` 39ec23c286SZhangfei Gao* ``RTE_CRYPTO_AUTH_SHA224`` 40ec23c286SZhangfei Gao* ``RTE_CRYPTO_AUTH_SHA224_HMAC`` 41ec23c286SZhangfei Gao* ``RTE_CRYPTO_AUTH_SHA256`` 42ec23c286SZhangfei Gao* ``RTE_CRYPTO_AUTH_SHA256_HMAC`` 43ec23c286SZhangfei Gao* ``RTE_CRYPTO_AUTH_SHA384`` 44ec23c286SZhangfei Gao* ``RTE_CRYPTO_AUTH_SHA384_HMAC`` 45ec23c286SZhangfei Gao* ``RTE_CRYPTO_AUTH_SHA512`` 46ec23c286SZhangfei Gao* ``RTE_CRYPTO_AUTH_SHA512_HMAC`` 47ec23c286SZhangfei Gao 488c515d96SZhangfei GaoTest steps 498c515d96SZhangfei Gao---------- 508c515d96SZhangfei Gao 518c515d96SZhangfei Gao 528c515d96SZhangfei Gao#. Build UADK 538c515d96SZhangfei Gao 548c515d96SZhangfei Gao .. code-block:: console 558c515d96SZhangfei Gao 568c515d96SZhangfei Gao git clone https://github.com/Linaro/uadk.git 578c515d96SZhangfei Gao cd uadk 588c515d96SZhangfei Gao mkdir build 598c515d96SZhangfei Gao ./autogen.sh 608c515d96SZhangfei Gao ./configure --prefix=$PWD/build 618c515d96SZhangfei Gao make 628c515d96SZhangfei Gao make install 638c515d96SZhangfei Gao 648c515d96SZhangfei Gao .. note:: 658c515d96SZhangfei Gao 668c515d96SZhangfei Gao Without ``--prefix``, UADK will be installed to ``/usr/local/lib`` by default. 678c515d96SZhangfei Gao 688c515d96SZhangfei Gao .. note:: 698c515d96SZhangfei Gao 708c515d96SZhangfei Gao If get error: "cannot find -lnuma", please install the libnuma-dev. 718c515d96SZhangfei Gao 728c515d96SZhangfei Gao#. Run pkg-config libwd to ensure env is setup correctly 738c515d96SZhangfei Gao 748c515d96SZhangfei Gao .. code-block:: console 758c515d96SZhangfei Gao 768c515d96SZhangfei Gao export PKG_CONFIG_PATH=$PWD/build/lib/pkgconfig 778c515d96SZhangfei Gao pkg-config libwd --cflags --libs -I/usr/local/include -L/usr/local/lib -lwd 788c515d96SZhangfei Gao 798c515d96SZhangfei Gao .. note:: 808c515d96SZhangfei Gao 818c515d96SZhangfei Gao export ``PKG_CONFIG_PATH`` is required on demand, 828c515d96SZhangfei Gao not needed if UADK is installed to ``/usr/local/lib``. 838c515d96SZhangfei Gao 848c515d96SZhangfei Gao#. Build DPDK 858c515d96SZhangfei Gao 868c515d96SZhangfei Gao .. code-block:: console 878c515d96SZhangfei Gao 888c515d96SZhangfei Gao cd dpdk 898c515d96SZhangfei Gao mkdir build 90e24b8ad4SStephen Hemminger meson setup build (--reconfigure) 918c515d96SZhangfei Gao cd build 928c515d96SZhangfei Gao ninja 93*9599c59bSBruce Richardson sudo meson install 948c515d96SZhangfei Gao 958c515d96SZhangfei Gao#. Prepare hugepages for DPDK (see also :doc:`../tools/hugepages`) 968c515d96SZhangfei Gao 978c515d96SZhangfei Gao .. code-block:: console 988c515d96SZhangfei Gao 998c515d96SZhangfei Gao echo 1024 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages 1008c515d96SZhangfei Gao echo 1024 > /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages 1018c515d96SZhangfei Gao echo 1024 > /sys/devices/system/node/node2/hugepages/hugepages-2048kB/nr_hugepages 1028c515d96SZhangfei Gao echo 1024 > /sys/devices/system/node/node3/hugepages/hugepages-2048kB/nr_hugepages 1038c515d96SZhangfei Gao mkdir -p /mnt/huge_2mb 1048c515d96SZhangfei Gao mount -t hugetlbfs none /mnt/huge_2mb -o pagesize=2MB 1058c515d96SZhangfei Gao 1068c515d96SZhangfei Gao#. Run test app 1078799d66eSZhangfei Gao 1088799d66eSZhangfei Gao .. code-block:: console 1098799d66eSZhangfei Gao 1108799d66eSZhangfei Gao sudo dpdk-test --vdev=crypto_uadk --log-level=6 1118799d66eSZhangfei Gao RTE>>cryptodev_uadk_autotest 1128799d66eSZhangfei Gao RTE>>quit 113a8ca598cSZhangfei Gao 114a8ca598cSZhangfei Gao 115a8ca598cSZhangfei GaoInitialization 116a8ca598cSZhangfei Gao-------------- 117a8ca598cSZhangfei Gao 118a8ca598cSZhangfei GaoTo use the PMD in an application, the user must: 119a8ca598cSZhangfei Gao 120a8ca598cSZhangfei Gao* Call ``rte_vdev_init("crypto_uadk")`` within the application. 121a8ca598cSZhangfei Gao 122a8ca598cSZhangfei Gao* Use ``--vdev="crypto_uadk"`` in the EAL options, 123a8ca598cSZhangfei Gao which will call rte_vdev_init() internally. 124a8ca598cSZhangfei Gao 125a8ca598cSZhangfei GaoThe following parameters (all optional) can be provided in the previous two calls: 126a8ca598cSZhangfei Gao 127a8ca598cSZhangfei Gao``max_nb_queue_pairs`` 128a8ca598cSZhangfei Gao Specify the maximum number of queue pairs in the device (8 by default). 129a8ca598cSZhangfei Gao The maximum value can be queried from the device property ``available_instances``. 130a8ca598cSZhangfei Gao Property ``available_instances`` value may differ from the devices and platforms. 131a8ca598cSZhangfei Gao Allocating queue pairs bigger than ``available_instances`` will fail. 132a8ca598cSZhangfei Gao 133a8ca598cSZhangfei GaoExample: 134a8ca598cSZhangfei Gao 135a8ca598cSZhangfei Gao.. code-block:: console 136a8ca598cSZhangfei Gao 137a8ca598cSZhangfei Gao cat /sys/class/uacce/hisi_sec2-2/available_instances 138a8ca598cSZhangfei Gao 256 139a8ca598cSZhangfei Gao 140a8ca598cSZhangfei Gao sudo dpdk-test-crypto-perf -l 0-10 --vdev crypto_uadk,max_nb_queue_pairs=10 \ 141a8ca598cSZhangfei Gao -- --devtype crypto_uadk --optype cipher-only --buffer-sz 8192 142