xref: /dpdk/doc/guides/cryptodevs/uadk.rst (revision 9599c59b4f86ea8d8098027cb541f3d32ca1631e)
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