net/ice: support RSS for IPv6 prefix
[dpdk.git] / drivers / net / ice / ice_hash.c
index cbd6116..e57feff 100644 (file)
@@ -100,6 +100,50 @@ struct rss_type_match_hdr hint_eth_ipv4_gtpu_ipv4 = {
        ICE_FLOW_SEG_HDR_GTPU_IP | ICE_FLOW_SEG_HDR_IPV4 |
        ICE_FLOW_SEG_HDR_IPV_OTHER,
        ETH_RSS_GTPU | ETH_RSS_IPV4};
+struct rss_type_match_hdr hint_eth_ipv4_gtpu_ipv4_udp = {
+       ICE_FLOW_SEG_HDR_GTPU_IP | ICE_FLOW_SEG_HDR_IPV4 |
+       ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_UDP,
+       ETH_RSS_GTPU | ETH_RSS_NONFRAG_IPV4_UDP};
+struct rss_type_match_hdr hint_eth_ipv4_gtpu_ipv4_tcp = {
+       ICE_FLOW_SEG_HDR_GTPU_IP | ICE_FLOW_SEG_HDR_IPV4 |
+       ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_TCP,
+       ETH_RSS_GTPU | ETH_RSS_NONFRAG_IPV4_TCP};
+struct rss_type_match_hdr hint_eth_ipv4_gtpu_ipv6 = {
+       ICE_FLOW_SEG_HDR_GTPU_IP | ICE_FLOW_SEG_HDR_IPV6 |
+       ICE_FLOW_SEG_HDR_IPV_OTHER,
+       ETH_RSS_GTPU | ETH_RSS_IPV6};
+struct rss_type_match_hdr hint_eth_ipv4_gtpu_ipv6_udp = {
+       ICE_FLOW_SEG_HDR_GTPU_IP | ICE_FLOW_SEG_HDR_IPV6 |
+       ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_UDP,
+       ETH_RSS_GTPU | ETH_RSS_NONFRAG_IPV6_UDP};
+struct rss_type_match_hdr hint_eth_ipv4_gtpu_ipv6_tcp = {
+       ICE_FLOW_SEG_HDR_GTPU_IP | ICE_FLOW_SEG_HDR_IPV6 |
+       ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_TCP,
+       ETH_RSS_GTPU | ETH_RSS_NONFRAG_IPV6_TCP};
+struct rss_type_match_hdr hint_eth_ipv6_gtpu_ipv4 = {
+       ICE_FLOW_SEG_HDR_GTPU_IP | ICE_FLOW_SEG_HDR_IPV4 |
+       ICE_FLOW_SEG_HDR_IPV_OTHER,
+       ETH_RSS_GTPU | ETH_RSS_IPV4};
+struct rss_type_match_hdr hint_eth_ipv6_gtpu_ipv4_udp = {
+       ICE_FLOW_SEG_HDR_GTPU_IP | ICE_FLOW_SEG_HDR_IPV4 |
+       ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_UDP,
+       ETH_RSS_GTPU | ETH_RSS_NONFRAG_IPV4_UDP};
+struct rss_type_match_hdr hint_eth_ipv6_gtpu_ipv4_tcp = {
+       ICE_FLOW_SEG_HDR_GTPU_IP | ICE_FLOW_SEG_HDR_IPV4 |
+       ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_TCP,
+       ETH_RSS_GTPU | ETH_RSS_NONFRAG_IPV4_TCP};
+struct rss_type_match_hdr hint_eth_ipv6_gtpu_ipv6 = {
+       ICE_FLOW_SEG_HDR_GTPU_IP | ICE_FLOW_SEG_HDR_IPV6 |
+       ICE_FLOW_SEG_HDR_IPV_OTHER,
+       ETH_RSS_GTPU | ETH_RSS_IPV6};
+struct rss_type_match_hdr hint_eth_ipv6_gtpu_ipv6_udp = {
+       ICE_FLOW_SEG_HDR_GTPU_IP | ICE_FLOW_SEG_HDR_IPV6 |
+       ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_UDP,
+       ETH_RSS_GTPU | ETH_RSS_NONFRAG_IPV6_UDP};
+struct rss_type_match_hdr hint_eth_ipv6_gtpu_ipv6_tcp = {
+       ICE_FLOW_SEG_HDR_GTPU_IP | ICE_FLOW_SEG_HDR_IPV6 |
+       ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_TCP,
+       ETH_RSS_GTPU | ETH_RSS_NONFRAG_IPV6_TCP};
 struct rss_type_match_hdr hint_eth_ipv4_gtpu_eh_ipv4 = {
        ICE_FLOW_SEG_HDR_GTPU_EH | ICE_FLOW_SEG_HDR_IPV4 |
        ICE_FLOW_SEG_HDR_IPV_OTHER,
@@ -112,6 +156,42 @@ struct rss_type_match_hdr hint_eth_ipv4_gtpu_eh_ipv4_tcp = {
        ICE_FLOW_SEG_HDR_GTPU_EH | ICE_FLOW_SEG_HDR_IPV4 |
        ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_TCP,
        ETH_RSS_GTPU | ETH_RSS_NONFRAG_IPV4_TCP};
+struct rss_type_match_hdr hint_eth_ipv4_gtpu_eh_ipv6 = {
+       ICE_FLOW_SEG_HDR_GTPU_EH | ICE_FLOW_SEG_HDR_IPV6 |
+       ICE_FLOW_SEG_HDR_IPV_OTHER,
+       ETH_RSS_GTPU | ETH_RSS_IPV6};
+struct rss_type_match_hdr hint_eth_ipv4_gtpu_eh_ipv6_udp = {
+       ICE_FLOW_SEG_HDR_GTPU_EH | ICE_FLOW_SEG_HDR_IPV6 |
+       ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_UDP,
+       ETH_RSS_GTPU | ETH_RSS_NONFRAG_IPV6_UDP};
+struct rss_type_match_hdr hint_eth_ipv4_gtpu_eh_ipv6_tcp = {
+       ICE_FLOW_SEG_HDR_GTPU_EH | ICE_FLOW_SEG_HDR_IPV6 |
+       ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_TCP,
+       ETH_RSS_GTPU | ETH_RSS_NONFRAG_IPV6_TCP};
+struct rss_type_match_hdr hint_eth_ipv6_gtpu_eh_ipv4 = {
+       ICE_FLOW_SEG_HDR_GTPU_EH | ICE_FLOW_SEG_HDR_IPV4 |
+       ICE_FLOW_SEG_HDR_IPV_OTHER,
+       ETH_RSS_GTPU | ETH_RSS_IPV4};
+struct rss_type_match_hdr hint_eth_ipv6_gtpu_eh_ipv4_udp = {
+       ICE_FLOW_SEG_HDR_GTPU_EH | ICE_FLOW_SEG_HDR_IPV4 |
+       ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_UDP,
+       ETH_RSS_GTPU | ETH_RSS_NONFRAG_IPV4_UDP};
+struct rss_type_match_hdr hint_eth_ipv6_gtpu_eh_ipv4_tcp = {
+       ICE_FLOW_SEG_HDR_GTPU_EH | ICE_FLOW_SEG_HDR_IPV4 |
+       ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_TCP,
+       ETH_RSS_GTPU | ETH_RSS_NONFRAG_IPV4_TCP};
+struct rss_type_match_hdr hint_eth_ipv6_gtpu_eh_ipv6 = {
+       ICE_FLOW_SEG_HDR_GTPU_EH | ICE_FLOW_SEG_HDR_IPV6 |
+       ICE_FLOW_SEG_HDR_IPV_OTHER,
+       ETH_RSS_GTPU | ETH_RSS_IPV6};
+struct rss_type_match_hdr hint_eth_ipv6_gtpu_eh_ipv6_udp = {
+       ICE_FLOW_SEG_HDR_GTPU_EH | ICE_FLOW_SEG_HDR_IPV6 |
+       ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_UDP,
+       ETH_RSS_GTPU | ETH_RSS_NONFRAG_IPV6_UDP};
+struct rss_type_match_hdr hint_eth_ipv6_gtpu_eh_ipv6_tcp = {
+       ICE_FLOW_SEG_HDR_GTPU_EH | ICE_FLOW_SEG_HDR_IPV6 |
+       ICE_FLOW_SEG_HDR_IPV_OTHER | ICE_FLOW_SEG_HDR_TCP,
+       ETH_RSS_GTPU | ETH_RSS_NONFRAG_IPV6_TCP};
 struct rss_type_match_hdr hint_eth_pppoes_ipv4 = {
        ICE_FLOW_SEG_HDR_PPPOE | ICE_FLOW_SEG_HDR_IPV4 |
        ICE_FLOW_SEG_HDR_IPV_OTHER,
@@ -268,12 +348,52 @@ static struct ice_pattern_match_item ice_hash_pattern_list_comms[] = {
                &hint_eth_ipv4_sctp},
        {pattern_eth_ipv4_gtpu_ipv4,        ICE_INSET_NONE,
                &hint_eth_ipv4_gtpu_ipv4},
+       {pattern_eth_ipv4_gtpu_ipv4_udp,    ICE_INSET_NONE,
+               &hint_eth_ipv4_gtpu_ipv4_udp},
+       {pattern_eth_ipv4_gtpu_ipv4_tcp,    ICE_INSET_NONE,
+               &hint_eth_ipv4_gtpu_ipv4_tcp},
+       {pattern_eth_ipv4_gtpu_ipv6,        ICE_INSET_NONE,
+               &hint_eth_ipv4_gtpu_ipv6},
+       {pattern_eth_ipv4_gtpu_ipv6_udp,    ICE_INSET_NONE,
+               &hint_eth_ipv4_gtpu_ipv6_udp},
+       {pattern_eth_ipv4_gtpu_ipv6_tcp,    ICE_INSET_NONE,
+               &hint_eth_ipv4_gtpu_ipv6_tcp},
+       {pattern_eth_ipv6_gtpu_ipv4,        ICE_INSET_NONE,
+               &hint_eth_ipv6_gtpu_ipv4},
+       {pattern_eth_ipv6_gtpu_ipv4_udp,    ICE_INSET_NONE,
+               &hint_eth_ipv6_gtpu_ipv4_udp},
+       {pattern_eth_ipv6_gtpu_ipv4_tcp,    ICE_INSET_NONE,
+               &hint_eth_ipv6_gtpu_ipv4_tcp},
+       {pattern_eth_ipv6_gtpu_ipv6,        ICE_INSET_NONE,
+               &hint_eth_ipv6_gtpu_ipv6},
+       {pattern_eth_ipv6_gtpu_ipv6_udp,    ICE_INSET_NONE,
+               &hint_eth_ipv6_gtpu_ipv6_udp},
+       {pattern_eth_ipv6_gtpu_ipv6_tcp,    ICE_INSET_NONE,
+               &hint_eth_ipv6_gtpu_ipv6_tcp},
        {pattern_eth_ipv4_gtpu_eh_ipv4,     ICE_INSET_NONE,
                &hint_eth_ipv4_gtpu_eh_ipv4},
        {pattern_eth_ipv4_gtpu_eh_ipv4_udp, ICE_INSET_NONE,
                &hint_eth_ipv4_gtpu_eh_ipv4_udp},
        {pattern_eth_ipv4_gtpu_eh_ipv4_tcp, ICE_INSET_NONE,
                &hint_eth_ipv4_gtpu_eh_ipv4_tcp},
+       {pattern_eth_ipv4_gtpu_eh_ipv6,     ICE_INSET_NONE,
+               &hint_eth_ipv4_gtpu_eh_ipv6},
+       {pattern_eth_ipv4_gtpu_eh_ipv6_udp, ICE_INSET_NONE,
+               &hint_eth_ipv4_gtpu_eh_ipv6_udp},
+       {pattern_eth_ipv4_gtpu_eh_ipv6_tcp, ICE_INSET_NONE,
+               &hint_eth_ipv4_gtpu_eh_ipv6_tcp},
+       {pattern_eth_ipv6_gtpu_eh_ipv4,     ICE_INSET_NONE,
+               &hint_eth_ipv6_gtpu_eh_ipv4},
+       {pattern_eth_ipv6_gtpu_eh_ipv4_udp, ICE_INSET_NONE,
+               &hint_eth_ipv6_gtpu_eh_ipv4_udp},
+       {pattern_eth_ipv6_gtpu_eh_ipv4_tcp, ICE_INSET_NONE,
+               &hint_eth_ipv6_gtpu_eh_ipv4_tcp},
+       {pattern_eth_ipv6_gtpu_eh_ipv6,     ICE_INSET_NONE,
+               &hint_eth_ipv6_gtpu_eh_ipv6},
+       {pattern_eth_ipv6_gtpu_eh_ipv6_udp, ICE_INSET_NONE,
+               &hint_eth_ipv6_gtpu_eh_ipv6_udp},
+       {pattern_eth_ipv6_gtpu_eh_ipv6_tcp, ICE_INSET_NONE,
+               &hint_eth_ipv6_gtpu_eh_ipv6_tcp},
        {pattern_eth_pppoes_ipv4,           ICE_INSET_NONE,
                &hint_eth_pppoes_ipv4},
        {pattern_eth_pppoes_ipv4_udp,       ICE_INSET_NONE,
@@ -470,6 +590,21 @@ struct ice_hash_match_type ice_hash_type_list[] = {
        {ETH_RSS_IPV6 | ETH_RSS_L3_DST_ONLY,
                BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_DA)},
        {ETH_RSS_IPV6, ICE_FLOW_HASH_IPV6},
+       {ETH_RSS_IPV6_PRE32 | ETH_RSS_L3_SRC_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE32_SA)},
+       {ETH_RSS_IPV6_PRE32 | ETH_RSS_L3_DST_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE32_DA)},
+       {ETH_RSS_IPV6_PRE32, ICE_FLOW_HASH_IPV6_PRE32},
+       {ETH_RSS_IPV6_PRE48 | ETH_RSS_L3_SRC_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE48_SA)},
+       {ETH_RSS_IPV6_PRE48 | ETH_RSS_L3_DST_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE48_DA)},
+       {ETH_RSS_IPV6_PRE48, ICE_FLOW_HASH_IPV6_PRE48},
+       {ETH_RSS_IPV6_PRE64 | ETH_RSS_L3_SRC_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_SA)},
+       {ETH_RSS_IPV6_PRE64 | ETH_RSS_L3_DST_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_DA)},
+       {ETH_RSS_IPV6_PRE64, ICE_FLOW_HASH_IPV6_PRE64},
        {ETH_RSS_NONFRAG_IPV6_UDP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
                BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_SA) |
                BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PROT) |
