@@ -49,10 +49,38 @@ static const struct adf_fw_config adf_fw_dc_config[] = {
49
49
{0x100 , ADF_FW_ADMIN_OBJ },
50
50
};
51
51
52
+ static const struct adf_fw_config adf_fw_sym_config [] = {
53
+ {0xF0 , ADF_FW_SYM_OBJ },
54
+ {0xF , ADF_FW_SYM_OBJ },
55
+ {0x100 , ADF_FW_ADMIN_OBJ },
56
+ };
57
+
58
+ static const struct adf_fw_config adf_fw_asym_config [] = {
59
+ {0xF0 , ADF_FW_ASYM_OBJ },
60
+ {0xF , ADF_FW_ASYM_OBJ },
61
+ {0x100 , ADF_FW_ADMIN_OBJ },
62
+ };
63
+
64
+ static const struct adf_fw_config adf_fw_asym_dc_config [] = {
65
+ {0xF0 , ADF_FW_ASYM_OBJ },
66
+ {0xF , ADF_FW_DC_OBJ },
67
+ {0x100 , ADF_FW_ADMIN_OBJ },
68
+ };
69
+
70
+ static const struct adf_fw_config adf_fw_sym_dc_config [] = {
71
+ {0xF0 , ADF_FW_SYM_OBJ },
72
+ {0xF , ADF_FW_DC_OBJ },
73
+ {0x100 , ADF_FW_ADMIN_OBJ },
74
+ };
75
+
52
76
static_assert (ARRAY_SIZE (adf_fw_cy_config ) == ARRAY_SIZE (adf_fw_dc_config ));
77
+ static_assert (ARRAY_SIZE (adf_fw_cy_config ) == ARRAY_SIZE (adf_fw_sym_config ));
78
+ static_assert (ARRAY_SIZE (adf_fw_cy_config ) == ARRAY_SIZE (adf_fw_asym_config ));
79
+ static_assert (ARRAY_SIZE (adf_fw_cy_config ) == ARRAY_SIZE (adf_fw_asym_dc_config ));
80
+ static_assert (ARRAY_SIZE (adf_fw_cy_config ) == ARRAY_SIZE (adf_fw_sym_dc_config ));
53
81
54
82
/* Worker thread to service arbiter mappings */
55
- static const u32 thrd_to_arb_map_cy [ADF_4XXX_MAX_ACCELENGINES ] = {
83
+ static const u32 default_thrd_to_arb_map [ADF_4XXX_MAX_ACCELENGINES ] = {
56
84
0x5555555 , 0x5555555 , 0x5555555 , 0x5555555 ,
57
85
0xAAAAAAA , 0xAAAAAAA , 0xAAAAAAA , 0xAAAAAAA ,
58
86
0x0
@@ -72,12 +100,26 @@ static struct adf_hw_device_class adf_4xxx_class = {
72
100
73
101
enum dev_services {
74
102
SVC_CY = 0 ,
103
+ SVC_CY2 ,
75
104
SVC_DC ,
105
+ SVC_SYM ,
106
+ SVC_ASYM ,
107
+ SVC_DC_ASYM ,
108
+ SVC_ASYM_DC ,
109
+ SVC_DC_SYM ,
110
+ SVC_SYM_DC ,
76
111
};
77
112
78
113
static const char * const dev_cfg_services [] = {
79
114
[SVC_CY ] = ADF_CFG_CY ,
115
+ [SVC_CY2 ] = ADF_CFG_ASYM_SYM ,
80
116
[SVC_DC ] = ADF_CFG_DC ,
117
+ [SVC_SYM ] = ADF_CFG_SYM ,
118
+ [SVC_ASYM ] = ADF_CFG_ASYM ,
119
+ [SVC_DC_ASYM ] = ADF_CFG_DC_ASYM ,
120
+ [SVC_ASYM_DC ] = ADF_CFG_ASYM_DC ,
121
+ [SVC_DC_SYM ] = ADF_CFG_DC_SYM ,
122
+ [SVC_SYM_DC ] = ADF_CFG_SYM_DC ,
81
123
};
82
124
83
125
static int get_service_enabled (struct adf_accel_dev * accel_dev )
@@ -167,45 +209,50 @@ static void set_msix_default_rttable(struct adf_accel_dev *accel_dev)
167
209
static u32 get_accel_cap (struct adf_accel_dev * accel_dev )
168
210
{
169
211
struct pci_dev * pdev = accel_dev -> accel_pci_dev .pci_dev ;
170
- u32 capabilities_cy , capabilities_dc ;
212
+ u32 capabilities_sym , capabilities_asym , capabilities_dc ;
171
213
u32 fusectl1 ;
172
214
173
215
/* Read accelerator capabilities mask */
174
216
pci_read_config_dword (pdev , ADF_4XXX_FUSECTL1_OFFSET , & fusectl1 );
175
217
176
- capabilities_cy = ICP_ACCEL_CAPABILITIES_CRYPTO_SYMMETRIC |
177
- ICP_ACCEL_CAPABILITIES_CRYPTO_ASYMMETRIC |
218
+ capabilities_sym = ICP_ACCEL_CAPABILITIES_CRYPTO_SYMMETRIC |
178
219
ICP_ACCEL_CAPABILITIES_CIPHER |
179
220
ICP_ACCEL_CAPABILITIES_AUTHENTICATION |
180
221
ICP_ACCEL_CAPABILITIES_SHA3 |
181
222
ICP_ACCEL_CAPABILITIES_SHA3_EXT |
182
223
ICP_ACCEL_CAPABILITIES_HKDF |
183
- ICP_ACCEL_CAPABILITIES_ECEDMONT |
184
224
ICP_ACCEL_CAPABILITIES_CHACHA_POLY |
185
225
ICP_ACCEL_CAPABILITIES_AESGCM_SPC |
186
226
ICP_ACCEL_CAPABILITIES_AES_V2 ;
187
227
188
228
/* A set bit in fusectl1 means the feature is OFF in this SKU */
189
229
if (fusectl1 & ICP_ACCEL_4XXX_MASK_CIPHER_SLICE ) {
190
- capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_CRYPTO_SYMMETRIC ;
191
- capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_HKDF ;
192
- capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_CIPHER ;
230
+ capabilities_sym &= ~ICP_ACCEL_CAPABILITIES_CRYPTO_SYMMETRIC ;
231
+ capabilities_sym &= ~ICP_ACCEL_CAPABILITIES_HKDF ;
232
+ capabilities_sym &= ~ICP_ACCEL_CAPABILITIES_CIPHER ;
193
233
}
234
+
194
235
if (fusectl1 & ICP_ACCEL_4XXX_MASK_UCS_SLICE ) {
195
- capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_CHACHA_POLY ;
196
- capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_AESGCM_SPC ;
197
- capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_AES_V2 ;
198
- capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_CIPHER ;
236
+ capabilities_sym &= ~ICP_ACCEL_CAPABILITIES_CHACHA_POLY ;
237
+ capabilities_sym &= ~ICP_ACCEL_CAPABILITIES_AESGCM_SPC ;
238
+ capabilities_sym &= ~ICP_ACCEL_CAPABILITIES_AES_V2 ;
239
+ capabilities_sym &= ~ICP_ACCEL_CAPABILITIES_CIPHER ;
199
240
}
241
+
200
242
if (fusectl1 & ICP_ACCEL_4XXX_MASK_AUTH_SLICE ) {
201
- capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_AUTHENTICATION ;
202
- capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_SHA3 ;
203
- capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_SHA3_EXT ;
204
- capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_CIPHER ;
243
+ capabilities_sym &= ~ICP_ACCEL_CAPABILITIES_AUTHENTICATION ;
244
+ capabilities_sym &= ~ICP_ACCEL_CAPABILITIES_SHA3 ;
245
+ capabilities_sym &= ~ICP_ACCEL_CAPABILITIES_SHA3_EXT ;
246
+ capabilities_sym &= ~ICP_ACCEL_CAPABILITIES_CIPHER ;
205
247
}
248
+
249
+ capabilities_asym = ICP_ACCEL_CAPABILITIES_CRYPTO_ASYMMETRIC |
250
+ ICP_ACCEL_CAPABILITIES_CIPHER |
251
+ ICP_ACCEL_CAPABILITIES_ECEDMONT ;
252
+
206
253
if (fusectl1 & ICP_ACCEL_4XXX_MASK_PKE_SLICE ) {
207
- capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_CRYPTO_ASYMMETRIC ;
208
- capabilities_cy &= ~ICP_ACCEL_CAPABILITIES_ECEDMONT ;
254
+ capabilities_asym &= ~ICP_ACCEL_CAPABILITIES_CRYPTO_ASYMMETRIC ;
255
+ capabilities_asym &= ~ICP_ACCEL_CAPABILITIES_ECEDMONT ;
209
256
}
210
257
211
258
capabilities_dc = ICP_ACCEL_CAPABILITIES_COMPRESSION |
@@ -222,9 +269,20 @@ static u32 get_accel_cap(struct adf_accel_dev *accel_dev)
222
269
223
270
switch (get_service_enabled (accel_dev )) {
224
271
case SVC_CY :
225
- return capabilities_cy ;
272
+ case SVC_CY2 :
273
+ return capabilities_sym | capabilities_asym ;
226
274
case SVC_DC :
227
275
return capabilities_dc ;
276
+ case SVC_SYM :
277
+ return capabilities_sym ;
278
+ case SVC_ASYM :
279
+ return capabilities_asym ;
280
+ case SVC_ASYM_DC :
281
+ case SVC_DC_ASYM :
282
+ return capabilities_asym | capabilities_dc ;
283
+ case SVC_SYM_DC :
284
+ case SVC_DC_SYM :
285
+ return capabilities_sym | capabilities_dc ;
228
286
default :
229
287
return 0 ;
230
288
}
@@ -238,12 +296,10 @@ static enum dev_sku_info get_sku(struct adf_hw_device_data *self)
238
296
static const u32 * adf_get_arbiter_mapping (struct adf_accel_dev * accel_dev )
239
297
{
240
298
switch (get_service_enabled (accel_dev )) {
241
- case SVC_CY :
242
- return thrd_to_arb_map_cy ;
243
299
case SVC_DC :
244
300
return thrd_to_arb_map_dc ;
245
301
default :
246
- return NULL ;
302
+ return default_thrd_to_arb_map ;
247
303
}
248
304
}
249
305
@@ -325,11 +381,26 @@ static const char *uof_get_name(struct adf_accel_dev *accel_dev, u32 obj_num,
325
381
326
382
switch (get_service_enabled (accel_dev )) {
327
383
case SVC_CY :
384
+ case SVC_CY2 :
328
385
id = adf_fw_cy_config [obj_num ].obj ;
329
386
break ;
330
387
case SVC_DC :
331
388
id = adf_fw_dc_config [obj_num ].obj ;
332
389
break ;
390
+ case SVC_SYM :
391
+ id = adf_fw_sym_config [obj_num ].obj ;
392
+ break ;
393
+ case SVC_ASYM :
394
+ id = adf_fw_asym_config [obj_num ].obj ;
395
+ break ;
396
+ case SVC_ASYM_DC :
397
+ case SVC_DC_ASYM :
398
+ id = adf_fw_asym_dc_config [obj_num ].obj ;
399
+ break ;
400
+ case SVC_SYM_DC :
401
+ case SVC_DC_SYM :
402
+ id = adf_fw_sym_dc_config [obj_num ].obj ;
403
+ break ;
333
404
default :
334
405
id = - EINVAL ;
335
406
break ;
@@ -362,6 +433,18 @@ static u32 uof_get_ae_mask(struct adf_accel_dev *accel_dev, u32 obj_num)
362
433
return adf_fw_cy_config [obj_num ].ae_mask ;
363
434
case SVC_DC :
364
435
return adf_fw_dc_config [obj_num ].ae_mask ;
436
+ case SVC_CY2 :
437
+ return adf_fw_cy_config [obj_num ].ae_mask ;
438
+ case SVC_SYM :
439
+ return adf_fw_sym_config [obj_num ].ae_mask ;
440
+ case SVC_ASYM :
441
+ return adf_fw_asym_config [obj_num ].ae_mask ;
442
+ case SVC_ASYM_DC :
443
+ case SVC_DC_ASYM :
444
+ return adf_fw_asym_dc_config [obj_num ].ae_mask ;
445
+ case SVC_SYM_DC :
446
+ case SVC_DC_SYM :
447
+ return adf_fw_sym_dc_config [obj_num ].ae_mask ;
365
448
default :
366
449
return 0 ;
367
450
}
0 commit comments