net/ena: proxy AQ calls to primary process
[dpdk.git] / doc / guides / cryptodevs / mlx5.rst
1 .. SPDX-License-Identifier: BSD-3-Clause
2    Copyright (c) 2021 NVIDIA Corporation & Affiliates
3
4 .. include:: <isonum.txt>
5
6 MLX5 Crypto Driver
7 ==================
8
9 The MLX5 crypto driver library
10 (**librte_crypto_mlx5**) provides support for **Mellanox ConnectX-6**
11 family adapters.
12
13 Overview
14 --------
15
16 The device can provide disk encryption services,
17 allowing data encryption and decryption towards a disk.
18 Having all encryption/decryption operations done in a single device
19 can reduce cost and overheads of the related FIPS certification,
20 as ConnectX-6 is FIPS 140-2 level-2 ready.
21 The encryption cipher is AES-XTS of 256/512 bit key size.
22
23 MKEY is a memory region object in the hardware,
24 that holds address translation information and attributes per memory area.
25 Its ID must be tied to addresses provided to the hardware.
26 The encryption operations are performed with MKEY read/write transactions,
27 when the MKEY is configured to perform crypto operations.
28
29 The encryption does not require text to be aligned to the AES block size (128b).
30
31 For security reasons and to increase robustness, this driver only deals with virtual
32 memory addresses. The way resources allocations are handled by the kernel,
33 combined with hardware specifications that allow handling virtual memory
34 addresses directly, ensure that DPDK applications cannot access random
35 physical memory (or memory that does not belong to the current process).
36
37 The PMD uses ``libibverbs`` and ``libmlx5`` to access the device firmware
38 or to access the hardware components directly.
39 There are different levels of objects and bypassing abilities.
40 To get the best performances:
41
42 - Verbs is a complete high-level generic API (Linux only).
43 - Direct Verbs is a device-specific API (Linux only).
44 - DevX allows to access firmware objects.
45
46 Enabling ``librte_crypto_mlx5`` causes DPDK applications
47 to be linked against libibverbs on Linux OS.
48
49 In order to move the device to crypto operational mode, credential and KEK
50 (Key Encrypting Key) should be set as the first step.
51 The credential will be used by the software in order to perform crypto login, and the KEK is
52 the AES Key Wrap Algorithm (rfc3394) key that will be used for sensitive data
53 wrapping.
54 The credential and the AES-XTS keys should be provided to the hardware, as ciphertext
55 encrypted by the KEK.
56
57 A keytag (64 bits) should be appended to the AES-XTS keys (before wrapping),
58 and will be validated when the hardware attempts to access it.
59
60 When crypto engines are defined to work in wrapped import method, they come out
61 of the factory in Commissioning mode, and thus, cannot be used for crypto operations
62 yet. A dedicated tool is used for changing the mode from Commissioning to
63 Operational, while setting the first import_KEK and credential in plaintext.
64 The mlxreg dedicated tool should be used as follows:
65
66 - Set CRYPTO_OPERATIONAL register to set the device in crypto operational mode.
67
68   The input to this tool is:
69
70   - The first credential in plaintext, 40B.
71   - The first import_KEK in plaintext: kek size 0 for 16B or 1 for 32B, kek data.
72
73   Example::
74
75      mlxreg -d /dev/mst/mt4123_pciconf0 --reg_name CRYPTO_OPERATIONAL --get
76
77   The "wrapped_crypto_operational" value will be "0x00000000".
78   The command to set the register should be executed only once, and all the
79   values mentioned above should be specified in the same command.
80
81   Example::
82
83      mlxreg -d /dev/mst/mt4123_pciconf0 --reg_name CRYPTO_OPERATIONAL \
84      --set "credential[0]=0x10000000, credential[1]=0x10000000, kek[0]=0x00000000"
85
86   All values not specified will remain 0.
87   "wrapped_crypto_going_to_commissioning" and  "wrapped_crypto_operational"
88   should not be specified.
89
90   All the device ports should set it in order to move to operational mode.
91   For BlueField 2, the internal ports in the ARM system should also be set.
92
93 - Query CRYPTO_OPERATIONAL register to make sure the device is in Operational
94   mode.
95
96   Example::
97
98      mlxreg -d /dev/mst/mt4123_pciconf0 --reg_name CRYPTO_OPERATIONAL --get
99
100   The "wrapped_crypto_operational" value will be "0x00000001" if the mode was
101   successfully changed to operational mode.
102
103   The mlx5 crypto PMD can be verified by running the test application::
104
105      dpdk-test -c 1 -n 1 -w <dev>,class=crypto,wcs_file=<file_path>
106      RTE>>cryptodev_mlx5_autotest
107
108
109 Driver options
110 --------------
111
112 - ``class`` parameter [string]
113
114   Select the class of the driver that should probe the device.
115   `crypto` for the mlx5 crypto driver.
116
117 - ``wcs_file`` parameter [string] - mandatory
118
119   File path including only the wrapped credential in string format of hexadecimal
120   numbers, represent 48 bytes (8 bytes IV added by the AES key wrap algorithm).
121
122 - ``import_kek_id`` parameter [int]
123
124   The identifier of the KEK, default value is 0 represents the operational
125   register import_kek..
126
127 - ``credential_id`` parameter [int]
128
129   The identifier of the credential, default value is 0 represents the operational
130   register credential.
131
132 - ``keytag`` parameter [int]
133
134   The plaintext of the keytag appended to the AES-XTS keys, default value is 0.
135
136 - ``max_segs_num`` parameter [int]
137
138   Maximum number of mbuf chain segments(src or dest), default value is 8.
139
140
141 Supported NICs
142 --------------
143
144 * Mellanox\ |reg| ConnectX\ |reg|-6 200G MCX654106A-HCAT (2x200G)
145 * Mellanox\ |reg| BlueField 2 SmartNIC
146 * Mellanox\ |reg| ConnectX\ |reg|-6 Dx
147
148
149 Limitations
150 -----------
151
152 - AES-XTS keys provided in xform must include keytag and should be wrapped.
153 - The supported data-unit lengths are 512B and 4KB and 1MB. In case the `dataunit_len`
154   is not provided in the cipher xform, the OP length is limited to the above
155   values.
156
157
158 Prerequisites
159 -------------
160
161 FW Prerequisites
162 ~~~~~~~~~~~~~~~~
163
164 - xx.31.0328 for ConnectX-6.
165 - xx.32.0108 for ConnectX-6 Dx and BlueField 2.
166
167 Linux Prerequisites
168 ~~~~~~~~~~~~~~~~~~~
169
170 - Mellanox OFED version: **5.3**.
171   see :doc:`../../nics/mlx5` guide for more Mellanox OFED details.
172
173 - Compilation can be done also with rdma-core v15+.
174   see :doc:`../../nics/mlx5` guide for more rdma-core details.
175
176 Windows Prerequisites
177 ~~~~~~~~~~~~~~~~~~~~~
178
179 - Mellanox WINOF-2 version: **2.60** or higher.
180   see :doc:`../../nics/mlx5` guide for more Mellanox WINOF-2 details.