@@ -501,6 +636,69 @@ struct ice_hash_match_type ice_hash_type_list[] = {
        {ETH_RSS_NONFRAG_IPV6_UDP,
                ICE_HASH_UDP_IPV6 |
                BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PROT)},
+       {ETH_RSS_IPV6_PRE32_UDP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE32_SA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_SRC_PORT)},
+       {ETH_RSS_IPV6_PRE32_UDP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE32_SA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_DST_PORT)},
+       {ETH_RSS_IPV6_PRE32_UDP | ETH_RSS_L3_SRC_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE32_SA)},
+       {ETH_RSS_IPV6_PRE32_UDP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE32_DA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_SRC_PORT)},
+       {ETH_RSS_IPV6_PRE32_UDP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE32_DA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_DST_PORT)},
+       {ETH_RSS_IPV6_PRE32_UDP | ETH_RSS_L3_DST_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE32_DA)},
+       {ETH_RSS_IPV6_PRE32_UDP | ETH_RSS_L4_SRC_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_SRC_PORT)},
+       {ETH_RSS_IPV6_PRE32_UDP | ETH_RSS_L4_DST_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_DST_PORT)},
+       {ETH_RSS_IPV6_PRE32_UDP, ICE_HASH_UDP_IPV6_PRE32},
+       {ETH_RSS_IPV6_PRE48_UDP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE48_SA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_SRC_PORT)},
+       {ETH_RSS_IPV6_PRE48_UDP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE48_SA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_DST_PORT)},
+       {ETH_RSS_IPV6_PRE48_UDP | ETH_RSS_L3_SRC_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE48_SA)},
+       {ETH_RSS_IPV6_PRE48_UDP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE48_DA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_SRC_PORT)},
+       {ETH_RSS_IPV6_PRE48_UDP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE48_DA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_DST_PORT)},
+       {ETH_RSS_IPV6_PRE48_UDP | ETH_RSS_L3_DST_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE48_DA)},
+       {ETH_RSS_IPV6_PRE48_UDP | ETH_RSS_L4_SRC_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_SRC_PORT)},
+       {ETH_RSS_IPV6_PRE48_UDP | ETH_RSS_L4_DST_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_DST_PORT)},
+       {ETH_RSS_IPV6_PRE48_UDP, ICE_HASH_UDP_IPV6_PRE48},
+       {ETH_RSS_IPV6_PRE64_UDP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_SA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_SRC_PORT)},
+       {ETH_RSS_IPV6_PRE64_UDP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_SA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_DST_PORT)},
+       {ETH_RSS_IPV6_PRE64_UDP | ETH_RSS_L3_SRC_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_SA)},
+       {ETH_RSS_IPV6_PRE64_UDP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_DA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_SRC_PORT)},
+       {ETH_RSS_IPV6_PRE64_UDP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_DA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_DST_PORT)},
+       {ETH_RSS_IPV6_PRE64_UDP | ETH_RSS_L3_DST_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_DA)},
+       {ETH_RSS_IPV6_PRE64_UDP | ETH_RSS_L4_SRC_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_SRC_PORT)},
+       {ETH_RSS_IPV6_PRE64_UDP | ETH_RSS_L4_DST_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_UDP_DST_PORT)},
+       {ETH_RSS_IPV6_PRE64_UDP, ICE_HASH_UDP_IPV6_PRE64},
        {ETH_RSS_NONFRAG_IPV6_TCP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
                BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_SA) |
                BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PROT) |
