Skip to content

Commit 04a3134

Browse files
author
Saeed Mahameed
committed
net/mlx5: Add PSP capabilities structures and bits
Add mlx5_ifc PSP related capabilities structures and HW definitions needed for PSP support in mlx5. Link: https://lore.kernel.org/netdev/20250828162953.2707727-1-daniel.zahka@gmail.com/ Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
1 parent 40653f2 commit 04a3134

5 files changed

Lines changed: 103 additions & 5 deletions

File tree

drivers/net/ethernet/mellanox/mlx5/core/fw.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,12 @@ int mlx5_query_hca_caps(struct mlx5_core_dev *dev)
294294
return err;
295295
}
296296

297+
if (MLX5_CAP_GEN(dev, psp)) {
298+
err = mlx5_core_get_caps(dev, MLX5_CAP_PSP);
299+
if (err)
300+
return err;
301+
}
302+
297303
return 0;
298304
}
299305

drivers/net/ethernet/mellanox/mlx5/core/main.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1798,6 +1798,7 @@ static const int types[] = {
17981798
MLX5_CAP_VDPA_EMULATION,
17991799
MLX5_CAP_IPSEC,
18001800
MLX5_CAP_PORT_SELECTION,
1801+
MLX5_CAP_PSP,
18011802
MLX5_CAP_MACSEC,
18021803
MLX5_CAP_ADV_VIRTUALIZATION,
18031804
MLX5_CAP_CRYPTO,

drivers/net/ethernet/mellanox/mlx5/core/steering/hws/definer.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1280,7 +1280,7 @@ hws_definer_conv_misc2(struct mlx5hws_definer_conv_data *cd,
12801280
struct mlx5hws_definer_fc *fc = cd->fc;
12811281
struct mlx5hws_definer_fc *curr_fc;
12821282

1283-
if (HWS_IS_FLD_SET_SZ(match_param, misc_parameters_2.reserved_at_1a0, 0x8) ||
1283+
if (HWS_IS_FLD_SET_SZ(match_param, misc_parameters_2.psp_syndrome, 0x8) ||
12841284
HWS_IS_FLD_SET_SZ(match_param,
12851285
misc_parameters_2.ipsec_next_header, 0x8) ||
12861286
HWS_IS_FLD_SET_SZ(match_param, misc_parameters_2.reserved_at_1c0, 0x40) ||

include/linux/mlx5/device.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1248,6 +1248,7 @@ enum mlx5_cap_type {
12481248
MLX5_CAP_IPSEC,
12491249
MLX5_CAP_CRYPTO = 0x1a,
12501250
MLX5_CAP_SHAMPO = 0x1d,
1251+
MLX5_CAP_PSP = 0x1e,
12511252
MLX5_CAP_MACSEC = 0x1f,
12521253
MLX5_CAP_GENERAL_2 = 0x20,
12531254
MLX5_CAP_PORT_SELECTION = 0x25,
@@ -1487,6 +1488,9 @@ enum mlx5_qcam_feature_groups {
14871488
#define MLX5_CAP_SHAMPO(mdev, cap) \
14881489
MLX5_GET(shampo_cap, mdev->caps.hca[MLX5_CAP_SHAMPO]->cur, cap)
14891490

1491+
#define MLX5_CAP_PSP(mdev, cap)\
1492+
MLX5_GET(psp_cap, (mdev)->caps.hca[MLX5_CAP_PSP]->cur, cap)
1493+
14901494
enum {
14911495
MLX5_CMD_STAT_OK = 0x0,
14921496
MLX5_CMD_STAT_INT_ERR = 0x1,

include/linux/mlx5/mlx5_ifc.h

Lines changed: 91 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,8 @@ enum {
314314
MLX5_CMD_OP_CREATE_UMEM = 0xa08,
315315
MLX5_CMD_OP_DESTROY_UMEM = 0xa0a,
316316
MLX5_CMD_OP_SYNC_STEERING = 0xb00,
317+
MLX5_CMD_OP_PSP_GEN_SPI = 0xb10,
318+
MLX5_CMD_OP_PSP_ROTATE_KEY = 0xb11,
317319
MLX5_CMD_OP_QUERY_VHCA_STATE = 0xb0d,
318320
MLX5_CMD_OP_MODIFY_VHCA_STATE = 0xb0e,
319321
MLX5_CMD_OP_SYNC_CRYPTO = 0xb12,
@@ -489,12 +491,14 @@ struct mlx5_ifc_flow_table_prop_layout_bits {
489491
u8 execute_aso[0x1];
490492
u8 reserved_at_47[0x19];
491493

492-
u8 reserved_at_60[0x2];
494+
u8 reformat_l2_to_l3_psp_tunnel[0x1];
495+
u8 reformat_l3_psp_tunnel_to_l2[0x1];
493496
u8 reformat_insert[0x1];
494497
u8 reformat_remove[0x1];
495498
u8 macsec_encrypt[0x1];
496499
u8 macsec_decrypt[0x1];
497-
u8 reserved_at_66[0x2];
500+
u8 psp_encrypt[0x1];
501+
u8 psp_decrypt[0x1];
498502
u8 reformat_add_macsec[0x1];
499503
u8 reformat_remove_macsec[0x1];
500504
u8 reparse[0x1];
@@ -703,7 +707,7 @@ struct mlx5_ifc_fte_match_set_misc2_bits {
703707

704708
u8 metadata_reg_a[0x20];
705709

706-
u8 reserved_at_1a0[0x8];
710+
u8 psp_syndrome[0x8];
707711
u8 macsec_syndrome[0x8];
708712
u8 ipsec_syndrome[0x8];
709713
u8 ipsec_next_header[0x8];
@@ -1511,6 +1515,21 @@ struct mlx5_ifc_macsec_cap_bits {
15111515
u8 reserved_at_40[0x7c0];
15121516
};
15131517

1518+
struct mlx5_ifc_psp_cap_bits {
1519+
u8 reserved_at_0[0x1];
1520+
u8 psp_crypto_offload[0x1];
1521+
u8 reserved_at_2[0x1];
1522+
u8 psp_crypto_esp_aes_gcm_256_encrypt[0x1];
1523+
u8 psp_crypto_esp_aes_gcm_128_encrypt[0x1];
1524+
u8 psp_crypto_esp_aes_gcm_256_decrypt[0x1];
1525+
u8 psp_crypto_esp_aes_gcm_128_decrypt[0x1];
1526+
u8 reserved_at_7[0x4];
1527+
u8 log_max_num_of_psp_spi[0x5];
1528+
u8 reserved_at_10[0x10];
1529+
1530+
u8 reserved_at_20[0x7e0];
1531+
};
1532+
15141533
enum {
15151534
MLX5_WQ_TYPE_LINKED_LIST = 0x0,
15161535
MLX5_WQ_TYPE_CYCLIC = 0x1,
@@ -1876,7 +1895,9 @@ struct mlx5_ifc_cmd_hca_cap_bits {
18761895

18771896
u8 reserved_at_2a0[0x7];
18781897
u8 mkey_pcie_tph[0x1];
1879-
u8 reserved_at_2a8[0x3];
1898+
u8 reserved_at_2a8[0x2];
1899+
1900+
u8 psp[0x1];
18801901
u8 shampo[0x1];
18811902
u8 reserved_at_2ac[0x4];
18821903
u8 max_wqe_sz_rq[0x10];
@@ -3803,6 +3824,7 @@ union mlx5_ifc_hca_cap_union_bits {
38033824
struct mlx5_ifc_macsec_cap_bits macsec_cap;
38043825
struct mlx5_ifc_crypto_cap_bits crypto_cap;
38053826
struct mlx5_ifc_ipsec_cap_bits ipsec_cap;
3827+
struct mlx5_ifc_psp_cap_bits psp_cap;
38063828
u8 reserved_at_0[0x8000];
38073829
};
38083830

@@ -3832,6 +3854,7 @@ enum {
38323854
enum {
38333855
MLX5_FLOW_CONTEXT_ENCRYPT_DECRYPT_TYPE_IPSEC = 0x0,
38343856
MLX5_FLOW_CONTEXT_ENCRYPT_DECRYPT_TYPE_MACSEC = 0x1,
3857+
MLX5_FLOW_CONTEXT_ENCRYPT_DECRYPT_TYPE_PSP = 0x2,
38353858
};
38363859

38373860
struct mlx5_ifc_vlan_bits {
@@ -7159,6 +7182,8 @@ enum mlx5_reformat_ctx_type {
71597182
MLX5_REFORMAT_TYPE_DEL_ESP_TRANSPORT_OVER_UDP = 0xa,
71607183
MLX5_REFORMAT_TYPE_ADD_ESP_TRANSPORT_OVER_IPV6 = 0xb,
71617184
MLX5_REFORMAT_TYPE_ADD_ESP_TRANSPORT_OVER_UDPV6 = 0xc,
7185+
MLX5_REFORMAT_TYPE_ADD_PSP_TUNNEL = 0xd,
7186+
MLX5_REFORMAT_TYPE_DEL_PSP_TUNNEL = 0xe,
71627187
MLX5_REFORMAT_TYPE_INSERT_HDR = 0xf,
71637188
MLX5_REFORMAT_TYPE_REMOVE_HDR = 0x10,
71647189
MLX5_REFORMAT_TYPE_ADD_MACSEC = 0x11,
@@ -7285,6 +7310,7 @@ enum {
72857310
MLX5_ACTION_IN_FIELD_IPSEC_SYNDROME = 0x5D,
72867311
MLX5_ACTION_IN_FIELD_OUT_EMD_47_32 = 0x6F,
72877312
MLX5_ACTION_IN_FIELD_OUT_EMD_31_0 = 0x70,
7313+
MLX5_ACTION_IN_FIELD_PSP_SYNDROME = 0x71,
72887314
};
72897315

72907316
struct mlx5_ifc_alloc_modify_header_context_out_bits {
@@ -13079,6 +13105,7 @@ enum {
1307913105
MLX5_GENERAL_OBJECT_TYPE_ENCRYPTION_KEY_PURPOSE_TLS = 0x1,
1308013106
MLX5_GENERAL_OBJECT_TYPE_ENCRYPTION_KEY_PURPOSE_IPSEC = 0x2,
1308113107
MLX5_GENERAL_OBJECT_TYPE_ENCRYPTION_KEY_PURPOSE_MACSEC = 0x4,
13108+
MLX5_GENERAL_OBJECT_TYPE_ENCRYPTION_KEY_PURPOSE_PSP = 0x6,
1308213109
};
1308313110

1308413111
struct mlx5_ifc_tls_static_params_bits {
@@ -13496,4 +13523,64 @@ enum mlx5e_pcie_cong_event_mod_field {
1349613523
MLX5_PCIE_CONG_EVENT_MOD_THRESH = BIT(2),
1349713524
};
1349813525

13526+
struct mlx5_ifc_psp_rotate_key_in_bits {
13527+
u8 opcode[0x10];
13528+
u8 uid[0x10];
13529+
13530+
u8 reserved_at_20[0x10];
13531+
u8 op_mod[0x10];
13532+
13533+
u8 reserved_at_40[0x40];
13534+
};
13535+
13536+
struct mlx5_ifc_psp_rotate_key_out_bits {
13537+
u8 status[0x8];
13538+
u8 reserved_at_8[0x18];
13539+
13540+
u8 syndrome[0x20];
13541+
13542+
u8 reserved_at_40[0x40];
13543+
};
13544+
13545+
enum mlx5_psp_gen_spi_in_key_size {
13546+
MLX5_PSP_GEN_SPI_IN_KEY_SIZE_128 = 0x0,
13547+
MLX5_PSP_GEN_SPI_IN_KEY_SIZE_256 = 0x1,
13548+
};
13549+
13550+
struct mlx5_ifc_key_spi_bits {
13551+
u8 spi[0x20];
13552+
13553+
u8 reserved_at_20[0x60];
13554+
13555+
u8 key[8][0x20];
13556+
};
13557+
13558+
struct mlx5_ifc_psp_gen_spi_in_bits {
13559+
u8 opcode[0x10];
13560+
u8 uid[0x10];
13561+
13562+
u8 reserved_at_20[0x10];
13563+
u8 op_mod[0x10];
13564+
13565+
u8 reserved_at_40[0x20];
13566+
13567+
u8 key_size[0x2];
13568+
u8 reserved_at_62[0xe];
13569+
u8 num_of_spi[0x10];
13570+
};
13571+
13572+
struct mlx5_ifc_psp_gen_spi_out_bits {
13573+
u8 status[0x8];
13574+
u8 reserved_at_8[0x18];
13575+
13576+
u8 syndrome[0x20];
13577+
13578+
u8 reserved_at_40[0x10];
13579+
u8 num_of_spi[0x10];
13580+
13581+
u8 reserved_at_60[0x20];
13582+
13583+
struct mlx5_ifc_key_spi_bits key_spi[];
13584+
};
13585+
1349913586
#endif /* MLX5_IFC_H */

0 commit comments

Comments
 (0)