MLXSW_AFK_ELEMENT_INFO_BUF(DST_IP_0_31, 0x3C, 4),
        MLXSW_AFK_ELEMENT_INFO_U32(FDB_MISS, 0x40, 0, 1),
        MLXSW_AFK_ELEMENT_INFO_U32(L4_PORT_RANGE, 0x40, 1, 16),
+       MLXSW_AFK_ELEMENT_INFO_U32(VIRT_ROUTER_0_3, 0x40, 17, 4),
+       MLXSW_AFK_ELEMENT_INFO_U32(VIRT_ROUTER_4_7, 0x40, 21, 4),
+       MLXSW_AFK_ELEMENT_INFO_U32(VIRT_ROUTER_MSB, 0x40, 25, 4),
 };
 
 struct mlxsw_afk {
 
 }
 
 static const enum mlxsw_afk_element mlxsw_sp2_mr_tcam_usage_ipv6[] = {
-               MLXSW_AFK_ELEMENT_VIRT_ROUTER,
+               MLXSW_AFK_ELEMENT_VIRT_ROUTER_0_3,
+               MLXSW_AFK_ELEMENT_VIRT_ROUTER_4_7,
+               MLXSW_AFK_ELEMENT_VIRT_ROUTER_MSB,
                MLXSW_AFK_ELEMENT_SRC_IP_96_127,
                MLXSW_AFK_ELEMENT_SRC_IP_64_95,
                MLXSW_AFK_ELEMENT_SRC_IP_32_63,
 mlxsw_sp2_mr_tcam_rule_parse4(struct mlxsw_sp_acl_rule_info *rulei,
                              struct mlxsw_sp_mr_route_key *key)
 {
+       mlxsw_sp_acl_rulei_keymask_u32(rulei, MLXSW_AFK_ELEMENT_VIRT_ROUTER,
+                                      key->vrid, GENMASK(11, 0));
        mlxsw_sp_acl_rulei_keymask_buf(rulei, MLXSW_AFK_ELEMENT_SRC_IP_0_31,
                                       (char *) &key->source.addr4,
                                       (char *) &key->source_mask.addr4, 4);
 mlxsw_sp2_mr_tcam_rule_parse6(struct mlxsw_sp_acl_rule_info *rulei,
                              struct mlxsw_sp_mr_route_key *key)
 {
+       mlxsw_sp_acl_rulei_keymask_u32(rulei, MLXSW_AFK_ELEMENT_VIRT_ROUTER_0_3,
+                                      key->vrid, GENMASK(3, 0));
+       mlxsw_sp_acl_rulei_keymask_u32(rulei, MLXSW_AFK_ELEMENT_VIRT_ROUTER_4_7,
+                                      key->vrid >> 4, GENMASK(3, 0));
+       mlxsw_sp_acl_rulei_keymask_u32(rulei,
+                                      MLXSW_AFK_ELEMENT_VIRT_ROUTER_MSB,
+                                      key->vrid >> 8, GENMASK(3, 0));
        mlxsw_sp_acl_rulei_keymask_buf(rulei, MLXSW_AFK_ELEMENT_SRC_IP_96_127,
                                       &key->source.addr6.s6_addr[0x0],
                                       &key->source_mask.addr6.s6_addr[0x0], 4);
 
        rulei = mlxsw_sp_acl_rule_rulei(rule);
        rulei->priority = priority;
-       mlxsw_sp_acl_rulei_keymask_u32(rulei, MLXSW_AFK_ELEMENT_VIRT_ROUTER,
-                                      key->vrid, GENMASK(11, 0));
        switch (key->proto) {
        case MLXSW_SP_L3_PROTO_IPV4:
                return mlxsw_sp2_mr_tcam_rule_parse4(rulei, key);
 
 };
 
 static struct mlxsw_afk_element_inst mlxsw_sp_afk_element_info_ipv6_0[] = {
+       MLXSW_AFK_ELEMENT_INST_U32(VIRT_ROUTER_0_3, 0x00, 0, 4),
        MLXSW_AFK_ELEMENT_INST_BUF(DST_IP_32_63, 0x04, 4),
 };
 
 static struct mlxsw_afk_element_inst mlxsw_sp_afk_element_info_ipv6_1[] = {
+       MLXSW_AFK_ELEMENT_INST_U32(VIRT_ROUTER_4_7, 0x00, 0, 4),
        MLXSW_AFK_ELEMENT_INST_BUF(DST_IP_64_95, 0x04, 4),
 };
 
 static struct mlxsw_afk_element_inst mlxsw_sp_afk_element_info_ipv6_2[] = {
+       MLXSW_AFK_ELEMENT_INST_EXT_U32(VIRT_ROUTER_MSB, 0x00, 0, 3, 0, true),
        MLXSW_AFK_ELEMENT_INST_BUF(DST_IP_96_127, 0x04, 4),
 };
 
 };
 
 static struct mlxsw_afk_element_inst mlxsw_sp_afk_element_info_ipv6_2b[] = {
+       MLXSW_AFK_ELEMENT_INST_U32(VIRT_ROUTER_MSB, 0x00, 0, 4),
        MLXSW_AFK_ELEMENT_INST_BUF(DST_IP_96_127, 0x04, 4),
 };