@@ -530,6 +728,69 @@ struct ice_hash_match_type ice_hash_type_list[] = {
        {ETH_RSS_NONFRAG_IPV6_TCP,
                ICE_HASH_TCP_IPV6 |
                BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PROT)},
+       {ETH_RSS_IPV6_PRE32_TCP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE32_SA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_SRC_PORT)},
+       {ETH_RSS_IPV6_PRE32_TCP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE32_SA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_DST_PORT)},
+       {ETH_RSS_IPV6_PRE32_TCP | ETH_RSS_L3_SRC_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE32_SA)},
+       {ETH_RSS_IPV6_PRE32_TCP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE32_DA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_SRC_PORT)},
+       {ETH_RSS_IPV6_PRE32_TCP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE32_DA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_DST_PORT)},
+       {ETH_RSS_IPV6_PRE32_TCP | ETH_RSS_L3_DST_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE32_DA)},
+       {ETH_RSS_IPV6_PRE32_TCP | ETH_RSS_L4_SRC_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_SRC_PORT)},
+       {ETH_RSS_IPV6_PRE32_TCP | ETH_RSS_L4_DST_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_DST_PORT)},
+       {ETH_RSS_IPV6_PRE32_TCP, ICE_HASH_TCP_IPV6_PRE32},
+       {ETH_RSS_IPV6_PRE48_TCP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE48_SA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_SRC_PORT)},
+       {ETH_RSS_IPV6_PRE48_TCP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE48_SA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_DST_PORT)},
+       {ETH_RSS_IPV6_PRE48_TCP | ETH_RSS_L3_SRC_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE48_SA)},
+       {ETH_RSS_IPV6_PRE48_TCP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE48_DA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_SRC_PORT)},
+       {ETH_RSS_IPV6_PRE48_TCP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE48_DA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_DST_PORT)},
+       {ETH_RSS_IPV6_PRE48_TCP | ETH_RSS_L3_DST_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE48_DA)},
+       {ETH_RSS_IPV6_PRE48_TCP | ETH_RSS_L4_SRC_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_SRC_PORT)},
+       {ETH_RSS_IPV6_PRE48_TCP | ETH_RSS_L4_DST_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_DST_PORT)},
+       {ETH_RSS_IPV6_PRE48_TCP, ICE_HASH_TCP_IPV6_PRE48},
+       {ETH_RSS_IPV6_PRE64_TCP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_SA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_SRC_PORT)},
+       {ETH_RSS_IPV6_PRE64_TCP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_SA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_DST_PORT)},
+       {ETH_RSS_IPV6_PRE64_TCP | ETH_RSS_L3_SRC_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_SA)},
+       {ETH_RSS_IPV6_PRE64_TCP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_DA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_SRC_PORT)},
+       {ETH_RSS_IPV6_PRE64_TCP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_DA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_DST_PORT)},
+       {ETH_RSS_IPV6_PRE64_TCP | ETH_RSS_L3_DST_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_DA)},
+       {ETH_RSS_IPV6_PRE64_TCP | ETH_RSS_L4_SRC_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_SRC_PORT)},
+       {ETH_RSS_IPV6_PRE64_TCP | ETH_RSS_L4_DST_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_TCP_DST_PORT)},
+       {ETH_RSS_IPV6_PRE64_TCP, ICE_HASH_TCP_IPV6_PRE64},
        {ETH_RSS_NONFRAG_IPV6_SCTP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
                BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_SA) |
                BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PROT) |
