Add autogenerated VCAP rule encoding metadata, and VCAP parameters for
the LPM VCAP used for L3 routing.

Reviewed-by: Daniel Machon <[email protected]>
Reviewed-by: Steen Hegelund <[email protected]>
Signed-off-by: Jens Emil Schulz Østergaard 
<[email protected]>
---
 .../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 <linux/types.h>
@@ -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 <linux/types.h>
@@ -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 <linux/types.h>

-- 
2.52.0


Reply via email to