Add autogenerated VCAP rule encoding metadata, and VCAP parameters for the LPM VCAP used for L3 routing. Reviewed-by: Daniel Machon Reviewed-by: Steen Hegelund Signed-off-by: Jens Emil Schulz Østergaard --- .../microchip/sparx5/lan969x/lan969x_vcap_ag_api.c | 373 ++++++++++++++++++++- .../ethernet/microchip/sparx5/sparx5_vcap_ag_api.c | 373 ++++++++++++++++++++- .../ethernet/microchip/sparx5/sparx5_vcap_ag_api.h | 6 +- drivers/net/ethernet/microchip/vcap/vcap_ag_api.h | 94 +++++- .../net/ethernet/microchip/vcap/vcap_model_kunit.c | 6 +- 5 files changed, 832 insertions(+), 20 deletions(-) diff --git a/drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_vcap_ag_api.c b/drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_vcap_ag_api.c index 7acc5bcf337a..e623b1dbe9cb 100644 --- a/drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_vcap_ag_api.c +++ b/drivers/net/ethernet/microchip/sparx5/lan969x/lan969x_vcap_ag_api.c @@ -1,10 +1,10 @@ // SPDX-License-Identifier: BSD-3-Clause -/* Copyright (C) 2024 Microchip Technology Inc. and its subsidiaries. +/* Copyright (C) 2026 Microchip Technology Inc. and its subsidiaries. * Microchip VCAP API */ -/* This file is autogenerated by cml-utils 2024-10-07 11:10:56 +0200. - * Commit ID: b5ddc8e244eb2481a9524f1ddc630a8b41e7c391 +/* This file is autogenerated by cml-utils 2026-04-28 13:55:50 +0200. + * Commit ID: cd2494df16a1d3b14f650f720f6a8126b88b553a */ #include @@ -1380,6 +1380,83 @@ static const struct vcap_field es0_isdx_keyfield[] = { }, }; +static const struct vcap_field lpm_sgl_ip4_keyfield[] = { + [VCAP_KF_DST_FLAG] = { + .type = VCAP_FIELD_BIT, + .offset = 0, + .width = 1, + }, + [VCAP_KF_AFFIX] = { + .type = VCAP_FIELD_U32, + .offset = 1, + .width = 10, + }, + [VCAP_KF_IP4_XIP] = { + .type = VCAP_FIELD_U32, + .offset = 11, + .width = 32, + }, +}; + +static const struct vcap_field lpm_dbl_ip4_keyfield[] = { + [VCAP_KF_TYPE] = { + .type = VCAP_FIELD_BIT, + .offset = 0, + .width = 1, + }, + [VCAP_KF_AFFIX] = { + .type = VCAP_FIELD_U32, + .offset = 1, + .width = 10, + }, + [VCAP_KF_IP4_SIP] = { + .type = VCAP_FIELD_U32, + .offset = 11, + .width = 32, + }, + [VCAP_KF_IP4_DIP] = { + .type = VCAP_FIELD_U32, + .offset = 43, + .width = 32, + }, +}; + +static const struct vcap_field lpm_sgl_ip6_keyfield[] = { + [VCAP_KF_DST_FLAG] = { + .type = VCAP_FIELD_BIT, + .offset = 0, + .width = 1, + }, + [VCAP_KF_AFFIX] = { + .type = VCAP_FIELD_U32, + .offset = 1, + .width = 10, + }, + [VCAP_KF_IP6_XIP] = { + .type = VCAP_FIELD_U128, + .offset = 11, + .width = 128, + }, +}; + +static const struct vcap_field lpm_dbl_ip6_keyfield[] = { + [VCAP_KF_AFFIX] = { + .type = VCAP_FIELD_U32, + .offset = 0, + .width = 10, + }, + [VCAP_KF_IP6_SIP] = { + .type = VCAP_FIELD_U128, + .offset = 10, + .width = 128, + }, + [VCAP_KF_IP6_DIP] = { + .type = VCAP_FIELD_U128, + .offset = 138, + .width = 128, + }, +}; + static const struct vcap_field es2_mac_etype_keyfield[] = { [VCAP_KF_TYPE] = { .type = VCAP_FIELD_U32, @@ -2338,6 +2415,29 @@ static const struct vcap_set es0_keyfield_set[] = { }, }; +static const struct vcap_set lpm_keyfield_set[] = { + [VCAP_KFS_SGL_IP4] = { + .type_id = -1, + .sw_per_item = 1, + .sw_cnt = 12, + }, + [VCAP_KFS_DBL_IP4] = { + .type_id = 0, + .sw_per_item = 2, + .sw_cnt = 6, + }, + [VCAP_KFS_SGL_IP6] = { + .type_id = -1, + .sw_per_item = 3, + .sw_cnt = 4, + }, + [VCAP_KFS_DBL_IP6] = { + .type_id = -1, + .sw_per_item = 6, + .sw_cnt = 2, + }, +}; + static const struct vcap_set es2_keyfield_set[] = { [VCAP_KFS_MAC_ETYPE] = { .type_id = 0, @@ -2390,6 +2490,13 @@ static const struct vcap_field *es0_keyfield_set_map[] = { [VCAP_KFS_ISDX] = es0_isdx_keyfield, }; +static const struct vcap_field *lpm_keyfield_set_map[] = { + [VCAP_KFS_SGL_IP4] = lpm_sgl_ip4_keyfield, + [VCAP_KFS_DBL_IP4] = lpm_dbl_ip4_keyfield, + [VCAP_KFS_SGL_IP6] = lpm_sgl_ip6_keyfield, + [VCAP_KFS_DBL_IP6] = lpm_dbl_ip6_keyfield, +}; + static const struct vcap_field *es2_keyfield_set_map[] = { [VCAP_KFS_MAC_ETYPE] = es2_mac_etype_keyfield, [VCAP_KFS_ARP] = es2_arp_keyfield, @@ -2418,6 +2525,13 @@ static int es0_keyfield_set_map_size[] = { [VCAP_KFS_ISDX] = ARRAY_SIZE(es0_isdx_keyfield), }; +static int lpm_keyfield_set_map_size[] = { + [VCAP_KFS_SGL_IP4] = ARRAY_SIZE(lpm_sgl_ip4_keyfield), + [VCAP_KFS_DBL_IP4] = ARRAY_SIZE(lpm_dbl_ip4_keyfield), + [VCAP_KFS_SGL_IP6] = ARRAY_SIZE(lpm_sgl_ip6_keyfield), + [VCAP_KFS_DBL_IP6] = ARRAY_SIZE(lpm_dbl_ip6_keyfield), +}; + static int es2_keyfield_set_map_size[] = { [VCAP_KFS_MAC_ETYPE] = ARRAY_SIZE(es2_mac_etype_keyfield), [VCAP_KFS_ARP] = ARRAY_SIZE(es2_arp_keyfield), @@ -2993,6 +3107,92 @@ static const struct vcap_field es0_es0_actionfield[] = { }, }; +static const struct vcap_field lpm_arp_ptr_actionfield[] = { + [VCAP_AF_TYPE] = { + .type = VCAP_FIELD_U32, + .offset = 0, + .width = 2, + }, + [VCAP_AF_ARP_PTR] = { + .type = VCAP_FIELD_U32, + .offset = 2, + .width = 10, + }, + [VCAP_AF_ARP_PTR_REMAP_ENA] = { + .type = VCAP_FIELD_BIT, + .offset = 12, + .width = 1, + }, + [VCAP_AF_ECMP_CNT] = { + .type = VCAP_FIELD_U32, + .offset = 13, + .width = 4, + }, + [VCAP_AF_RGID] = { + .type = VCAP_FIELD_U32, + .offset = 17, + .width = 3, + }, +}; + +static const struct vcap_field lpm_arp_entry_actionfield[] = { + [VCAP_AF_TYPE] = { + .type = VCAP_FIELD_U32, + .offset = 0, + .width = 2, + }, + [VCAP_AF_MAC_MSB] = { + .type = VCAP_FIELD_U32, + .offset = 2, + .width = 16, + }, + [VCAP_AF_MAC_LSB] = { + .type = VCAP_FIELD_U32, + .offset = 18, + .width = 32, + }, + [VCAP_AF_ARP_VMID] = { + .type = VCAP_FIELD_U32, + .offset = 50, + .width = 7, + }, + [VCAP_AF_ZERO_DMAC_CPU_QU] = { + .type = VCAP_FIELD_U32, + .offset = 57, + .width = 3, + }, + [VCAP_AF_SIP_RPF_ENA] = { + .type = VCAP_FIELD_BIT, + .offset = 60, + .width = 1, + }, + [VCAP_AF_SECUR_MATCH_VMID_ENA] = { + .type = VCAP_FIELD_BIT, + .offset = 61, + .width = 1, + }, + [VCAP_AF_SECUR_MATCH_MAC_ENA] = { + .type = VCAP_FIELD_BIT, + .offset = 62, + .width = 1, + }, + [VCAP_AF_ARP_ENA] = { + .type = VCAP_FIELD_BIT, + .offset = 63, + .width = 1, + }, + [VCAP_AF_ENCAP_ID] = { + .type = VCAP_FIELD_U32, + .offset = 64, + .width = 8, + }, + [VCAP_AF_RSDX] = { + .type = VCAP_FIELD_U32, + .offset = 72, + .width = 10, + }, +}; + static const struct vcap_field es2_base_type_actionfield[] = { [VCAP_AF_HIT_ME_ONCE] = { .type = VCAP_FIELD_BIT, @@ -3101,6 +3301,19 @@ static const struct vcap_set es0_actionfield_set[] = { }, }; +static const struct vcap_set lpm_actionfield_set[] = { + [VCAP_AFS_ARP_PTR] = { + .type_id = 0, + .sw_per_item = 1, + .sw_cnt = 12, + }, + [VCAP_AFS_ARP_ENTRY] = { + .type_id = 2, + .sw_per_item = 1, + .sw_cnt = 12, + }, +}; + static const struct vcap_set es2_actionfield_set[] = { [VCAP_AFS_BASE_TYPE] = { .type_id = -1, @@ -3124,6 +3337,11 @@ static const struct vcap_field *es0_actionfield_set_map[] = { [VCAP_AFS_ES0] = es0_es0_actionfield, }; +static const struct vcap_field *lpm_actionfield_set_map[] = { + [VCAP_AFS_ARP_PTR] = lpm_arp_ptr_actionfield, + [VCAP_AFS_ARP_ENTRY] = lpm_arp_entry_actionfield, +}; + static const struct vcap_field *es2_actionfield_set_map[] = { [VCAP_AFS_BASE_TYPE] = es2_base_type_actionfield, }; @@ -3143,6 +3361,11 @@ static int es0_actionfield_set_map_size[] = { [VCAP_AFS_ES0] = ARRAY_SIZE(es0_es0_actionfield), }; +static int lpm_actionfield_set_map_size[] = { + [VCAP_AFS_ARP_PTR] = ARRAY_SIZE(lpm_arp_ptr_actionfield), + [VCAP_AFS_ARP_ENTRY] = ARRAY_SIZE(lpm_arp_entry_actionfield), +}; + static int es2_actionfield_set_map_size[] = { [VCAP_AFS_BASE_TYPE] = ARRAY_SIZE(es2_base_type_actionfield), }; @@ -3308,6 +3531,82 @@ static const struct vcap_typegroup es0_x1_keyfield_set_typegroups[] = { {} }; +static const struct vcap_typegroup lpm_x6_keyfield_set_typegroups[] = { + { + .offset = 0, + .width = 4, + .value = 8, + }, + { + .offset = 52, + .width = 1, + .value = 0, + }, + { + .offset = 104, + .width = 2, + .value = 0, + }, + { + .offset = 156, + .width = 3, + .value = 0, + }, + { + .offset = 208, + .width = 2, + .value = 0, + }, + { + .offset = 260, + .width = 1, + .value = 0, + }, + {} +}; + +static const struct vcap_typegroup lpm_x3_keyfield_set_typegroups[] = { + { + .offset = 0, + .width = 3, + .value = 4, + }, + { + .offset = 52, + .width = 2, + .value = 0, + }, + { + .offset = 104, + .width = 2, + .value = 0, + }, + {} +}; + +static const struct vcap_typegroup lpm_x2_keyfield_set_typegroups[] = { + { + .offset = 0, + .width = 2, + .value = 2, + }, + { + .offset = 52, + .width = 1, + .value = 0, + }, + {} +}; + +static const struct vcap_typegroup lpm_x1_keyfield_set_typegroups[] = { + { + .offset = 0, + .width = 1, + .value = 1, + }, + {} +}; + static const struct vcap_typegroup es2_x12_keyfield_set_typegroups[] = { { .offset = 0, @@ -3376,6 +3675,14 @@ static const struct vcap_typegroup *es0_keyfield_set_typegroups[] = { [2] = NULL, }; +static const struct vcap_typegroup *lpm_keyfield_set_typegroups[] = { + [6] = lpm_x6_keyfield_set_typegroups, + [3] = lpm_x3_keyfield_set_typegroups, + [2] = lpm_x2_keyfield_set_typegroups, + [1] = lpm_x1_keyfield_set_typegroups, + [13] = NULL, +}; + static const struct vcap_typegroup *es2_keyfield_set_typegroups[] = { [12] = es2_x12_keyfield_set_typegroups, [6] = es2_x6_keyfield_set_typegroups, @@ -3453,6 +3760,10 @@ static const struct vcap_typegroup es0_x1_actionfield_set_typegroups[] = { {} }; +static const struct vcap_typegroup lpm_x1_actionfield_set_typegroups[] = { + {} +}; + static const struct vcap_typegroup es2_x3_actionfield_set_typegroups[] = { { .offset = 0, @@ -3494,6 +3805,11 @@ static const struct vcap_typegroup *es0_actionfield_set_typegroups[] = { [2] = NULL, }; +static const struct vcap_typegroup *lpm_actionfield_set_typegroups[] = { + [1] = lpm_x1_actionfield_set_typegroups, + [13] = NULL, +}; + static const struct vcap_typegroup *es2_actionfield_set_typegroups[] = { [3] = es2_x3_actionfield_set_typegroups, [1] = es2_x1_actionfield_set_typegroups, @@ -3504,6 +3820,8 @@ static const struct vcap_typegroup *es2_actionfield_set_typegroups[] = { static const char * const vcap_keyfield_set_names[] = { [VCAP_KFS_NO_VALUE] = "(None)", [VCAP_KFS_ARP] = "VCAP_KFS_ARP", + [VCAP_KFS_DBL_IP4] = "VCAP_KFS_DBL_IP4", + [VCAP_KFS_DBL_IP6] = "VCAP_KFS_DBL_IP6", [VCAP_KFS_ETAG] = "VCAP_KFS_ETAG", [VCAP_KFS_IP4_OTHER] = "VCAP_KFS_IP4_OTHER", [VCAP_KFS_IP4_TCP_UDP] = "VCAP_KFS_IP4_TCP_UDP", @@ -3522,6 +3840,8 @@ static const char * const vcap_keyfield_set_names[] = { [VCAP_KFS_NORMAL_7TUPLE] = "VCAP_KFS_NORMAL_7TUPLE", [VCAP_KFS_OAM] = "VCAP_KFS_OAM", [VCAP_KFS_PURE_5TUPLE_IP4] = "VCAP_KFS_PURE_5TUPLE_IP4", + [VCAP_KFS_SGL_IP4] = "VCAP_KFS_SGL_IP4", + [VCAP_KFS_SGL_IP6] = "VCAP_KFS_SGL_IP6", [VCAP_KFS_SMAC_SIP4] = "VCAP_KFS_SMAC_SIP4", [VCAP_KFS_SMAC_SIP6] = "VCAP_KFS_SMAC_SIP6", }; @@ -3529,6 +3849,8 @@ static const char * const vcap_keyfield_set_names[] = { /* Actionfieldset names */ static const char * const vcap_actionfield_set_names[] = { [VCAP_AFS_NO_VALUE] = "(None)", + [VCAP_AFS_ARP_ENTRY] = "VCAP_AFS_ARP_ENTRY", + [VCAP_AFS_ARP_PTR] = "VCAP_AFS_ARP_PTR", [VCAP_AFS_BASE_TYPE] = "VCAP_AFS_BASE_TYPE", [VCAP_AFS_CLASSIFICATION] = "VCAP_AFS_CLASSIFICATION", [VCAP_AFS_CLASS_REDUCED] = "VCAP_AFS_CLASS_REDUCED", @@ -3565,6 +3887,7 @@ static const char * const vcap_keyfield_names[] = { [VCAP_KF_8021Q_VLAN_TAGGED_IS] = "8021Q_VLAN_TAGGED_IS", [VCAP_KF_8021Q_VLAN_TAGS] = "8021Q_VLAN_TAGS", [VCAP_KF_ACL_GRP_ID] = "ACL_GRP_ID", + [VCAP_KF_AFFIX] = "AFFIX", [VCAP_KF_ARP_ADDR_SPACE_OK_IS] = "ARP_ADDR_SPACE_OK_IS", [VCAP_KF_ARP_LEN_OK_IS] = "ARP_LEN_OK_IS", [VCAP_KF_ARP_OPCODE] = "ARP_OPCODE", @@ -3573,6 +3896,7 @@ static const char * const vcap_keyfield_names[] = { [VCAP_KF_ARP_SENDER_MATCH_IS] = "ARP_SENDER_MATCH_IS", [VCAP_KF_ARP_TGT_MATCH_IS] = "ARP_TGT_MATCH_IS", [VCAP_KF_COSID_CLS] = "COSID_CLS", + [VCAP_KF_DST_FLAG] = "DST_FLAG", [VCAP_KF_ES0_ISDX_KEY_ENA] = "ES0_ISDX_KEY_ENA", [VCAP_KF_ETYPE] = "ETYPE", [VCAP_KF_ETYPE_LEN_IS] = "ETYPE_LEN_IS", @@ -3586,7 +3910,13 @@ static const char * const vcap_keyfield_names[] = { [VCAP_KF_IF_IGR_PORT_MASK_RNG] = "IF_IGR_PORT_MASK_RNG", [VCAP_KF_IF_IGR_PORT_MASK_SEL] = "IF_IGR_PORT_MASK_SEL", [VCAP_KF_IF_IGR_PORT_SEL] = "IF_IGR_PORT_SEL", + [VCAP_KF_IP4_DIP] = "IP4_DIP", [VCAP_KF_IP4_IS] = "IP4_IS", + [VCAP_KF_IP4_SIP] = "IP4_SIP", + [VCAP_KF_IP4_XIP] = "IP4_XIP", + [VCAP_KF_IP6_DIP] = "IP6_DIP", + [VCAP_KF_IP6_SIP] = "IP6_SIP", + [VCAP_KF_IP6_XIP] = "IP6_XIP", [VCAP_KF_IP_MC_IS] = "IP_MC_IS", [VCAP_KF_IP_PAYLOAD_5TUPLE] = "IP_PAYLOAD_5TUPLE", [VCAP_KF_IP_SNAP_IS] = "IP_SNAP_IS", @@ -3659,6 +3989,10 @@ static const char * const vcap_keyfield_names[] = { static const char * const vcap_actionfield_names[] = { [VCAP_AF_NO_VALUE] = "(None)", [VCAP_AF_ACL_ID] = "ACL_ID", + [VCAP_AF_ARP_ENA] = "ARP_ENA", + [VCAP_AF_ARP_PTR] = "ARP_PTR", + [VCAP_AF_ARP_PTR_REMAP_ENA] = "ARP_PTR_REMAP_ENA", + [VCAP_AF_ARP_VMID] = "ARP_VMID", [VCAP_AF_CLS_VID_SEL] = "CLS_VID_SEL", [VCAP_AF_CNT_ID] = "CNT_ID", [VCAP_AF_COPY_PORT_NUM] = "COPY_PORT_NUM", @@ -3676,6 +4010,8 @@ static const char * const vcap_actionfield_names[] = { [VCAP_AF_DSCP_ENA] = "DSCP_ENA", [VCAP_AF_DSCP_SEL] = "DSCP_SEL", [VCAP_AF_DSCP_VAL] = "DSCP_VAL", + [VCAP_AF_ECMP_CNT] = "ECMP_CNT", + [VCAP_AF_ENCAP_ID] = "ENCAP_ID", [VCAP_AF_ES2_REW_CMD] = "ES2_REW_CMD", [VCAP_AF_ESDX] = "ESDX", [VCAP_AF_FWD_KILL_ENA] = "FWD_KILL_ENA", @@ -3690,6 +4026,8 @@ static const char * const vcap_actionfield_names[] = { [VCAP_AF_ISDX_VAL] = "ISDX_VAL", [VCAP_AF_LOOP_ENA] = "LOOP_ENA", [VCAP_AF_LRN_DIS] = "LRN_DIS", + [VCAP_AF_MAC_LSB] = "MAC_LSB", + [VCAP_AF_MAC_MSB] = "MAC_MSB", [VCAP_AF_MAP_IDX] = "MAP_IDX", [VCAP_AF_MAP_KEY] = "MAP_KEY", [VCAP_AF_MAP_LOOKUP_SEL] = "MAP_LOOKUP_SEL", @@ -3723,7 +4061,12 @@ static const char * const vcap_actionfield_names[] = { [VCAP_AF_QOS_ENA] = "QOS_ENA", [VCAP_AF_QOS_VAL] = "QOS_VAL", [VCAP_AF_REW_OP] = "REW_OP", + [VCAP_AF_RGID] = "RGID", + [VCAP_AF_RSDX] = "RSDX", [VCAP_AF_RT_DIS] = "RT_DIS", + [VCAP_AF_SECUR_MATCH_MAC_ENA] = "SECUR_MATCH_MAC_ENA", + [VCAP_AF_SECUR_MATCH_VMID_ENA] = "SECUR_MATCH_VMID_ENA", + [VCAP_AF_SIP_RPF_ENA] = "SIP_RPF_ENA", [VCAP_AF_SWAP_MACS_ENA] = "SWAP_MACS_ENA", [VCAP_AF_TAG_A_DEI_SEL] = "TAG_A_DEI_SEL", [VCAP_AF_TAG_A_PCP_SEL] = "TAG_A_PCP_SEL", @@ -3743,6 +4086,7 @@ static const char * const vcap_actionfield_names[] = { [VCAP_AF_VID_B_VAL] = "VID_B_VAL", [VCAP_AF_VID_C_VAL] = "VID_C_VAL", [VCAP_AF_VID_VAL] = "VID_VAL", + [VCAP_AF_ZERO_DMAC_CPU_QU] = "ZERO_DMAC_CPU_QU", }; /* VCAPs */ @@ -3810,6 +4154,27 @@ const struct vcap_info lan969x_vcaps[] = { .keyfield_set_typegroups = es0_keyfield_set_typegroups, .actionfield_set_typegroups = es0_actionfield_set_typegroups, }, + [VCAP_TYPE_LPM] = { + .name = "lpm", + .rows = 512, + .sw_count = 12, + .sw_width = 52, + .sticky_width = 1, + .act_width = 83, + .default_cnt = 0, + .require_cnt_dis = 0, + .version = 1, + .keyfield_set = lpm_keyfield_set, + .keyfield_set_size = ARRAY_SIZE(lpm_keyfield_set), + .actionfield_set = lpm_actionfield_set, + .actionfield_set_size = ARRAY_SIZE(lpm_actionfield_set), + .keyfield_set_map = lpm_keyfield_set_map, + .keyfield_set_map_size = lpm_keyfield_set_map_size, + .actionfield_set_map = lpm_actionfield_set_map, + .actionfield_set_map_size = lpm_actionfield_set_map_size, + .keyfield_set_typegroups = lpm_keyfield_set_typegroups, + .actionfield_set_typegroups = lpm_actionfield_set_typegroups, + }, [VCAP_TYPE_ES2] = { .name = "es2", .rows = 256, @@ -3835,7 +4200,7 @@ const struct vcap_info lan969x_vcaps[] = { const struct vcap_statistics lan969x_vcap_stats = { .name = "lan969x", - .count = 4, + .count = 5, .keyfield_set_names = vcap_keyfield_set_names, .actionfield_set_names = vcap_actionfield_set_names, .keyfield_names = vcap_keyfield_names, diff --git a/drivers/net/ethernet/microchip/sparx5/sparx5_vcap_ag_api.c b/drivers/net/ethernet/microchip/sparx5/sparx5_vcap_ag_api.c index 556d6ea0acd1..7bc8b29757b1 100644 --- a/drivers/net/ethernet/microchip/sparx5/sparx5_vcap_ag_api.c +++ b/drivers/net/ethernet/microchip/sparx5/sparx5_vcap_ag_api.c @@ -1,10 +1,10 @@ // SPDX-License-Identifier: BSD-3-Clause -/* Copyright (C) 2023 Microchip Technology Inc. and its subsidiaries. +/* Copyright (C) 2026 Microchip Technology Inc. and its subsidiaries. * Microchip VCAP API */ -/* This file is autogenerated by cml-utils 2023-02-10 11:15:56 +0100. - * Commit ID: c30fb4bf0281cd4a7133bdab6682f9e43c872ada +/* This file is autogenerated by cml-utils 2026-04-28 13:55:50 +0200. + * Commit ID: cd2494df16a1d3b14f650f720f6a8126b88b553a */ #include @@ -1381,6 +1381,83 @@ static const struct vcap_field es0_isdx_keyfield[] = { }, }; +static const struct vcap_field lpm_sgl_ip4_keyfield[] = { + [VCAP_KF_DST_FLAG] = { + .type = VCAP_FIELD_BIT, + .offset = 0, + .width = 1, + }, + [VCAP_KF_AFFIX] = { + .type = VCAP_FIELD_U32, + .offset = 1, + .width = 10, + }, + [VCAP_KF_IP4_XIP] = { + .type = VCAP_FIELD_U32, + .offset = 11, + .width = 32, + }, +}; + +static const struct vcap_field lpm_dbl_ip4_keyfield[] = { + [VCAP_KF_TYPE] = { + .type = VCAP_FIELD_BIT, + .offset = 0, + .width = 1, + }, + [VCAP_KF_AFFIX] = { + .type = VCAP_FIELD_U32, + .offset = 1, + .width = 10, + }, + [VCAP_KF_IP4_SIP] = { + .type = VCAP_FIELD_U32, + .offset = 11, + .width = 32, + }, + [VCAP_KF_IP4_DIP] = { + .type = VCAP_FIELD_U32, + .offset = 43, + .width = 32, + }, +}; + +static const struct vcap_field lpm_sgl_ip6_keyfield[] = { + [VCAP_KF_DST_FLAG] = { + .type = VCAP_FIELD_BIT, + .offset = 0, + .width = 1, + }, + [VCAP_KF_AFFIX] = { + .type = VCAP_FIELD_U32, + .offset = 1, + .width = 10, + }, + [VCAP_KF_IP6_XIP] = { + .type = VCAP_FIELD_U128, + .offset = 11, + .width = 128, + }, +}; + +static const struct vcap_field lpm_dbl_ip6_keyfield[] = { + [VCAP_KF_AFFIX] = { + .type = VCAP_FIELD_U32, + .offset = 0, + .width = 10, + }, + [VCAP_KF_IP6_SIP] = { + .type = VCAP_FIELD_U128, + .offset = 10, + .width = 128, + }, + [VCAP_KF_IP6_DIP] = { + .type = VCAP_FIELD_U128, + .offset = 138, + .width = 128, + }, +}; + static const struct vcap_field es2_mac_etype_keyfield[] = { [VCAP_KF_TYPE] = { .type = VCAP_FIELD_U32, @@ -2339,6 +2416,29 @@ static const struct vcap_set es0_keyfield_set[] = { }, }; +static const struct vcap_set lpm_keyfield_set[] = { + [VCAP_KFS_SGL_IP4] = { + .type_id = -1, + .sw_per_item = 1, + .sw_cnt = 12, + }, + [VCAP_KFS_DBL_IP4] = { + .type_id = 0, + .sw_per_item = 2, + .sw_cnt = 6, + }, + [VCAP_KFS_SGL_IP6] = { + .type_id = -1, + .sw_per_item = 3, + .sw_cnt = 4, + }, + [VCAP_KFS_DBL_IP6] = { + .type_id = -1, + .sw_per_item = 6, + .sw_cnt = 2, + }, +}; + static const struct vcap_set es2_keyfield_set[] = { [VCAP_KFS_MAC_ETYPE] = { .type_id = 0, @@ -2391,6 +2491,13 @@ static const struct vcap_field *es0_keyfield_set_map[] = { [VCAP_KFS_ISDX] = es0_isdx_keyfield, }; +static const struct vcap_field *lpm_keyfield_set_map[] = { + [VCAP_KFS_SGL_IP4] = lpm_sgl_ip4_keyfield, + [VCAP_KFS_DBL_IP4] = lpm_dbl_ip4_keyfield, + [VCAP_KFS_SGL_IP6] = lpm_sgl_ip6_keyfield, + [VCAP_KFS_DBL_IP6] = lpm_dbl_ip6_keyfield, +}; + static const struct vcap_field *es2_keyfield_set_map[] = { [VCAP_KFS_MAC_ETYPE] = es2_mac_etype_keyfield, [VCAP_KFS_ARP] = es2_arp_keyfield, @@ -2419,6 +2526,13 @@ static int es0_keyfield_set_map_size[] = { [VCAP_KFS_ISDX] = ARRAY_SIZE(es0_isdx_keyfield), }; +static int lpm_keyfield_set_map_size[] = { + [VCAP_KFS_SGL_IP4] = ARRAY_SIZE(lpm_sgl_ip4_keyfield), + [VCAP_KFS_DBL_IP4] = ARRAY_SIZE(lpm_dbl_ip4_keyfield), + [VCAP_KFS_SGL_IP6] = ARRAY_SIZE(lpm_sgl_ip6_keyfield), + [VCAP_KFS_DBL_IP6] = ARRAY_SIZE(lpm_dbl_ip6_keyfield), +}; + static int es2_keyfield_set_map_size[] = { [VCAP_KFS_MAC_ETYPE] = ARRAY_SIZE(es2_mac_etype_keyfield), [VCAP_KFS_ARP] = ARRAY_SIZE(es2_arp_keyfield), @@ -2994,6 +3108,92 @@ static const struct vcap_field es0_es0_actionfield[] = { }, }; +static const struct vcap_field lpm_arp_ptr_actionfield[] = { + [VCAP_AF_TYPE] = { + .type = VCAP_FIELD_U32, + .offset = 0, + .width = 2, + }, + [VCAP_AF_ARP_PTR] = { + .type = VCAP_FIELD_U32, + .offset = 2, + .width = 11, + }, + [VCAP_AF_ARP_PTR_REMAP_ENA] = { + .type = VCAP_FIELD_BIT, + .offset = 13, + .width = 1, + }, + [VCAP_AF_ECMP_CNT] = { + .type = VCAP_FIELD_U32, + .offset = 14, + .width = 4, + }, + [VCAP_AF_RGID] = { + .type = VCAP_FIELD_U32, + .offset = 18, + .width = 3, + }, +}; + +static const struct vcap_field lpm_arp_entry_actionfield[] = { + [VCAP_AF_TYPE] = { + .type = VCAP_FIELD_U32, + .offset = 0, + .width = 2, + }, + [VCAP_AF_MAC_MSB] = { + .type = VCAP_FIELD_U32, + .offset = 2, + .width = 16, + }, + [VCAP_AF_MAC_LSB] = { + .type = VCAP_FIELD_U32, + .offset = 18, + .width = 32, + }, + [VCAP_AF_ARP_VMID] = { + .type = VCAP_FIELD_U32, + .offset = 50, + .width = 9, + }, + [VCAP_AF_ZERO_DMAC_CPU_QU] = { + .type = VCAP_FIELD_U32, + .offset = 59, + .width = 3, + }, + [VCAP_AF_SIP_RPF_ENA] = { + .type = VCAP_FIELD_BIT, + .offset = 62, + .width = 1, + }, + [VCAP_AF_SECUR_MATCH_VMID_ENA] = { + .type = VCAP_FIELD_BIT, + .offset = 63, + .width = 1, + }, + [VCAP_AF_SECUR_MATCH_MAC_ENA] = { + .type = VCAP_FIELD_BIT, + .offset = 64, + .width = 1, + }, + [VCAP_AF_ARP_ENA] = { + .type = VCAP_FIELD_BIT, + .offset = 65, + .width = 1, + }, + [VCAP_AF_ENCAP_ID] = { + .type = VCAP_FIELD_U32, + .offset = 66, + .width = 10, + }, + [VCAP_AF_RSDX] = { + .type = VCAP_FIELD_U32, + .offset = 76, + .width = 12, + }, +}; + static const struct vcap_field es2_base_type_actionfield[] = { [VCAP_AF_HIT_ME_ONCE] = { .type = VCAP_FIELD_BIT, @@ -3102,6 +3302,19 @@ static const struct vcap_set es0_actionfield_set[] = { }, }; +static const struct vcap_set lpm_actionfield_set[] = { + [VCAP_AFS_ARP_PTR] = { + .type_id = 0, + .sw_per_item = 1, + .sw_cnt = 12, + }, + [VCAP_AFS_ARP_ENTRY] = { + .type_id = 2, + .sw_per_item = 1, + .sw_cnt = 12, + }, +}; + static const struct vcap_set es2_actionfield_set[] = { [VCAP_AFS_BASE_TYPE] = { .type_id = -1, @@ -3125,6 +3338,11 @@ static const struct vcap_field *es0_actionfield_set_map[] = { [VCAP_AFS_ES0] = es0_es0_actionfield, }; +static const struct vcap_field *lpm_actionfield_set_map[] = { + [VCAP_AFS_ARP_PTR] = lpm_arp_ptr_actionfield, + [VCAP_AFS_ARP_ENTRY] = lpm_arp_entry_actionfield, +}; + static const struct vcap_field *es2_actionfield_set_map[] = { [VCAP_AFS_BASE_TYPE] = es2_base_type_actionfield, }; @@ -3144,6 +3362,11 @@ static int es0_actionfield_set_map_size[] = { [VCAP_AFS_ES0] = ARRAY_SIZE(es0_es0_actionfield), }; +static int lpm_actionfield_set_map_size[] = { + [VCAP_AFS_ARP_PTR] = ARRAY_SIZE(lpm_arp_ptr_actionfield), + [VCAP_AFS_ARP_ENTRY] = ARRAY_SIZE(lpm_arp_entry_actionfield), +}; + static int es2_actionfield_set_map_size[] = { [VCAP_AFS_BASE_TYPE] = ARRAY_SIZE(es2_base_type_actionfield), }; @@ -3334,6 +3557,82 @@ static const struct vcap_typegroup es0_x1_keyfield_set_typegroups[] = { {} }; +static const struct vcap_typegroup lpm_x6_keyfield_set_typegroups[] = { + { + .offset = 0, + .width = 4, + .value = 8, + }, + { + .offset = 52, + .width = 1, + .value = 0, + }, + { + .offset = 104, + .width = 2, + .value = 0, + }, + { + .offset = 156, + .width = 3, + .value = 0, + }, + { + .offset = 208, + .width = 2, + .value = 0, + }, + { + .offset = 260, + .width = 1, + .value = 0, + }, + {} +}; + +static const struct vcap_typegroup lpm_x3_keyfield_set_typegroups[] = { + { + .offset = 0, + .width = 3, + .value = 4, + }, + { + .offset = 52, + .width = 2, + .value = 0, + }, + { + .offset = 104, + .width = 2, + .value = 0, + }, + {} +}; + +static const struct vcap_typegroup lpm_x2_keyfield_set_typegroups[] = { + { + .offset = 0, + .width = 2, + .value = 2, + }, + { + .offset = 52, + .width = 1, + .value = 0, + }, + {} +}; + +static const struct vcap_typegroup lpm_x1_keyfield_set_typegroups[] = { + { + .offset = 0, + .width = 1, + .value = 1, + }, + {} +}; + static const struct vcap_typegroup es2_x12_keyfield_set_typegroups[] = { { .offset = 0, @@ -3407,6 +3706,14 @@ static const struct vcap_typegroup *es0_keyfield_set_typegroups[] = { [2] = NULL, }; +static const struct vcap_typegroup *lpm_keyfield_set_typegroups[] = { + [6] = lpm_x6_keyfield_set_typegroups, + [3] = lpm_x3_keyfield_set_typegroups, + [2] = lpm_x2_keyfield_set_typegroups, + [1] = lpm_x1_keyfield_set_typegroups, + [13] = NULL, +}; + static const struct vcap_typegroup *es2_keyfield_set_typegroups[] = { [12] = es2_x12_keyfield_set_typegroups, [6] = es2_x6_keyfield_set_typegroups, @@ -3484,6 +3791,10 @@ static const struct vcap_typegroup es0_x1_actionfield_set_typegroups[] = { {} }; +static const struct vcap_typegroup lpm_x1_actionfield_set_typegroups[] = { + {} +}; + static const struct vcap_typegroup es2_x3_actionfield_set_typegroups[] = { { .offset = 0, @@ -3525,6 +3836,11 @@ static const struct vcap_typegroup *es0_actionfield_set_typegroups[] = { [2] = NULL, }; +static const struct vcap_typegroup *lpm_actionfield_set_typegroups[] = { + [1] = lpm_x1_actionfield_set_typegroups, + [13] = NULL, +}; + static const struct vcap_typegroup *es2_actionfield_set_typegroups[] = { [3] = es2_x3_actionfield_set_typegroups, [1] = es2_x1_actionfield_set_typegroups, @@ -3535,6 +3851,8 @@ static const struct vcap_typegroup *es2_actionfield_set_typegroups[] = { static const char * const vcap_keyfield_set_names[] = { [VCAP_KFS_NO_VALUE] = "(None)", [VCAP_KFS_ARP] = "VCAP_KFS_ARP", + [VCAP_KFS_DBL_IP4] = "VCAP_KFS_DBL_IP4", + [VCAP_KFS_DBL_IP6] = "VCAP_KFS_DBL_IP6", [VCAP_KFS_ETAG] = "VCAP_KFS_ETAG", [VCAP_KFS_IP4_OTHER] = "VCAP_KFS_IP4_OTHER", [VCAP_KFS_IP4_TCP_UDP] = "VCAP_KFS_IP4_TCP_UDP", @@ -3553,6 +3871,8 @@ static const char * const vcap_keyfield_set_names[] = { [VCAP_KFS_NORMAL_7TUPLE] = "VCAP_KFS_NORMAL_7TUPLE", [VCAP_KFS_OAM] = "VCAP_KFS_OAM", [VCAP_KFS_PURE_5TUPLE_IP4] = "VCAP_KFS_PURE_5TUPLE_IP4", + [VCAP_KFS_SGL_IP4] = "VCAP_KFS_SGL_IP4", + [VCAP_KFS_SGL_IP6] = "VCAP_KFS_SGL_IP6", [VCAP_KFS_SMAC_SIP4] = "VCAP_KFS_SMAC_SIP4", [VCAP_KFS_SMAC_SIP6] = "VCAP_KFS_SMAC_SIP6", }; @@ -3560,6 +3880,8 @@ static const char * const vcap_keyfield_set_names[] = { /* Actionfieldset names */ static const char * const vcap_actionfield_set_names[] = { [VCAP_AFS_NO_VALUE] = "(None)", + [VCAP_AFS_ARP_ENTRY] = "VCAP_AFS_ARP_ENTRY", + [VCAP_AFS_ARP_PTR] = "VCAP_AFS_ARP_PTR", [VCAP_AFS_BASE_TYPE] = "VCAP_AFS_BASE_TYPE", [VCAP_AFS_CLASSIFICATION] = "VCAP_AFS_CLASSIFICATION", [VCAP_AFS_CLASS_REDUCED] = "VCAP_AFS_CLASS_REDUCED", @@ -3596,6 +3918,7 @@ static const char * const vcap_keyfield_names[] = { [VCAP_KF_8021Q_VLAN_TAGGED_IS] = "8021Q_VLAN_TAGGED_IS", [VCAP_KF_8021Q_VLAN_TAGS] = "8021Q_VLAN_TAGS", [VCAP_KF_ACL_GRP_ID] = "ACL_GRP_ID", + [VCAP_KF_AFFIX] = "AFFIX", [VCAP_KF_ARP_ADDR_SPACE_OK_IS] = "ARP_ADDR_SPACE_OK_IS", [VCAP_KF_ARP_LEN_OK_IS] = "ARP_LEN_OK_IS", [VCAP_KF_ARP_OPCODE] = "ARP_OPCODE", @@ -3604,6 +3927,7 @@ static const char * const vcap_keyfield_names[] = { [VCAP_KF_ARP_SENDER_MATCH_IS] = "ARP_SENDER_MATCH_IS", [VCAP_KF_ARP_TGT_MATCH_IS] = "ARP_TGT_MATCH_IS", [VCAP_KF_COSID_CLS] = "COSID_CLS", + [VCAP_KF_DST_FLAG] = "DST_FLAG", [VCAP_KF_ES0_ISDX_KEY_ENA] = "ES0_ISDX_KEY_ENA", [VCAP_KF_ETYPE] = "ETYPE", [VCAP_KF_ETYPE_LEN_IS] = "ETYPE_LEN_IS", @@ -3617,7 +3941,13 @@ static const char * const vcap_keyfield_names[] = { [VCAP_KF_IF_IGR_PORT_MASK_RNG] = "IF_IGR_PORT_MASK_RNG", [VCAP_KF_IF_IGR_PORT_MASK_SEL] = "IF_IGR_PORT_MASK_SEL", [VCAP_KF_IF_IGR_PORT_SEL] = "IF_IGR_PORT_SEL", + [VCAP_KF_IP4_DIP] = "IP4_DIP", [VCAP_KF_IP4_IS] = "IP4_IS", + [VCAP_KF_IP4_SIP] = "IP4_SIP", + [VCAP_KF_IP4_XIP] = "IP4_XIP", + [VCAP_KF_IP6_DIP] = "IP6_DIP", + [VCAP_KF_IP6_SIP] = "IP6_SIP", + [VCAP_KF_IP6_XIP] = "IP6_XIP", [VCAP_KF_IP_MC_IS] = "IP_MC_IS", [VCAP_KF_IP_PAYLOAD_5TUPLE] = "IP_PAYLOAD_5TUPLE", [VCAP_KF_IP_SNAP_IS] = "IP_SNAP_IS", @@ -3690,6 +4020,10 @@ static const char * const vcap_keyfield_names[] = { static const char * const vcap_actionfield_names[] = { [VCAP_AF_NO_VALUE] = "(None)", [VCAP_AF_ACL_ID] = "ACL_ID", + [VCAP_AF_ARP_ENA] = "ARP_ENA", + [VCAP_AF_ARP_PTR] = "ARP_PTR", + [VCAP_AF_ARP_PTR_REMAP_ENA] = "ARP_PTR_REMAP_ENA", + [VCAP_AF_ARP_VMID] = "ARP_VMID", [VCAP_AF_CLS_VID_SEL] = "CLS_VID_SEL", [VCAP_AF_CNT_ID] = "CNT_ID", [VCAP_AF_COPY_PORT_NUM] = "COPY_PORT_NUM", @@ -3707,6 +4041,8 @@ static const char * const vcap_actionfield_names[] = { [VCAP_AF_DSCP_ENA] = "DSCP_ENA", [VCAP_AF_DSCP_SEL] = "DSCP_SEL", [VCAP_AF_DSCP_VAL] = "DSCP_VAL", + [VCAP_AF_ECMP_CNT] = "ECMP_CNT", + [VCAP_AF_ENCAP_ID] = "ENCAP_ID", [VCAP_AF_ES2_REW_CMD] = "ES2_REW_CMD", [VCAP_AF_ESDX] = "ESDX", [VCAP_AF_FWD_KILL_ENA] = "FWD_KILL_ENA", @@ -3721,6 +4057,8 @@ static const char * const vcap_actionfield_names[] = { [VCAP_AF_ISDX_VAL] = "ISDX_VAL", [VCAP_AF_LOOP_ENA] = "LOOP_ENA", [VCAP_AF_LRN_DIS] = "LRN_DIS", + [VCAP_AF_MAC_LSB] = "MAC_LSB", + [VCAP_AF_MAC_MSB] = "MAC_MSB", [VCAP_AF_MAP_IDX] = "MAP_IDX", [VCAP_AF_MAP_KEY] = "MAP_KEY", [VCAP_AF_MAP_LOOKUP_SEL] = "MAP_LOOKUP_SEL", @@ -3754,7 +4092,12 @@ static const char * const vcap_actionfield_names[] = { [VCAP_AF_QOS_ENA] = "QOS_ENA", [VCAP_AF_QOS_VAL] = "QOS_VAL", [VCAP_AF_REW_OP] = "REW_OP", + [VCAP_AF_RGID] = "RGID", + [VCAP_AF_RSDX] = "RSDX", [VCAP_AF_RT_DIS] = "RT_DIS", + [VCAP_AF_SECUR_MATCH_MAC_ENA] = "SECUR_MATCH_MAC_ENA", + [VCAP_AF_SECUR_MATCH_VMID_ENA] = "SECUR_MATCH_VMID_ENA", + [VCAP_AF_SIP_RPF_ENA] = "SIP_RPF_ENA", [VCAP_AF_SWAP_MACS_ENA] = "SWAP_MACS_ENA", [VCAP_AF_TAG_A_DEI_SEL] = "TAG_A_DEI_SEL", [VCAP_AF_TAG_A_PCP_SEL] = "TAG_A_PCP_SEL", @@ -3774,6 +4117,7 @@ static const char * const vcap_actionfield_names[] = { [VCAP_AF_VID_B_VAL] = "VID_B_VAL", [VCAP_AF_VID_C_VAL] = "VID_C_VAL", [VCAP_AF_VID_VAL] = "VID_VAL", + [VCAP_AF_ZERO_DMAC_CPU_QU] = "ZERO_DMAC_CPU_QU", }; /* VCAPs */ @@ -3841,6 +4185,27 @@ const struct vcap_info sparx5_vcaps[] = { .keyfield_set_typegroups = es0_keyfield_set_typegroups, .actionfield_set_typegroups = es0_actionfield_set_typegroups, }, + [VCAP_TYPE_LPM] = { + .name = "lpm", + .rows = 512, + .sw_count = 12, + .sw_width = 52, + .sticky_width = 1, + .act_width = 89, + .default_cnt = 0, + .require_cnt_dis = 0, + .version = 1, + .keyfield_set = lpm_keyfield_set, + .keyfield_set_size = ARRAY_SIZE(lpm_keyfield_set), + .actionfield_set = lpm_actionfield_set, + .actionfield_set_size = ARRAY_SIZE(lpm_actionfield_set), + .keyfield_set_map = lpm_keyfield_set_map, + .keyfield_set_map_size = lpm_keyfield_set_map_size, + .actionfield_set_map = lpm_actionfield_set_map, + .actionfield_set_map_size = lpm_actionfield_set_map_size, + .keyfield_set_typegroups = lpm_keyfield_set_typegroups, + .actionfield_set_typegroups = lpm_actionfield_set_typegroups, + }, [VCAP_TYPE_ES2] = { .name = "es2", .rows = 1024, @@ -3866,7 +4231,7 @@ const struct vcap_info sparx5_vcaps[] = { const struct vcap_statistics sparx5_vcap_stats = { .name = "sparx5", - .count = 4, + .count = 5, .keyfield_set_names = vcap_keyfield_set_names, .actionfield_set_names = vcap_actionfield_set_names, .keyfield_names = vcap_keyfield_names, diff --git a/drivers/net/ethernet/microchip/sparx5/sparx5_vcap_ag_api.h b/drivers/net/ethernet/microchip/sparx5/sparx5_vcap_ag_api.h index e68f5639a40a..22bb416f433d 100644 --- a/drivers/net/ethernet/microchip/sparx5/sparx5_vcap_ag_api.h +++ b/drivers/net/ethernet/microchip/sparx5/sparx5_vcap_ag_api.h @@ -1,10 +1,10 @@ /* SPDX-License-Identifier: BSD-3-Clause */ -/* Copyright (C) 2022 Microchip Technology Inc. and its subsidiaries. +/* Copyright (C) 2026 Microchip Technology Inc. and its subsidiaries. * Microchip VCAP API */ -/* This file is autogenerated by cml-utils 2022-10-13 10:04:41 +0200. - * Commit ID: fd7cafd175899f0672c73afb3a30fc872500ae86 +/* This file is autogenerated by cml-utils 2026-04-28 13:55:50 +0200. + * Commit ID: cd2494df16a1d3b14f650f720f6a8126b88b553a */ #ifndef __SPARX5_VCAP_AG_API_H__ diff --git a/drivers/net/ethernet/microchip/vcap/vcap_ag_api.h b/drivers/net/ethernet/microchip/vcap/vcap_ag_api.h index 4735fad05708..487d56440936 100644 --- a/drivers/net/ethernet/microchip/vcap/vcap_ag_api.h +++ b/drivers/net/ethernet/microchip/vcap/vcap_ag_api.h @@ -1,10 +1,10 @@ /* SPDX-License-Identifier: BSD-3-Clause */ -/* Copyright (C) 2023 Microchip Technology Inc. and its subsidiaries. +/* Copyright (C) 2026 Microchip Technology Inc. and its subsidiaries. * Microchip VCAP API */ -/* This file is autogenerated by cml-utils 2023-03-13 10:16:42 +0100. - * Commit ID: 259f0efd6d6d91bfbf62858de153cc757b6bffa3 (dirty) +/* This file is autogenerated by cml-utils 2026-04-28 13:55:50 +0200. + * Commit ID: cd2494df16a1d3b14f650f720f6a8126b88b553a */ #ifndef __VCAP_AG_API__ @@ -16,6 +16,7 @@ enum vcap_type { VCAP_TYPE_IS0, VCAP_TYPE_IS1, VCAP_TYPE_IS2, + VCAP_TYPE_LPM, VCAP_TYPE_MAX }; @@ -26,6 +27,8 @@ enum vcap_keyfield_set { VCAP_KFS_5TUPLE_IP6, /* lan966x is1 X4 */ VCAP_KFS_7TUPLE, /* lan966x is1 X4 */ VCAP_KFS_ARP, /* sparx5 is2 X6, sparx5 es2 X6, lan966x is2 X2 */ + VCAP_KFS_DBL_IP4, /* sparx5 lpm X2 */ + VCAP_KFS_DBL_IP6, /* sparx5 lpm X6 */ VCAP_KFS_DBL_VID, /* lan966x is1 X1 */ VCAP_KFS_DMAC_VID, /* lan966x is1 X1 */ VCAP_KFS_ETAG, /* sparx5 is0 X2 */ @@ -49,6 +52,8 @@ enum vcap_keyfield_set { VCAP_KFS_OAM, /* lan966x is2 X2 */ VCAP_KFS_PURE_5TUPLE_IP4, /* sparx5 is0 X3 */ VCAP_KFS_RT, /* lan966x is1 X1 */ + VCAP_KFS_SGL_IP4, /* sparx5 lpm X1 */ + VCAP_KFS_SGL_IP6, /* sparx5 lpm X3 */ VCAP_KFS_SMAC_SIP4, /* lan966x is2 X1 */ VCAP_KFS_SMAC_SIP6, /* lan966x is2 X2 */ VCAP_KFS_VID, /* lan966x es0 X1 */ @@ -117,6 +122,10 @@ enum vcap_keyfield_set { * tagged, 7: Triple tagged * VCAP_KF_ACL_GRP_ID: W8, sparx5: es2 * Used in interface map table + * VCAP_KF_AFFIX: W10, sparx5: lpm + * LPM affix. Defaults to 0. Using the LPM affix, the VCAP LPM can be split into + * multiple logically separate routing tables, e.g. to support features such as + * VRF-lite. * VCAP_KF_ARP_ADDR_SPACE_OK_IS: W1, sparx5: is2/es2, lan966x: is2 * Set if hardware address is Ethernet * VCAP_KF_ARP_LEN_OK_IS: W1, sparx5: is2/es2, lan966x: is2 @@ -133,6 +142,9 @@ enum vcap_keyfield_set { * Target Hardware Address = SMAC (RARP) * VCAP_KF_COSID_CLS: W3, sparx5: es0/es2 * Class of service + * VCAP_KF_DST_FLAG: W1, sparx5: lpm + * 0: IP4_XIP/IP6_XIP is only to be used for SIP matching, 1: IP4_XIP/IP6_XIP is + * only to be used for DIP matching * VCAP_KF_ES0_ISDX_KEY_ENA: W1, sparx5: es2 * The value taken from the IFH .FWD.ES0_ISDX_KEY_ENA * VCAP_KF_ETYPE: W16, sparx5: is0/is2/es2, lan966x: is1/is2 @@ -167,8 +179,22 @@ enum vcap_keyfield_set { * Mapping: 0: DEFAULT 1: LOOPBACK 2: MASQUERADE 3: CPU_VD * VCAP_KF_IF_IGR_PORT_SEL: W1, sparx5: es2 * Selector for IF_IGR_PORT: physical port number or ERLEG + * VCAP_KF_IP4_DIP: W32, sparx5: lpm + * IPv4 destination address. Used for IPv4 MC routing. * VCAP_KF_IP4_IS: W1, sparx5: is0/is2/es2, lan966x: is1/is2 * Set if frame has EtherType = 0x800 and IP version = 4 + * VCAP_KF_IP4_SIP: W32, sparx5: lpm + * IPv4 source address. Used for IPv4 MC routing. + * VCAP_KF_IP4_XIP: W32, sparx5: lpm + * IPv4 address. Used for IPv4 UC routing as well as IPv4 Source/Destination + * Guard. + * VCAP_KF_IP6_DIP: W128, sparx5: lpm + * IPv6 destination address. Used for IPv6 MC routing. + * VCAP_KF_IP6_SIP: W128, sparx5: lpm + * IPv6 source address. Used for IPv6 MC routing. + * VCAP_KF_IP6_XIP: W128, sparx5: lpm + * IPv6 address. Used for IPv6 UC routing as well as IPv6 Source/Destination + * Guard. * VCAP_KF_IP_MC_IS: W1, sparx5: is0, lan966x: is1 * Set if frame is IPv4 frame and frame's destination MAC address is an IPv4 * multicast address (0x01005E0 /25). Set if frame is IPv6 frame and frame's @@ -352,8 +378,8 @@ enum vcap_keyfield_set { * Set if frame is IPv4/IPv6 TCP or UDP frame (IP protocol/next header equals 6 * or 17) * VCAP_KF_TYPE: sparx5 is0 W2, sparx5 is0 W1, sparx5 is2 W4, sparx5 is2 W2, - * sparx5 es0 W1, sparx5 es2 W3, lan966x is1 W1, lan966x is1 W2, lan966x is2 W4, - * lan966x is2 W2 + * sparx5 es0 W1, sparx5 lpm W1, sparx5 es2 W3, lan966x is1 W1, lan966x is1 W2, + * lan966x is2 W4, lan966x is2 W2 * Keyset type id - set by the API */ @@ -387,6 +413,7 @@ enum vcap_key_field { VCAP_KF_8021Q_VLAN_TAGGED_IS, VCAP_KF_8021Q_VLAN_TAGS, VCAP_KF_ACL_GRP_ID, + VCAP_KF_AFFIX, VCAP_KF_ARP_ADDR_SPACE_OK_IS, VCAP_KF_ARP_LEN_OK_IS, VCAP_KF_ARP_OPCODE, @@ -395,6 +422,7 @@ enum vcap_key_field { VCAP_KF_ARP_SENDER_MATCH_IS, VCAP_KF_ARP_TGT_MATCH_IS, VCAP_KF_COSID_CLS, + VCAP_KF_DST_FLAG, VCAP_KF_ES0_ISDX_KEY_ENA, VCAP_KF_ETYPE, VCAP_KF_ETYPE_LEN_IS, @@ -408,7 +436,13 @@ enum vcap_key_field { VCAP_KF_IF_IGR_PORT_MASK_RNG, VCAP_KF_IF_IGR_PORT_MASK_SEL, VCAP_KF_IF_IGR_PORT_SEL, + VCAP_KF_IP4_DIP, VCAP_KF_IP4_IS, + VCAP_KF_IP4_SIP, + VCAP_KF_IP4_XIP, + VCAP_KF_IP6_DIP, + VCAP_KF_IP6_SIP, + VCAP_KF_IP6_XIP, VCAP_KF_IP_MC_IS, VCAP_KF_IP_PAYLOAD_5TUPLE, VCAP_KF_IP_PAYLOAD_S1_IP6, @@ -490,6 +524,8 @@ enum vcap_key_field { /* Actionset names with origin information */ enum vcap_actionfield_set { VCAP_AFS_NO_VALUE, /* initial value */ + VCAP_AFS_ARP_ENTRY, /* sparx5 lpm X1 */ + VCAP_AFS_ARP_PTR, /* sparx5 lpm X1 */ VCAP_AFS_BASE_TYPE, /* sparx5 is2 X3, sparx5 es2 X3, lan966x is2 X2 */ VCAP_AFS_CLASSIFICATION, /* sparx5 is0 X2 */ VCAP_AFS_CLASS_REDUCED, /* sparx5 is0 X1 */ @@ -506,6 +542,15 @@ enum vcap_actionfield_set { * Logical ID for the entry. This ID is extracted together with the frame in the * CPU extraction header. Only applicable to actions with CPU_COPY_ENA or * HIT_ME_ONCE set. + * VCAP_AF_ARP_ENA: W1, sparx5: lpm + * Enable entry for address resolution usage. + * VCAP_AF_ARP_PTR: W11, sparx5: lpm + * Pointer to entry in ARP Table. + * VCAP_AF_ARP_PTR_REMAP_ENA: W1, sparx5: lpm + * If this bit is set, ARP_PTR is used to point to an entry in the ARP pointer + * remap table. + * VCAP_AF_ARP_VMID: W9, sparx5: lpm + * Routing lookup. Egress router leg (EVMID). * VCAP_AF_CLS_VID_SEL: W3, sparx5: is0 * Controls the classified VID: 0: VID_NONE: No action. 1: VID_ADD: New VID = * old VID + VID_VAL. 2: VID_REPLACE: New VID = VID_VAL. 3: VID_FIRST_TAG: New @@ -562,6 +607,11 @@ enum vcap_actionfield_set { * 7: Mapped using mapping table 3, otherwise use mapping table 2 * VCAP_AF_DSCP_VAL: W6, sparx5: is0/es0, lan966x: is1 * See DSCP_ENA. + * VCAP_AF_ECMP_CNT: W4, sparx5: lpm + * Number of equal cost, multiple paths routes to DIP. + * VCAP_AF_ENCAP_ID: W10, sparx5: lpm + * Index into REW:ENCAP_IP4 when encapsulating IP packet in IPv4. Disabled when + * set to 0. * VCAP_AF_ES2_REW_CMD: W3, sparx5: es2 * Command forwarded to REW: 0: No action. 1: SWAP MAC addresses. 2: Do L2CP * DMAC translation when entering or leaving a tunnel. @@ -610,6 +660,12 @@ enum vcap_actionfield_set { * 0: Forward based on PIPELINE_PT and FWD_SEL * VCAP_AF_LRN_DIS: W1, sparx5: is2, lan966x: is2 * Setting this bit to 1 disables learning of frames hitting this action. + * VCAP_AF_MAC_LSB: W32, sparx5: lpm + * 32 least significant bits of MAC address. Used for ARP entry and/or + * (SMAC,SIP)/(DMAC,DIP) check. + * VCAP_AF_MAC_MSB: W16, sparx5: lpm + * 16 most significant bits of MAC address. Used for ARP entry and/or + * (SMAC,SIP)/(DMAC,DIP) check. * VCAP_AF_MAP_IDX: W9, sparx5: is0 * Index for QoS mapping table lookup * VCAP_AF_MAP_KEY: W3, sparx5: is0 @@ -715,9 +771,17 @@ enum vcap_actionfield_set { * See QOS_ENA. * VCAP_AF_REW_OP: W16, lan966x: is2 * Rewriter operation command. + * VCAP_AF_RGID: W3, sparx5: lpm + * Route Group ID. Used for SIP RPF check. + * VCAP_AF_RSDX: W12, sparx5: lpm + * Router Leg Service Index for ARP table entry. * VCAP_AF_RT_DIS: W1, sparx5: is2 * If set, routing is disallowed. Only applies when IS_INNER_ACL is 0. See also * IGR_ACL_ENA, EGR_ACL_ENA, and RLEG_STAT_IDX. + * VCAP_AF_SECUR_MATCH_MAC_ENA: W1, sparx5: lpm + * Enable Security MAC check. + * VCAP_AF_SECUR_MATCH_VMID_ENA: W1, sparx5: lpm + * Enable Security VMID check. * VCAP_AF_SFID_ENA: W1, lan966x: is1 * If set, SFID_VAL is used to lookup ANA::SFID. * VCAP_AF_SFID_VAL: W8, lan966x: is1 @@ -726,6 +790,8 @@ enum vcap_actionfield_set { * If set, SGID_VAL is used to lookup ANA::SGID. * VCAP_AF_SGID_VAL: W8, lan966x: is1 * Stream gate identifier. + * VCAP_AF_SIP_RPF_ENA: W1, sparx5: lpm + * Enable use for SIP RPF check. * VCAP_AF_SWAP_MACS_ENA: W1, sparx5: es0 * This setting is only active when FWD_SEL = 1 or FWD_SEL = 2 and PIPELINE_ACT * = LBK_ASM. 0: No action. 1: Swap MACs and clear bit 40 in new SMAC. @@ -774,7 +840,7 @@ enum vcap_actionfield_set { * VCAP_AF_TAG_C_VID_SEL: W2, sparx5: es0 * Selects VID for ES0 tag C. The resulting VID is termed C-TAG.VID. 0: * Classified VID. 1: VID_C_VAL. 2: IFH.ENCAP.GVID. 3: Reserved. - * VCAP_AF_TYPE: W1, sparx5: is0, lan966x: is1 + * VCAP_AF_TYPE: sparx5 is0 W1, sparx5 lpm W2, lan966x is1 W1 * Actionset type id - Set by the API * VCAP_AF_UNTAG_VID_ENA: W1, sparx5: es0 * Controls insertion of tag C. Untag or insert mode can be selected. See @@ -798,12 +864,18 @@ enum vcap_actionfield_set { * If set, use VLAN_POP_CNT as the number of VLAN tags to pop from the incoming * frame. This number is used by the Rewriter. Otherwise, VLAN_POP_CNT from * ANA:PORT:VLAN_CFG.VLAN_POP_CNT is used + * VCAP_AF_ZERO_DMAC_CPU_QU: W3, sparx5: lpm + * CPU queue used for CPU redirect if MAC address in ARP entry is all-zeros. */ /* Actionfield names */ enum vcap_action_field { VCAP_AF_NO_VALUE, /* initial value */ VCAP_AF_ACL_ID, + VCAP_AF_ARP_ENA, + VCAP_AF_ARP_PTR, + VCAP_AF_ARP_PTR_REMAP_ENA, + VCAP_AF_ARP_VMID, VCAP_AF_CLS_VID_SEL, VCAP_AF_CNT_ID, VCAP_AF_COPY_PORT_NUM, @@ -823,6 +895,8 @@ enum vcap_action_field { VCAP_AF_DSCP_ENA, VCAP_AF_DSCP_SEL, VCAP_AF_DSCP_VAL, + VCAP_AF_ECMP_CNT, + VCAP_AF_ENCAP_ID, VCAP_AF_ES2_REW_CMD, VCAP_AF_ESDX, VCAP_AF_FWD_KILL_ENA, @@ -839,6 +913,8 @@ enum vcap_action_field { VCAP_AF_ISDX_VAL, VCAP_AF_LOOP_ENA, VCAP_AF_LRN_DIS, + VCAP_AF_MAC_LSB, + VCAP_AF_MAC_MSB, VCAP_AF_MAP_IDX, VCAP_AF_MAP_KEY, VCAP_AF_MAP_LOOKUP_SEL, @@ -874,11 +950,16 @@ enum vcap_action_field { VCAP_AF_QOS_ENA, VCAP_AF_QOS_VAL, VCAP_AF_REW_OP, + VCAP_AF_RGID, + VCAP_AF_RSDX, VCAP_AF_RT_DIS, + VCAP_AF_SECUR_MATCH_MAC_ENA, + VCAP_AF_SECUR_MATCH_VMID_ENA, VCAP_AF_SFID_ENA, VCAP_AF_SFID_VAL, VCAP_AF_SGID_ENA, VCAP_AF_SGID_VAL, + VCAP_AF_SIP_RPF_ENA, VCAP_AF_SWAP_MACS_ENA, VCAP_AF_TAG_A_DEI_SEL, VCAP_AF_TAG_A_PCP_SEL, @@ -901,6 +982,7 @@ enum vcap_action_field { VCAP_AF_VID_VAL, VCAP_AF_VLAN_POP_CNT, VCAP_AF_VLAN_POP_CNT_ENA, + VCAP_AF_ZERO_DMAC_CPU_QU, }; #endif /* __VCAP_AG_API__ */ diff --git a/drivers/net/ethernet/microchip/vcap/vcap_model_kunit.c b/drivers/net/ethernet/microchip/vcap/vcap_model_kunit.c index 5dbfc0d0c369..75819b49e110 100644 --- a/drivers/net/ethernet/microchip/vcap/vcap_model_kunit.c +++ b/drivers/net/ethernet/microchip/vcap/vcap_model_kunit.c @@ -1,10 +1,10 @@ // SPDX-License-Identifier: BSD-3-Clause -/* Copyright (C) 2023 Microchip Technology Inc. and its subsidiaries. +/* Copyright (C) 2026 Microchip Technology Inc. and its subsidiaries. * Microchip VCAP test model interface for kunit testing */ -/* This file is autogenerated by cml-utils 2023-02-10 11:16:00 +0100. - * Commit ID: c30fb4bf0281cd4a7133bdab6682f9e43c872ada +/* This file is autogenerated by cml-utils 2026-04-28 13:55:50 +0200. + * Commit ID: cd2494df16a1d3b14f650f720f6a8126b88b553a */ #include -- 2.52.0