X-Git-Url: http://git.droids-corp.org/?p=dpdk.git;a=blobdiff_plain;f=drivers%2Fnet%2Fice%2Fice_ethdev.c;h=8d435e889202386924e430718d380dc18fefaf92;hp=84a0d8e0b371aaa64ab829e5c7a57bedfa931efe;hb=185fe122f4899f48569d0086c9dcacc431ef0967;hpb=e40a84ebedf3d8f6ea00f6c10d0fc885a8163d43 diff --git a/drivers/net/ice/ice_ethdev.c b/drivers/net/ice/ice_ethdev.c index 84a0d8e0b3..8d435e8892 100644 --- a/drivers/net/ice/ice_ethdev.c +++ b/drivers/net/ice/ice_ethdev.c @@ -2113,6 +2113,19 @@ ice_reset_fxp_resource(struct ice_hw *hw) return 0; } +static void +ice_rss_ctx_init(struct ice_pf *pf) +{ + ICE_HASH_CFG_RESET(&pf->gtpu_hash_ctx.ipv4); + ICE_HASH_CFG_RESET(&pf->gtpu_hash_ctx.ipv6); + + ICE_HASH_CFG_RESET(&pf->gtpu_hash_ctx.ipv4_udp); + ICE_HASH_CFG_RESET(&pf->gtpu_hash_ctx.ipv6_udp); + + ICE_HASH_CFG_RESET(&pf->gtpu_hash_ctx.ipv4_tcp); + ICE_HASH_CFG_RESET(&pf->gtpu_hash_ctx.ipv6_tcp); +} + static int ice_dev_init(struct rte_eth_dev *dev) { @@ -2244,6 +2257,9 @@ ice_dev_init(struct rte_eth_dev *dev) /* get base queue pairs index in the device */ ice_base_queue_get(pf); + /* Initialize RSS context for gtpu_eh */ + ice_rss_ctx_init(pf); + if (!ad->is_safe_mode) { ret = ice_flow_init(ad); if (ret) { @@ -2431,16 +2447,283 @@ ice_dev_uninit(struct rte_eth_dev *dev) return 0; } +static int +ice_add_rss_cfg_post(struct ice_pf *pf, uint32_t hdr, uint64_t fld, bool symm) +{ + struct ice_hw *hw = ICE_PF_TO_HW(pf); + struct ice_vsi *vsi = pf->main_vsi; + + if (hdr & ICE_FLOW_SEG_HDR_GTPU_EH) { + if ((hdr & ICE_FLOW_SEG_HDR_IPV4) && + (hdr & ICE_FLOW_SEG_HDR_UDP)) { + pf->gtpu_hash_ctx.ipv4_udp.pkt_hdr = hdr; + pf->gtpu_hash_ctx.ipv4_udp.hash_fld = fld; + pf->gtpu_hash_ctx.ipv4_udp.symm = symm; + } else if ((hdr & ICE_FLOW_SEG_HDR_IPV6) && + (hdr & ICE_FLOW_SEG_HDR_UDP)) { + pf->gtpu_hash_ctx.ipv6_udp.pkt_hdr = hdr; + pf->gtpu_hash_ctx.ipv6_udp.hash_fld = fld; + pf->gtpu_hash_ctx.ipv6_udp.symm = symm; + } else if ((hdr & ICE_FLOW_SEG_HDR_IPV4) && + (hdr & ICE_FLOW_SEG_HDR_TCP)) { + pf->gtpu_hash_ctx.ipv4_tcp.pkt_hdr = hdr; + pf->gtpu_hash_ctx.ipv4_tcp.hash_fld = fld; + pf->gtpu_hash_ctx.ipv4_tcp.symm = symm; + } else if ((hdr & ICE_FLOW_SEG_HDR_IPV6) && + (hdr & ICE_FLOW_SEG_HDR_TCP)) { + pf->gtpu_hash_ctx.ipv6_tcp.pkt_hdr = hdr; + pf->gtpu_hash_ctx.ipv6_tcp.hash_fld = fld; + pf->gtpu_hash_ctx.ipv6_tcp.symm = symm; + } else if (hdr & ICE_FLOW_SEG_HDR_IPV4) { + pf->gtpu_hash_ctx.ipv4.pkt_hdr = hdr; + pf->gtpu_hash_ctx.ipv4.hash_fld = fld; + pf->gtpu_hash_ctx.ipv4.symm = symm; + ICE_HASH_CFG_RESET(&pf->gtpu_hash_ctx.ipv4_udp); + ICE_HASH_CFG_RESET(&pf->gtpu_hash_ctx.ipv4_tcp); + } else if (hdr & ICE_FLOW_SEG_HDR_IPV6) { + pf->gtpu_hash_ctx.ipv6.pkt_hdr = hdr; + pf->gtpu_hash_ctx.ipv6.hash_fld = fld; + pf->gtpu_hash_ctx.ipv6.symm = symm; + ICE_HASH_CFG_RESET(&pf->gtpu_hash_ctx.ipv6_udp); + ICE_HASH_CFG_RESET(&pf->gtpu_hash_ctx.ipv6_tcp); + } + } + + if (hdr & (ICE_FLOW_SEG_HDR_GTPU_DWN | + ICE_FLOW_SEG_HDR_GTPU_UP)) { + if ((hdr & ICE_FLOW_SEG_HDR_IPV4) && + (hdr & ICE_FLOW_SEG_HDR_UDP)) { + if (ICE_HASH_CFG_IS_ROTATING(&pf->gtpu_hash_ctx.ipv4)) { + ice_add_rss_cfg(hw, vsi->idx, + pf->gtpu_hash_ctx.ipv4.hash_fld, + pf->gtpu_hash_ctx.ipv4.pkt_hdr, + pf->gtpu_hash_ctx.ipv4.symm); + ICE_HASH_CFG_ROTATE_STOP(&pf->gtpu_hash_ctx.ipv4); + } + } else if ((hdr & ICE_FLOW_SEG_HDR_IPV6) && + (hdr & ICE_FLOW_SEG_HDR_UDP)) { + if (ICE_HASH_CFG_IS_ROTATING(&pf->gtpu_hash_ctx.ipv6)) { + ice_add_rss_cfg(hw, vsi->idx, + pf->gtpu_hash_ctx.ipv6.hash_fld, + pf->gtpu_hash_ctx.ipv6.pkt_hdr, + pf->gtpu_hash_ctx.ipv6.symm); + ICE_HASH_CFG_ROTATE_STOP(&pf->gtpu_hash_ctx.ipv6); + } + } else if ((hdr & ICE_FLOW_SEG_HDR_IPV4) && + (hdr & ICE_FLOW_SEG_HDR_TCP)) { + if (ICE_HASH_CFG_IS_ROTATING(&pf->gtpu_hash_ctx.ipv4)) { + ice_add_rss_cfg(hw, vsi->idx, + pf->gtpu_hash_ctx.ipv4.hash_fld, + pf->gtpu_hash_ctx.ipv4.pkt_hdr, + pf->gtpu_hash_ctx.ipv4.symm); + ICE_HASH_CFG_ROTATE_STOP(&pf->gtpu_hash_ctx.ipv4); + } + } else if ((hdr & ICE_FLOW_SEG_HDR_IPV6) && + (hdr & ICE_FLOW_SEG_HDR_TCP)) { + if (ICE_HASH_CFG_IS_ROTATING(&pf->gtpu_hash_ctx.ipv6)) { + ice_add_rss_cfg(hw, vsi->idx, + pf->gtpu_hash_ctx.ipv6.hash_fld, + pf->gtpu_hash_ctx.ipv6.pkt_hdr, + pf->gtpu_hash_ctx.ipv6.symm); + ICE_HASH_CFG_ROTATE_STOP(&pf->gtpu_hash_ctx.ipv6); + } + } + } + + return 0; +} + +static int +ice_add_rss_cfg_pre(struct ice_pf *pf, uint32_t hdr) +{ + struct ice_hw *hw = ICE_PF_TO_HW(pf); + struct ice_vsi *vsi = pf->main_vsi; + + if (hdr & (ICE_FLOW_SEG_HDR_GTPU_DWN | + ICE_FLOW_SEG_HDR_GTPU_UP)) { + if ((hdr & ICE_FLOW_SEG_HDR_IPV4) && + (hdr & ICE_FLOW_SEG_HDR_UDP)) { + if (ICE_HASH_CFG_VALID(&pf->gtpu_hash_ctx.ipv4_udp)) { + ice_rem_rss_cfg(hw, vsi->idx, + pf->gtpu_hash_ctx.ipv4_udp.hash_fld, + pf->gtpu_hash_ctx.ipv4_udp.pkt_hdr); + ICE_HASH_CFG_RESET(&pf->gtpu_hash_ctx.ipv4_udp); + } + + if (ICE_HASH_CFG_VALID(&pf->gtpu_hash_ctx.ipv4)) { + ice_rem_rss_cfg(hw, vsi->idx, + pf->gtpu_hash_ctx.ipv4.hash_fld, + pf->gtpu_hash_ctx.ipv4.pkt_hdr); + ICE_HASH_CFG_ROTATE_START(&pf->gtpu_hash_ctx.ipv4); + } + } else if ((hdr & ICE_FLOW_SEG_HDR_IPV6) && + (hdr & ICE_FLOW_SEG_HDR_UDP)) { + if (ICE_HASH_CFG_VALID(&pf->gtpu_hash_ctx.ipv6_udp)) { + ice_rem_rss_cfg(hw, vsi->idx, + pf->gtpu_hash_ctx.ipv6_udp.hash_fld, + pf->gtpu_hash_ctx.ipv6_udp.pkt_hdr); + ICE_HASH_CFG_RESET(&pf->gtpu_hash_ctx.ipv6_udp); + } + + if (ICE_HASH_CFG_VALID(&pf->gtpu_hash_ctx.ipv6)) { + ice_rem_rss_cfg(hw, vsi->idx, + pf->gtpu_hash_ctx.ipv6.hash_fld, + pf->gtpu_hash_ctx.ipv6.pkt_hdr); + ICE_HASH_CFG_ROTATE_START(&pf->gtpu_hash_ctx.ipv6); + } + } else if ((hdr & ICE_FLOW_SEG_HDR_IPV4) && + (hdr & ICE_FLOW_SEG_HDR_TCP)) { + if (ICE_HASH_CFG_VALID(&pf->gtpu_hash_ctx.ipv4_tcp)) { + ice_rem_rss_cfg(hw, vsi->idx, + pf->gtpu_hash_ctx.ipv4_tcp.hash_fld, + pf->gtpu_hash_ctx.ipv4_tcp.pkt_hdr); + ICE_HASH_CFG_RESET(&pf->gtpu_hash_ctx.ipv4_tcp); + } + + if (ICE_HASH_CFG_VALID(&pf->gtpu_hash_ctx.ipv4)) { + ice_rem_rss_cfg(hw, vsi->idx, + pf->gtpu_hash_ctx.ipv4.hash_fld, + pf->gtpu_hash_ctx.ipv4.pkt_hdr); + ICE_HASH_CFG_ROTATE_START(&pf->gtpu_hash_ctx.ipv4); + } + } else if ((hdr & ICE_FLOW_SEG_HDR_IPV6) && + (hdr & ICE_FLOW_SEG_HDR_TCP)) { + if (ICE_HASH_CFG_VALID(&pf->gtpu_hash_ctx.ipv6_tcp)) { + ice_rem_rss_cfg(hw, vsi->idx, + pf->gtpu_hash_ctx.ipv6_tcp.hash_fld, + pf->gtpu_hash_ctx.ipv6_tcp.pkt_hdr); + ICE_HASH_CFG_RESET(&pf->gtpu_hash_ctx.ipv6_tcp); + } + + if (ICE_HASH_CFG_VALID(&pf->gtpu_hash_ctx.ipv6)) { + ice_rem_rss_cfg(hw, vsi->idx, + pf->gtpu_hash_ctx.ipv6.hash_fld, + pf->gtpu_hash_ctx.ipv6.pkt_hdr); + ICE_HASH_CFG_ROTATE_START(&pf->gtpu_hash_ctx.ipv6); + } + } else if (hdr & ICE_FLOW_SEG_HDR_IPV4) { + if (ICE_HASH_CFG_VALID(&pf->gtpu_hash_ctx.ipv4)) { + ice_rem_rss_cfg(hw, vsi->idx, + pf->gtpu_hash_ctx.ipv4.hash_fld, + pf->gtpu_hash_ctx.ipv4.pkt_hdr); + ICE_HASH_CFG_RESET(&pf->gtpu_hash_ctx.ipv4); + } + + if (ICE_HASH_CFG_VALID(&pf->gtpu_hash_ctx.ipv4_udp)) { + ice_rem_rss_cfg(hw, vsi->idx, + pf->gtpu_hash_ctx.ipv4_udp.hash_fld, + pf->gtpu_hash_ctx.ipv4_udp.pkt_hdr); + ICE_HASH_CFG_RESET(&pf->gtpu_hash_ctx.ipv4_udp); + } + + if (ICE_HASH_CFG_VALID(&pf->gtpu_hash_ctx.ipv4_tcp)) { + ice_rem_rss_cfg(hw, vsi->idx, + pf->gtpu_hash_ctx.ipv4_tcp.hash_fld, + pf->gtpu_hash_ctx.ipv4_tcp.pkt_hdr); + ICE_HASH_CFG_RESET(&pf->gtpu_hash_ctx.ipv4_tcp); + } + } else if (hdr & ICE_FLOW_SEG_HDR_IPV6) { + if (ICE_HASH_CFG_VALID(&pf->gtpu_hash_ctx.ipv6)) { + ice_rem_rss_cfg(hw, vsi->idx, + pf->gtpu_hash_ctx.ipv6.hash_fld, + pf->gtpu_hash_ctx.ipv6.pkt_hdr); + ICE_HASH_CFG_RESET(&pf->gtpu_hash_ctx.ipv6); + } + + if (ICE_HASH_CFG_VALID(&pf->gtpu_hash_ctx.ipv6_udp)) { + ice_rem_rss_cfg(hw, vsi->idx, + pf->gtpu_hash_ctx.ipv6_udp.hash_fld, + pf->gtpu_hash_ctx.ipv6_udp.pkt_hdr); + ICE_HASH_CFG_RESET(&pf->gtpu_hash_ctx.ipv6_udp); + } + + if (ICE_HASH_CFG_VALID(&pf->gtpu_hash_ctx.ipv6_tcp)) { + ice_rem_rss_cfg(hw, vsi->idx, + pf->gtpu_hash_ctx.ipv6_tcp.hash_fld, + pf->gtpu_hash_ctx.ipv6_tcp.pkt_hdr); + ICE_HASH_CFG_RESET(&pf->gtpu_hash_ctx.ipv6_tcp); + } + } + } + + return 0; +} + +static int +ice_rem_rss_cfg_post(struct ice_pf *pf, uint32_t hdr) +{ + if (hdr & ICE_FLOW_SEG_HDR_GTPU_EH) { + if ((hdr & ICE_FLOW_SEG_HDR_IPV4) && + (hdr & ICE_FLOW_SEG_HDR_UDP)) { + ICE_HASH_CFG_RESET(&pf->gtpu_hash_ctx.ipv4_udp); + } else if ((hdr & ICE_FLOW_SEG_HDR_IPV6) && + (hdr & ICE_FLOW_SEG_HDR_UDP)) { + ICE_HASH_CFG_RESET(&pf->gtpu_hash_ctx.ipv6_udp); + } else if ((hdr & ICE_FLOW_SEG_HDR_IPV4) && + (hdr & ICE_FLOW_SEG_HDR_TCP)) { + ICE_HASH_CFG_RESET(&pf->gtpu_hash_ctx.ipv4_tcp); + } else if ((hdr & ICE_FLOW_SEG_HDR_IPV6) && + (hdr & ICE_FLOW_SEG_HDR_TCP)) { + ICE_HASH_CFG_RESET(&pf->gtpu_hash_ctx.ipv6_tcp); + } else if (hdr & ICE_FLOW_SEG_HDR_IPV4) { + ICE_HASH_CFG_RESET(&pf->gtpu_hash_ctx.ipv4); + } else if (hdr & ICE_FLOW_SEG_HDR_IPV6) { + ICE_HASH_CFG_RESET(&pf->gtpu_hash_ctx.ipv6); + } + } + + return 0; +} + +int +ice_rem_rss_cfg_wrap(struct ice_pf *pf, uint16_t vsi_id, + uint64_t fld, uint32_t hdr) +{ + struct ice_hw *hw = ICE_PF_TO_HW(pf); + int ret; + + ret = ice_rem_rss_cfg(hw, vsi_id, fld, hdr); + if (ret && ret != ICE_ERR_DOES_NOT_EXIST) + PMD_DRV_LOG(ERR, "remove rss cfg failed\n"); + + ret = ice_rem_rss_cfg_post(pf, hdr); + if (ret) + PMD_DRV_LOG(ERR, "remove rss cfg post failed\n"); + + return 0; +} + +int +ice_add_rss_cfg_wrap(struct ice_pf *pf, uint16_t vsi_id, + uint64_t fld, uint32_t hdr, bool symm) +{ + struct ice_hw *hw = ICE_PF_TO_HW(pf); + int ret; + + ret = ice_add_rss_cfg_pre(pf, hdr); + if (ret) + PMD_DRV_LOG(ERR, "add rss cfg pre failed\n"); + + ret = ice_add_rss_cfg(hw, vsi_id, fld, hdr, symm); + if (ret) + PMD_DRV_LOG(ERR, "add rss cfg failed\n"); + + ret = ice_add_rss_cfg_post(pf, hdr, fld, symm); + if (ret) + PMD_DRV_LOG(ERR, "add rss cfg post failed\n"); + + return 0; +} + static void ice_rss_hash_set(struct ice_pf *pf, uint64_t rss_hf) { - struct ice_hw *hw = ICE_PF_TO_HW(pf); struct ice_vsi *vsi = pf->main_vsi; int ret; /* Configure RSS for IPv4 with src/dst addr as input set */ if (rss_hf & ETH_RSS_IPV4) { - ret = ice_add_rss_cfg(hw, vsi->idx, ICE_FLOW_HASH_IPV4, + ret = ice_add_rss_cfg_wrap(pf, vsi->idx, ICE_FLOW_HASH_IPV4, ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER, 0); if (ret) @@ -2450,7 +2733,7 @@ ice_rss_hash_set(struct ice_pf *pf, uint64_t rss_hf) /* Configure RSS for IPv6 with src/dst addr as input set */ if (rss_hf & ETH_RSS_IPV6) { - ret = ice_add_rss_cfg(hw, vsi->idx, ICE_FLOW_HASH_IPV6, + ret = ice_add_rss_cfg_wrap(pf, vsi->idx, ICE_FLOW_HASH_IPV6, ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER, 0); if (ret) @@ -2460,7 +2743,7 @@ ice_rss_hash_set(struct ice_pf *pf, uint64_t rss_hf) /* Configure RSS for udp4 with src/dst addr and port as input set */ if (rss_hf & ETH_RSS_NONFRAG_IPV4_UDP) { - ret = ice_add_rss_cfg(hw, vsi->idx, ICE_HASH_UDP_IPV4, + ret = ice_add_rss_cfg_wrap(pf, vsi->idx, ICE_HASH_UDP_IPV4, ICE_FLOW_SEG_HDR_UDP | ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER, 0); @@ -2471,7 +2754,7 @@ ice_rss_hash_set(struct ice_pf *pf, uint64_t rss_hf) /* Configure RSS for udp6 with src/dst addr and port as input set */ if (rss_hf & ETH_RSS_NONFRAG_IPV6_UDP) { - ret = ice_add_rss_cfg(hw, vsi->idx, ICE_HASH_UDP_IPV6, + ret = ice_add_rss_cfg_wrap(pf, vsi->idx, ICE_HASH_UDP_IPV6, ICE_FLOW_SEG_HDR_UDP | ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER, 0); @@ -2482,7 +2765,7 @@ ice_rss_hash_set(struct ice_pf *pf, uint64_t rss_hf) /* Configure RSS for tcp4 with src/dst addr and port as input set */ if (rss_hf & ETH_RSS_NONFRAG_IPV4_TCP) { - ret = ice_add_rss_cfg(hw, vsi->idx, ICE_HASH_TCP_IPV4, + ret = ice_add_rss_cfg_wrap(pf, vsi->idx, ICE_HASH_TCP_IPV4, ICE_FLOW_SEG_HDR_TCP | ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER, 0); @@ -2493,7 +2776,7 @@ ice_rss_hash_set(struct ice_pf *pf, uint64_t rss_hf) /* Configure RSS for tcp6 with src/dst addr and port as input set */ if (rss_hf & ETH_RSS_NONFRAG_IPV6_TCP) { - ret = ice_add_rss_cfg(hw, vsi->idx, ICE_HASH_TCP_IPV6, + ret = ice_add_rss_cfg_wrap(pf, vsi->idx, ICE_HASH_TCP_IPV6, ICE_FLOW_SEG_HDR_TCP | ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER, 0); @@ -2504,7 +2787,7 @@ ice_rss_hash_set(struct ice_pf *pf, uint64_t rss_hf) /* Configure RSS for sctp4 with src/dst addr and port as input set */ if (rss_hf & ETH_RSS_NONFRAG_IPV4_SCTP) { - ret = ice_add_rss_cfg(hw, vsi->idx, ICE_FLOW_HASH_IPV4, + ret = ice_add_rss_cfg_wrap(pf, vsi->idx, ICE_FLOW_HASH_IPV4, ICE_FLOW_SEG_HDR_SCTP | ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER, 0); @@ -2515,7 +2798,7 @@ ice_rss_hash_set(struct ice_pf *pf, uint64_t rss_hf) /* Configure RSS for sctp6 with src/dst addr and port as input set */ if (rss_hf & ETH_RSS_NONFRAG_IPV6_SCTP) { - ret = ice_add_rss_cfg(hw, vsi->idx, ICE_FLOW_HASH_IPV6, + ret = ice_add_rss_cfg_wrap(pf, vsi->idx, ICE_FLOW_HASH_IPV6, ICE_FLOW_SEG_HDR_SCTP | ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER, 0); @@ -2525,7 +2808,7 @@ ice_rss_hash_set(struct ice_pf *pf, uint64_t rss_hf) } if (rss_hf & ETH_RSS_IPV4) { - ret = ice_add_rss_cfg(hw, vsi->idx, ICE_FLOW_HASH_IPV4, + ret = ice_add_rss_cfg_wrap(pf, vsi->idx, ICE_FLOW_HASH_IPV4, ICE_FLOW_SEG_HDR_GTPU_IP | ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER, 0); @@ -2533,7 +2816,7 @@ ice_rss_hash_set(struct ice_pf *pf, uint64_t rss_hf) PMD_DRV_LOG(ERR, "%s GTPU_IPV4 rss flow fail %d", __func__, ret); - ret = ice_add_rss_cfg(hw, vsi->idx, ICE_FLOW_HASH_IPV4, + ret = ice_add_rss_cfg_wrap(pf, vsi->idx, ICE_FLOW_HASH_IPV4, ICE_FLOW_SEG_HDR_GTPU_EH | ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER, 0); @@ -2541,7 +2824,7 @@ ice_rss_hash_set(struct ice_pf *pf, uint64_t rss_hf) PMD_DRV_LOG(ERR, "%s GTPU_EH_IPV4 rss flow fail %d", __func__, ret); - ret = ice_add_rss_cfg(hw, vsi->idx, ICE_FLOW_HASH_IPV4, + ret = ice_add_rss_cfg_wrap(pf, vsi->idx, ICE_FLOW_HASH_IPV4, ICE_FLOW_SEG_HDR_PPPOE | ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER, 0); @@ -2551,7 +2834,7 @@ ice_rss_hash_set(struct ice_pf *pf, uint64_t rss_hf) } if (rss_hf & ETH_RSS_IPV6) { - ret = ice_add_rss_cfg(hw, vsi->idx, ICE_FLOW_HASH_IPV6, + ret = ice_add_rss_cfg_wrap(pf, vsi->idx, ICE_FLOW_HASH_IPV6, ICE_FLOW_SEG_HDR_GTPU_IP | ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER, 0); @@ -2559,7 +2842,7 @@ ice_rss_hash_set(struct ice_pf *pf, uint64_t rss_hf) PMD_DRV_LOG(ERR, "%s GTPU_IPV6 rss flow fail %d", __func__, ret); - ret = ice_add_rss_cfg(hw, vsi->idx, ICE_FLOW_HASH_IPV6, + ret = ice_add_rss_cfg_wrap(pf, vsi->idx, ICE_FLOW_HASH_IPV6, ICE_FLOW_SEG_HDR_GTPU_EH | ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER, 0); @@ -2567,7 +2850,7 @@ ice_rss_hash_set(struct ice_pf *pf, uint64_t rss_hf) PMD_DRV_LOG(ERR, "%s GTPU_EH_IPV6 rss flow fail %d", __func__, ret); - ret = ice_add_rss_cfg(hw, vsi->idx, ICE_FLOW_HASH_IPV6, + ret = ice_add_rss_cfg_wrap(pf, vsi->idx, ICE_FLOW_HASH_IPV6, ICE_FLOW_SEG_HDR_PPPOE | ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER, 0); @@ -2577,108 +2860,156 @@ ice_rss_hash_set(struct ice_pf *pf, uint64_t rss_hf) } if (rss_hf & ETH_RSS_NONFRAG_IPV4_UDP) { - ret = ice_add_rss_cfg(hw, vsi->idx, ICE_HASH_UDP_IPV4, - ICE_FLOW_SEG_HDR_GTPU_IP, 0); + ret = ice_add_rss_cfg_wrap(pf, vsi->idx, ICE_HASH_UDP_IPV4, + ICE_FLOW_SEG_HDR_GTPU_IP | + ICE_FLOW_SEG_HDR_UDP | + ICE_FLOW_SEG_HDR_IPV4 | + ICE_FLOW_SEG_HDR_IPV_OTHER, 0); if (ret) PMD_DRV_LOG(ERR, "%s GTPU_IPV4_UDP rss flow fail %d", __func__, ret); - ret = ice_add_rss_cfg(hw, vsi->idx, ICE_HASH_UDP_IPV4, - ICE_FLOW_SEG_HDR_GTPU_EH, 0); + ret = ice_add_rss_cfg_wrap(pf, vsi->idx, ICE_HASH_UDP_IPV4, + ICE_FLOW_SEG_HDR_GTPU_EH | + ICE_FLOW_SEG_HDR_UDP | + ICE_FLOW_SEG_HDR_IPV4 | + ICE_FLOW_SEG_HDR_IPV_OTHER, 0); if (ret) PMD_DRV_LOG(ERR, "%s GTPU_EH_IPV4_UDP rss flow fail %d", __func__, ret); - ret = ice_add_rss_cfg(hw, vsi->idx, ICE_HASH_UDP_IPV4, - ICE_FLOW_SEG_HDR_PPPOE, 0); + ret = ice_add_rss_cfg_wrap(pf, vsi->idx, ICE_HASH_UDP_IPV4, + ICE_FLOW_SEG_HDR_PPPOE | + ICE_FLOW_SEG_HDR_UDP | + ICE_FLOW_SEG_HDR_IPV4 | + ICE_FLOW_SEG_HDR_IPV_OTHER, 0); if (ret) PMD_DRV_LOG(ERR, "%s PPPoE_IPV4_UDP rss flow fail %d", __func__, ret); } if (rss_hf & ETH_RSS_NONFRAG_IPV6_UDP) { - ret = ice_add_rss_cfg(hw, vsi->idx, ICE_HASH_UDP_IPV6, - ICE_FLOW_SEG_HDR_GTPU_IP, 0); + ret = ice_add_rss_cfg_wrap(pf, vsi->idx, ICE_HASH_UDP_IPV6, + ICE_FLOW_SEG_HDR_GTPU_IP | + ICE_FLOW_SEG_HDR_UDP | + ICE_FLOW_SEG_HDR_IPV6 | + ICE_FLOW_SEG_HDR_IPV_OTHER, 0); if (ret) PMD_DRV_LOG(ERR, "%s GTPU_IPV6_UDP rss flow fail %d", __func__, ret); - ret = ice_add_rss_cfg(hw, vsi->idx, ICE_HASH_UDP_IPV6, - ICE_FLOW_SEG_HDR_GTPU_EH, 0); + ret = ice_add_rss_cfg_wrap(pf, vsi->idx, ICE_HASH_UDP_IPV6, + ICE_FLOW_SEG_HDR_GTPU_EH | + ICE_FLOW_SEG_HDR_UDP | + ICE_FLOW_SEG_HDR_IPV6 | + ICE_FLOW_SEG_HDR_IPV_OTHER, 0); if (ret) PMD_DRV_LOG(ERR, "%s GTPU_EH_IPV6_UDP rss flow fail %d", __func__, ret); - ret = ice_add_rss_cfg(hw, vsi->idx, ICE_HASH_UDP_IPV6, - ICE_FLOW_SEG_HDR_PPPOE, 0); + ret = ice_add_rss_cfg_wrap(pf, vsi->idx, ICE_HASH_UDP_IPV6, + ICE_FLOW_SEG_HDR_PPPOE | + ICE_FLOW_SEG_HDR_UDP | + ICE_FLOW_SEG_HDR_IPV6 | + ICE_FLOW_SEG_HDR_IPV_OTHER, 0); if (ret) PMD_DRV_LOG(ERR, "%s PPPoE_IPV6_UDP rss flow fail %d", __func__, ret); } if (rss_hf & ETH_RSS_NONFRAG_IPV4_TCP) { - ret = ice_add_rss_cfg(hw, vsi->idx, ICE_HASH_TCP_IPV4, - ICE_FLOW_SEG_HDR_GTPU_IP, 0); + ret = ice_add_rss_cfg_wrap(pf, vsi->idx, ICE_HASH_TCP_IPV4, + ICE_FLOW_SEG_HDR_GTPU_IP | + ICE_FLOW_SEG_HDR_TCP | + ICE_FLOW_SEG_HDR_IPV4 | + ICE_FLOW_SEG_HDR_IPV_OTHER, 0); if (ret) PMD_DRV_LOG(ERR, "%s GTPU_IPV4_TCP rss flow fail %d", __func__, ret); - ret = ice_add_rss_cfg(hw, vsi->idx, ICE_HASH_TCP_IPV4, - ICE_FLOW_SEG_HDR_GTPU_EH, 0); + ret = ice_add_rss_cfg_wrap(pf, vsi->idx, ICE_HASH_TCP_IPV4, + ICE_FLOW_SEG_HDR_GTPU_EH | + ICE_FLOW_SEG_HDR_TCP | + ICE_FLOW_SEG_HDR_IPV4 | + ICE_FLOW_SEG_HDR_IPV_OTHER, 0); if (ret) PMD_DRV_LOG(ERR, "%s GTPU_EH_IPV4_TCP rss flow fail %d", __func__, ret); - ret = ice_add_rss_cfg(hw, vsi->idx, ICE_HASH_TCP_IPV4, - ICE_FLOW_SEG_HDR_PPPOE, 0); + ret = ice_add_rss_cfg_wrap(pf, vsi->idx, ICE_HASH_TCP_IPV4, + ICE_FLOW_SEG_HDR_PPPOE | + ICE_FLOW_SEG_HDR_TCP | + ICE_FLOW_SEG_HDR_IPV4 | + ICE_FLOW_SEG_HDR_IPV_OTHER, 0); if (ret) PMD_DRV_LOG(ERR, "%s PPPoE_IPV4_TCP rss flow fail %d", __func__, ret); } if (rss_hf & ETH_RSS_NONFRAG_IPV6_TCP) { - ret = ice_add_rss_cfg(hw, vsi->idx, ICE_HASH_TCP_IPV6, - ICE_FLOW_SEG_HDR_GTPU_IP, 0); + ret = ice_add_rss_cfg_wrap(pf, vsi->idx, ICE_HASH_TCP_IPV6, + ICE_FLOW_SEG_HDR_GTPU_IP | + ICE_FLOW_SEG_HDR_TCP | + ICE_FLOW_SEG_HDR_IPV6 | + ICE_FLOW_SEG_HDR_IPV_OTHER, 0); if (ret) PMD_DRV_LOG(ERR, "%s GTPU_IPV6_TCP rss flow fail %d", __func__, ret); - ret = ice_add_rss_cfg(hw, vsi->idx, ICE_HASH_TCP_IPV6, - ICE_FLOW_SEG_HDR_GTPU_EH, 0); + ret = ice_add_rss_cfg_wrap(pf, vsi->idx, ICE_HASH_TCP_IPV6, + ICE_FLOW_SEG_HDR_GTPU_EH | + ICE_FLOW_SEG_HDR_TCP | + ICE_FLOW_SEG_HDR_IPV6 | + ICE_FLOW_SEG_HDR_IPV_OTHER, 0); if (ret) PMD_DRV_LOG(ERR, "%s GTPU_EH_IPV6_TCP rss flow fail %d", __func__, ret); - ret = ice_add_rss_cfg(hw, vsi->idx, ICE_HASH_TCP_IPV6, - ICE_FLOW_SEG_HDR_PPPOE, 0); + ret = ice_add_rss_cfg_wrap(pf, vsi->idx, ICE_HASH_TCP_IPV6, + ICE_FLOW_SEG_HDR_PPPOE | + ICE_FLOW_SEG_HDR_TCP | + ICE_FLOW_SEG_HDR_IPV6 | + ICE_FLOW_SEG_HDR_IPV_OTHER, 0); if (ret) PMD_DRV_LOG(ERR, "%s PPPoE_IPV6_TCP rss flow fail %d", __func__, ret); } if (rss_hf & ETH_RSS_NONFRAG_IPV4_SCTP) { - ret = ice_add_rss_cfg(hw, vsi->idx, ICE_HASH_SCTP_IPV4, - ICE_FLOW_SEG_HDR_GTPU_IP, 0); + ret = ice_add_rss_cfg_wrap(pf, vsi->idx, ICE_HASH_SCTP_IPV4, + ICE_FLOW_SEG_HDR_GTPU_IP | + ICE_FLOW_SEG_HDR_SCTP | + ICE_FLOW_SEG_HDR_IPV4 | + ICE_FLOW_SEG_HDR_IPV_OTHER, 0); if (ret) PMD_DRV_LOG(ERR, "%s GTPU_IPV4_SCTP rss flow fail %d", __func__, ret); - ret = ice_add_rss_cfg(hw, vsi->idx, ICE_HASH_SCTP_IPV4, - ICE_FLOW_SEG_HDR_GTPU_EH, 0); + ret = ice_add_rss_cfg_wrap(pf, vsi->idx, ICE_HASH_SCTP_IPV4, + ICE_FLOW_SEG_HDR_GTPU_EH | + ICE_FLOW_SEG_HDR_SCTP | + ICE_FLOW_SEG_HDR_IPV4 | + ICE_FLOW_SEG_HDR_IPV_OTHER, 0); if (ret) PMD_DRV_LOG(ERR, "%s GTPU_EH_IPV4_SCTP rss flow fail %d", __func__, ret); } if (rss_hf & ETH_RSS_NONFRAG_IPV6_SCTP) { - ret = ice_add_rss_cfg(hw, vsi->idx, ICE_HASH_SCTP_IPV6, - ICE_FLOW_SEG_HDR_GTPU_IP, 0); + ret = ice_add_rss_cfg_wrap(pf, vsi->idx, ICE_HASH_SCTP_IPV6, + ICE_FLOW_SEG_HDR_GTPU_IP | + ICE_FLOW_SEG_HDR_SCTP | + ICE_FLOW_SEG_HDR_IPV6 | + ICE_FLOW_SEG_HDR_IPV_OTHER, 0); if (ret) PMD_DRV_LOG(ERR, "%s GTPU_IPV6_SCTP rss flow fail %d", __func__, ret); - ret = ice_add_rss_cfg(hw, vsi->idx, ICE_HASH_SCTP_IPV6, - ICE_FLOW_SEG_HDR_GTPU_EH, 0); + ret = ice_add_rss_cfg_wrap(pf, vsi->idx, ICE_HASH_SCTP_IPV6, + ICE_FLOW_SEG_HDR_GTPU_EH | + ICE_FLOW_SEG_HDR_SCTP | + ICE_FLOW_SEG_HDR_IPV6 | + ICE_FLOW_SEG_HDR_IPV_OTHER, 0); if (ret) PMD_DRV_LOG(ERR, "%s GTPU_EH_IPV6_SCTP rss flow fail %d", __func__, ret);