@@ -559,6 +820,69 @@ struct ice_hash_match_type ice_hash_type_list[] = {
        {ETH_RSS_NONFRAG_IPV6_SCTP,
                ICE_HASH_SCTP_IPV6 |
                BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PROT)},
+       {ETH_RSS_IPV6_PRE32_SCTP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE32_SA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_SRC_PORT)},
+       {ETH_RSS_IPV6_PRE32_SCTP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE32_SA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_DST_PORT)},
+       {ETH_RSS_IPV6_PRE32_SCTP | ETH_RSS_L3_SRC_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE32_SA)},
+       {ETH_RSS_IPV6_PRE32_SCTP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE32_DA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_SRC_PORT)},
+       {ETH_RSS_IPV6_PRE32_SCTP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE32_DA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_DST_PORT)},
+       {ETH_RSS_IPV6_PRE32_SCTP | ETH_RSS_L3_DST_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE32_DA)},
+       {ETH_RSS_IPV6_PRE32_SCTP | ETH_RSS_L4_SRC_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_SRC_PORT)},
+       {ETH_RSS_IPV6_PRE32_SCTP | ETH_RSS_L4_DST_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_DST_PORT)},
+       {ETH_RSS_IPV6_PRE32_SCTP, ICE_HASH_SCTP_IPV6_PRE32},
+       {ETH_RSS_IPV6_PRE48_SCTP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE48_SA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_SRC_PORT)},
+       {ETH_RSS_IPV6_PRE48_SCTP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE48_SA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_DST_PORT)},
+       {ETH_RSS_IPV6_PRE48_SCTP | ETH_RSS_L3_SRC_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE48_SA)},
+       {ETH_RSS_IPV6_PRE48_SCTP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE48_DA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_SRC_PORT)},
+       {ETH_RSS_IPV6_PRE48_SCTP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE48_DA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_DST_PORT)},
+       {ETH_RSS_IPV6_PRE48_SCTP | ETH_RSS_L3_DST_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE48_DA)},
+       {ETH_RSS_IPV6_PRE48_SCTP | ETH_RSS_L4_SRC_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_SRC_PORT)},
+       {ETH_RSS_IPV6_PRE48_SCTP | ETH_RSS_L4_DST_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_DST_PORT)},
+       {ETH_RSS_IPV6_PRE48_SCTP, ICE_HASH_SCTP_IPV6_PRE48},
+       {ETH_RSS_IPV6_PRE64_SCTP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_SRC_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_SA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_SRC_PORT)},
+       {ETH_RSS_IPV6_PRE64_SCTP | ETH_RSS_L3_SRC_ONLY | ETH_RSS_L4_DST_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_SA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_DST_PORT)},
+       {ETH_RSS_IPV6_PRE64_SCTP | ETH_RSS_L3_SRC_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_SA)},
+       {ETH_RSS_IPV6_PRE64_SCTP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_SRC_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_DA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_SRC_PORT)},
+       {ETH_RSS_IPV6_PRE64_SCTP | ETH_RSS_L3_DST_ONLY | ETH_RSS_L4_DST_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_DA) |
+               BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_DST_PORT)},
+       {ETH_RSS_IPV6_PRE64_SCTP | ETH_RSS_L3_DST_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_IPV6_PRE64_DA)},
+       {ETH_RSS_IPV6_PRE64_SCTP | ETH_RSS_L4_SRC_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_SRC_PORT)},
+       {ETH_RSS_IPV6_PRE64_SCTP | ETH_RSS_L4_DST_ONLY,
+               BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_DST_PORT)},
+       {ETH_RSS_IPV6_PRE64_SCTP, ICE_HASH_SCTP_IPV6_PRE64},
 };
 
 static struct ice_flow_engine ice_hash_engine = {
@@ -724,6 +1048,9 @@ ice_hash_parse_action(struct ice_pattern_match_item *pattern_match_item,
 
                        combine_type = ETH_RSS_L2_SRC_ONLY |
                                        ETH_RSS_L2_DST_ONLY |
+                                       RTE_ETH_RSS_L3_PRE32    |
+                                       RTE_ETH_RSS_L3_PRE48    |
+                                       RTE_ETH_RSS_L3_PRE64    |
                                        ETH_RSS_L3_SRC_ONLY |
                                        ETH_RSS_L3_DST_ONLY |
                                        ETH_RSS_L4_SRC_ONLY |