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