xref: /dpdk/doc/guides/cryptodevs/ccp.rst (revision 8809f78c7dd9f33a44a4f89c58fc91ded34296ed)
14433ced9SRavi Kumar.. SPDX-License-Identifier: BSD-3-Clause
24433ced9SRavi Kumar   Copyright(c) 2018 Advanced Micro Devices, Inc. All rights reserved.
34433ced9SRavi Kumar
44433ced9SRavi KumarAMD CCP Poll Mode Driver
54433ced9SRavi Kumar========================
64433ced9SRavi Kumar
74433ced9SRavi KumarThis code provides the initial implementation of the ccp poll mode driver.
8*8809f78cSBruce RichardsonThe CCP poll mode driver library (**librte_crypto_ccp**) implements support for
94433ced9SRavi KumarAMD’s cryptographic co-processor (CCP). The CCP PMD is a virtual crypto
104433ced9SRavi Kumarpoll mode driver which schedules crypto operations to one or more available
114433ced9SRavi KumarCCP hardware engines on the platform. The CCP PMD provides poll mode crypto
124433ced9SRavi Kumardriver support for the following hardware accelerator devices::
134433ced9SRavi Kumar
144433ced9SRavi Kumar	AMD Cryptographic Co-processor (0x1456)
154433ced9SRavi Kumar	AMD Cryptographic Co-processor (0x1468)
164433ced9SRavi Kumar
174433ced9SRavi KumarFeatures
184433ced9SRavi Kumar--------
194433ced9SRavi Kumar
204433ced9SRavi KumarCCP crypto PMD has support for:
214433ced9SRavi Kumar
224433ced9SRavi KumarCipher algorithms:
234433ced9SRavi Kumar
244433ced9SRavi Kumar* ``RTE_CRYPTO_CIPHER_AES_CBC``
254433ced9SRavi Kumar* ``RTE_CRYPTO_CIPHER_AES_ECB``
264433ced9SRavi Kumar* ``RTE_CRYPTO_CIPHER_AES_CTR``
274433ced9SRavi Kumar* ``RTE_CRYPTO_CIPHER_3DES_CBC``
284433ced9SRavi Kumar
294433ced9SRavi KumarHash algorithms:
304433ced9SRavi Kumar
314433ced9SRavi Kumar* ``RTE_CRYPTO_AUTH_SHA1``
324433ced9SRavi Kumar* ``RTE_CRYPTO_AUTH_SHA1_HMAC``
334433ced9SRavi Kumar* ``RTE_CRYPTO_AUTH_SHA224``
344433ced9SRavi Kumar* ``RTE_CRYPTO_AUTH_SHA224_HMAC``
354433ced9SRavi Kumar* ``RTE_CRYPTO_AUTH_SHA256``
364433ced9SRavi Kumar* ``RTE_CRYPTO_AUTH_SHA256_HMAC``
374433ced9SRavi Kumar* ``RTE_CRYPTO_AUTH_SHA384``
384433ced9SRavi Kumar* ``RTE_CRYPTO_AUTH_SHA384_HMAC``
394433ced9SRavi Kumar* ``RTE_CRYPTO_AUTH_SHA512``
404433ced9SRavi Kumar* ``RTE_CRYPTO_AUTH_SHA512_HMAC``
414433ced9SRavi Kumar* ``RTE_CRYPTO_AUTH_MD5_HMAC``
424433ced9SRavi Kumar* ``RTE_CRYPTO_AUTH_AES_CMAC``
434433ced9SRavi Kumar* ``RTE_CRYPTO_AUTH_SHA3_224``
444433ced9SRavi Kumar* ``RTE_CRYPTO_AUTH_SHA3_224_HMAC``
454433ced9SRavi Kumar* ``RTE_CRYPTO_AUTH_SHA3_256``
464433ced9SRavi Kumar* ``RTE_CRYPTO_AUTH_SHA3_256_HMAC``
474433ced9SRavi Kumar* ``RTE_CRYPTO_AUTH_SHA3_384``
484433ced9SRavi Kumar* ``RTE_CRYPTO_AUTH_SHA3_384_HMAC``
494433ced9SRavi Kumar* ``RTE_CRYPTO_AUTH_SHA3_512``
504433ced9SRavi Kumar* ``RTE_CRYPTO_AUTH_SHA3_512_HMAC``
514433ced9SRavi Kumar
524433ced9SRavi KumarAEAD algorithms:
534433ced9SRavi Kumar
544433ced9SRavi Kumar* ``RTE_CRYPTO_AEAD_AES_GCM``
554433ced9SRavi Kumar
564433ced9SRavi KumarInstallation
574433ced9SRavi Kumar------------
584433ced9SRavi Kumar
59fd5f9fb9SCiara PowerTo compile ccp PMD, openssl packages have to be installed in the build
60fd5f9fb9SCiara Powerenvironment.
614433ced9SRavi Kumar
62e0d88a39SRavi KumarFor Ubuntu 16.04 LTS use below to install openssl in the build system:
63e0d88a39SRavi Kumar
64e0d88a39SRavi Kumar.. code-block:: console
65e0d88a39SRavi Kumar
66e0d88a39SRavi Kumar	sudo apt-get install openssl
674433ced9SRavi Kumar
684433ced9SRavi KumarThis code was verified on Ubuntu 16.04.
694433ced9SRavi Kumar
704433ced9SRavi KumarInitialization
714433ced9SRavi Kumar--------------
724433ced9SRavi Kumar
734433ced9SRavi KumarBind the CCP devices to DPDK UIO driver module before running the CCP PMD stack.
744433ced9SRavi Kumare.g. for the 0x1456 device::
754433ced9SRavi Kumar
764433ced9SRavi Kumar	modprobe uio
7756bb5841SThomas Monjalon	insmod igb_uio.ko
784433ced9SRavi Kumar	echo "1022 1456" > /sys/bus/pci/drivers/igb_uio/new_id
794433ced9SRavi Kumar
804433ced9SRavi KumarAnother way to bind the CCP devices to DPDK UIO driver is by using the ``dpdk-devbind.py`` script.
81e0d88a39SRavi KumarThe following command assumes ``BFD`` as ``0000:09:00.2``::
824433ced9SRavi Kumar
834433ced9SRavi Kumar	cd to the top-level DPDK directory
844433ced9SRavi Kumar	./usertools/dpdk-devbind.py -b igb_uio 0000:09:00.2
854433ced9SRavi Kumar
86e0d88a39SRavi KumarTo use the PMD in an application, user must:
87e0d88a39SRavi Kumar
88e0d88a39SRavi Kumar* Call rte_vdev_init("crypto_ccp") within the application.
89e0d88a39SRavi Kumar
90e0d88a39SRavi Kumar* Use --vdev="crypto_ccp" in the EAL options, which will call rte_vdev_init() internally.
91e0d88a39SRavi Kumar
92e0d88a39SRavi KumarThe following parameters (all optional) can be provided in the previous two calls:
93e0d88a39SRavi Kumar
94e0d88a39SRavi Kumar* socket_id: Specify the socket where the memory for the device is going to be allocated.
95e0d88a39SRavi Kumar  (by default, socket_id will be the socket where the core that is creating the PMD is running on).
96e0d88a39SRavi Kumar
97e0d88a39SRavi Kumar* max_nb_queue_pairs: Specify the maximum number of queue pairs in the device.
98e0d88a39SRavi Kumar
99e0d88a39SRavi Kumar* max_nb_sessions: Specify the maximum number of sessions that can be created (2048 by default).
100e0d88a39SRavi Kumar
101e0d88a39SRavi Kumar* ccp_auth_opt: Specify authentication operations to perform on CPU using openssl APIs.
102e0d88a39SRavi Kumar
103e0d88a39SRavi KumarTo validate ccp pmd, l2fwd-crypto example can be used with following command:
1044433ced9SRavi Kumar
1054433ced9SRavi Kumar.. code-block:: console
1064433ced9SRavi Kumar
107fd5f9fb9SCiara Power        sudo ./<build_dir>/examples/dpdk-l2fwd-crypto -l 1 -n 4 --vdev "crypto_ccp" -- -p 0x1
1081151b4aeSAmaranath Somalapuram        --chain CIPHER_HASH --cipher_op ENCRYPT --cipher_algo aes-cbc
1094433ced9SRavi Kumar        --cipher_key 00:01:02:03:04:05:06:07:08:09:0a:0b:0c:0d:0e:0f
1101151b4aeSAmaranath Somalapuram        --cipher_iv 00:01:02:03:04:05:06:07:08:09:0a:0b:0c:0d:0e:ff
1111151b4aeSAmaranath Somalapuram        --auth_op GENERATE --auth_algo sha1-hmac
1124433ced9SRavi Kumar        --auth_key 11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11
1134433ced9SRavi Kumar        :11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11
1144433ced9SRavi Kumar        :11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11
1154433ced9SRavi Kumar
116e0d88a39SRavi KumarThe CCP PMD also supports computing authentication over CPU with cipher offloaded to CCP.
117e0d88a39SRavi KumarTo enable this feature, pass an additional argument as ccp_auth_opt=1 to --vdev parameters as
118e0d88a39SRavi Kumarfollowing:
119e0d88a39SRavi Kumar
120e0d88a39SRavi Kumar.. code-block:: console
121e0d88a39SRavi Kumar
122fd5f9fb9SCiara Power        sudo ./<build_dir>/examples/dpdk-l2fwd-crypto -l 1 -n 4 --vdev "crypto_ccp,ccp_auth_opt=1" -- -p 0x1
1231151b4aeSAmaranath Somalapuram        --chain CIPHER_HASH --cipher_op ENCRYPT --cipher_algo aes-cbc
124e0d88a39SRavi Kumar        --cipher_key 00:01:02:03:04:05:06:07:08:09:0a:0b:0c:0d:0e:0f
1251151b4aeSAmaranath Somalapuram        --cipher_iv 00:01:02:03:04:05:06:07:08:09:0a:0b:0c:0d:0e:ff
1261151b4aeSAmaranath Somalapuram        --auth_op GENERATE --auth_algo sha1-hmac
127e0d88a39SRavi Kumar        --auth_key 11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11
128e0d88a39SRavi Kumar        :11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11
129e0d88a39SRavi Kumar        :11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11:11
130e0d88a39SRavi Kumar
1314433ced9SRavi KumarLimitations
1324433ced9SRavi Kumar-----------
1334433ced9SRavi Kumar
134e0d88a39SRavi Kumar* Chained mbufs are not supported.
135e0d88a39SRavi Kumar* MD5_HMAC is supported only for CPU based authentication.
136