NPC_LT_LH_CUSTOM1 = 0xF,
 };
 
+/* NPC port kind defines how the incoming or outgoing packets
+ * are processed. NPC accepts packets from up to 64 pkinds.
+ * Software assigns pkind for each incoming port such as CGX
+ * Ethernet interfaces, LBK interfaces, etc.
+ */
+enum npc_pkind_type {
+       NPC_TX_DEF_PKIND = 63ULL,       /* NIX-TX PKIND */
+};
+
 struct npc_kpu_profile_cam {
        u8 state;
        u8 state_mask;
 /* NPC_AF_INTFX_KEX_CFG field masks */
 #define NPC_PARSE_NIBBLE               GENMASK_ULL(30, 0)
 
+/* NPC_PARSE_KEX_S nibble definitions for each field */
+#define NPC_PARSE_NIBBLE_CHAN          GENMASK_ULL(2, 0)
+#define NPC_PARSE_NIBBLE_ERRLEV                BIT_ULL(3)
+#define NPC_PARSE_NIBBLE_ERRCODE       GENMASK_ULL(5, 4)
+#define NPC_PARSE_NIBBLE_L2L3_BCAST    BIT_ULL(6)
+#define NPC_PARSE_NIBBLE_LA_FLAGS      GENMASK_ULL(8, 7)
+#define NPC_PARSE_NIBBLE_LA_LTYPE      BIT_ULL(9)
+#define NPC_PARSE_NIBBLE_LB_FLAGS      GENMASK_ULL(11, 10)
+#define NPC_PARSE_NIBBLE_LB_LTYPE      BIT_ULL(12)
+#define NPC_PARSE_NIBBLE_LC_FLAGS      GENMASK_ULL(14, 13)
+#define NPC_PARSE_NIBBLE_LC_LTYPE      BIT_ULL(15)
+#define NPC_PARSE_NIBBLE_LD_FLAGS      GENMASK_ULL(17, 16)
+#define NPC_PARSE_NIBBLE_LD_LTYPE      BIT_ULL(18)
+#define NPC_PARSE_NIBBLE_LE_FLAGS      GENMASK_ULL(20, 19)
+#define NPC_PARSE_NIBBLE_LE_LTYPE      BIT_ULL(21)
+#define NPC_PARSE_NIBBLE_LF_FLAGS      GENMASK_ULL(23, 22)
+#define NPC_PARSE_NIBBLE_LF_LTYPE      BIT_ULL(24)
+#define NPC_PARSE_NIBBLE_LG_FLAGS      GENMASK_ULL(26, 25)
+#define NPC_PARSE_NIBBLE_LG_LTYPE      BIT_ULL(27)
+#define NPC_PARSE_NIBBLE_LH_FLAGS      GENMASK_ULL(29, 28)
+#define NPC_PARSE_NIBBLE_LH_LTYPE      BIT_ULL(30)
+
 /* NIX Receive Vtag Action Structure */
 #define VTAG0_VALID_BIT                BIT_ULL(15)
 #define VTAG0_TYPE_MASK                GENMASK_ULL(14, 12)
 
                        (((bytesm1) << 16) | ((hdr_ofs) << 8) | ((ena) << 7) | \
                         ((flags_ena) << 6) | ((key_ofs) & 0x3F))
 
+/* Rx parse key extract nibble enable */
+#define NPC_PARSE_NIBBLE_INTF_RX       (NPC_PARSE_NIBBLE_CHAN | \
+                                        NPC_PARSE_NIBBLE_LA_LTYPE | \
+                                        NPC_PARSE_NIBBLE_LB_LTYPE | \
+                                        NPC_PARSE_NIBBLE_LC_LTYPE | \
+                                        NPC_PARSE_NIBBLE_LD_LTYPE | \
+                                        NPC_PARSE_NIBBLE_LE_LTYPE)
+/* Tx parse key extract nibble enable */
+#define NPC_PARSE_NIBBLE_INTF_TX       (NPC_PARSE_NIBBLE_LA_LTYPE | \
+                                        NPC_PARSE_NIBBLE_LB_LTYPE | \
+                                        NPC_PARSE_NIBBLE_LC_LTYPE | \
+                                        NPC_PARSE_NIBBLE_LD_LTYPE | \
+                                        NPC_PARSE_NIBBLE_LE_LTYPE)
+
 enum npc_kpu_parser_state {
        NPC_S_NA = 0,
        NPC_S_KPU1_ETHER,
        .name = "default",
        .kpu_version = NPC_KPU_PROFILE_VER,
        .keyx_cfg = {
-               /* nibble: LA..LE (ltype only) + Channel */
-               [NIX_INTF_RX] = ((u64)NPC_MCAM_KEY_X2 << 32) | 0x49247,
-               [NIX_INTF_TX] = ((u64)NPC_MCAM_KEY_X2 << 32) | ((1ULL << 19) - 1),
+               /* nibble: LA..LE (ltype only) + channel */
+               [NIX_INTF_RX] = ((u64)NPC_MCAM_KEY_X2 << 32) | NPC_PARSE_NIBBLE_INTF_RX,
+               /* nibble: LA..LE (ltype only) */
+               [NIX_INTF_TX] = ((u64)NPC_MCAM_KEY_X2 << 32) | NPC_PARSE_NIBBLE_INTF_TX,
        },
        .intf_lid_lt_ld = {
        /* Default RX MCAM KEX profile */
                        /* Layer B: Single VLAN (CTAG) */
                        /* CTAG VLAN[2..3] + Ethertype, 4 bytes, KW0[63:32] */
                        [NPC_LT_LB_CTAG] = {
-                               KEX_LD_CFG(0x03, 0x0, 0x1, 0x0, 0x4),
+                               KEX_LD_CFG(0x03, 0x2, 0x1, 0x0, 0x4),
                        },
                        /* Layer B: Stacked VLAN (STAG|QinQ) */
                        [NPC_LT_LB_STAG_QINQ] = {
-                               /* CTAG VLAN[2..3] + Ethertype, 4 bytes, KW0[63:32] */
-                               KEX_LD_CFG(0x03, 0x4, 0x1, 0x0, 0x4),
+                               /* Outer VLAN: 2 bytes, KW0[63:48] */
+                               KEX_LD_CFG(0x01, 0x2, 0x1, 0x0, 0x6),
+                               /* Ethertype: 2 bytes, KW0[47:32] */
+                               KEX_LD_CFG(0x01, 0x8, 0x1, 0x0, 0x4),
                        },
                        [NPC_LT_LB_FDSA] = {
                                /* SWITCH PORT: 1 byte, KW0[63:48] */
                [NPC_LID_LD] = {
                        /* Layer D:UDP */
                        [NPC_LT_LD_UDP] = {
-                               /* SPORT: 2 bytes, KW3[15:0] */
-                               KEX_LD_CFG(0x1, 0x0, 0x1, 0x0, 0x18),
-                               /* DPORT: 2 bytes, KW3[31:16] */
-                               KEX_LD_CFG(0x1, 0x2, 0x1, 0x0, 0x1a),
+                               /* SPORT+DPORT: 4 bytes, KW3[31:0] */
+                               KEX_LD_CFG(0x3, 0x0, 0x1, 0x0, 0x18),
+                       },
+                       /* Layer D:TCP */
+                       [NPC_LT_LD_TCP] = {
+                               /* SPORT+DPORT: 4 bytes, KW3[31:0] */
+                               KEX_LD_CFG(0x3, 0x0, 0x1, 0x0, 0x18),
+                       },
+               },
+       },
+
+       /* Default TX MCAM KEX profile */
+       [NIX_INTF_TX] = {
+               [NPC_LID_LA] = {
+                       /* Layer A: NIX_INST_HDR_S + Ethernet */
+                       /* NIX appends 8 bytes of NIX_INST_HDR_S at the
+                        * start of each TX packet supplied to NPC.
+                        */
+                       [NPC_LT_LA_IH_NIX_ETHER] = {
+                               /* PF_FUNC: 2B , KW0 [47:32] */
+                               KEX_LD_CFG(0x01, 0x0, 0x1, 0x0, 0x4),
+                               /* DMAC: 6 bytes, KW1[63:16] */
+                               KEX_LD_CFG(0x05, 0x8, 0x1, 0x0, 0xa),
+                       },
+               },
+               [NPC_LID_LB] = {
+                       /* Layer B: Single VLAN (CTAG) */
+                       [NPC_LT_LB_CTAG] = {
+                               /* CTAG VLAN[2..3] KW0[63:48] */
+                               KEX_LD_CFG(0x01, 0x2, 0x1, 0x0, 0x6),
+                               /* CTAG VLAN[2..3] KW1[15:0] */
+                               KEX_LD_CFG(0x01, 0x4, 0x1, 0x0, 0x8),
+                       },
+                       /* Layer B: Stacked VLAN (STAG|QinQ) */
+                       [NPC_LT_LB_STAG_QINQ] = {
+                               /* Outer VLAN: 2 bytes, KW0[63:48] */
+                               KEX_LD_CFG(0x01, 0x2, 0x1, 0x0, 0x6),
+                               /* Outer VLAN: 2 Bytes, KW1[15:0] */
+                               KEX_LD_CFG(0x01, 0x8, 0x1, 0x0, 0x8),
+                       },
+               },
+               [NPC_LID_LC] = {
+                       /* Layer C: IPv4 */
+                       [NPC_LT_LC_IP] = {
+                               /* SIP+DIP: 8 bytes, KW2[63:0] */
+                               KEX_LD_CFG(0x07, 0xc, 0x1, 0x0, 0x10),
+                               /* TOS: 1 byte, KW1[63:56] */
+                               KEX_LD_CFG(0x0, 0x1, 0x1, 0x0, 0xf),
+                       },
+                       /* Layer C: IPv6 */
+                       [NPC_LT_LC_IP6] = {
+                               /* Everything up to SADDR: 8 bytes, KW2[63:0] */
+                               KEX_LD_CFG(0x07, 0x0, 0x1, 0x0, 0x10),
+                       },
+               },
+               [NPC_LID_LD] = {
+                       /* Layer D:UDP */
+                       [NPC_LT_LD_UDP] = {
+                               /* SPORT+DPORT: 4 bytes, KW3[31:0] */
+                               KEX_LD_CFG(0x3, 0x0, 0x1, 0x0, 0x18),
                        },
                        /* Layer D:TCP */
                        [NPC_LT_LD_TCP] = {
-                               /* SPORT: 2 bytes, KW3[15:0] */
-                               KEX_LD_CFG(0x1, 0x0, 0x1, 0x0, 0x18),
-                               /* DPORT: 2 bytes, KW3[31:16] */
-                               KEX_LD_CFG(0x1, 0x2, 0x1, 0x0, 0x1a),
+                               /* SPORT+DPORT: 4 bytes, KW3[31:0] */
+                               KEX_LD_CFG(0x3, 0x0, 0x1, 0x0, 0x18),
                        },
                },
        },