net/mlx5: fix IPIP multi-tunnel validation
[dpdk.git] / drivers / net / ice / ice_ethdev.c
index da9e85b..09e3859 100644 (file)
@@ -2055,7 +2055,6 @@ ice_dev_init(struct rte_eth_dev *dev)
        intr_handle = &pci_dev->intr_handle;
 
        pf->adapter = ICE_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private);
-       pf->adapter->eth_dev = dev;
        pf->dev_data = dev->data;
        hw->back = pf->adapter;
        hw->hw_addr = (uint8_t *)pci_dev->mem_resource[0].addr;
@@ -2218,7 +2217,7 @@ ice_release_vsi(struct ice_vsi *vsi)
 void
 ice_vsi_disable_queues_intr(struct ice_vsi *vsi)
 {
-       struct rte_eth_dev *dev = vsi->adapter->eth_dev;
+       struct rte_eth_dev *dev = &rte_eth_devices[vsi->adapter->pf.dev_data->port_id];
        struct rte_pci_device *pci_dev = ICE_DEV_TO_PCI(dev);
        struct rte_intr_handle *intr_handle = &pci_dev->intr_handle;
        struct ice_hw *hw = ICE_VSI_TO_HW(vsi);
@@ -2928,23 +2927,9 @@ ice_rss_hash_set(struct ice_pf *pf, uint64_t rss_hf)
        }
 
        if (rss_hf & ETH_RSS_IPV4) {
-               cfg.addl_hdrs = ICE_FLOW_SEG_HDR_GTPU_IP | ICE_FLOW_SEG_HDR_IPV4 |
-                               ICE_FLOW_SEG_HDR_IPV_OTHER;
-               cfg.hash_flds = ICE_FLOW_HASH_IPV4;
-               ret = ice_add_rss_cfg_wrap(pf, vsi->idx, &cfg);
-               if (ret)
-                       PMD_DRV_LOG(ERR, "%s GTPU_IPV4 rss flow fail %d",
-                                   __func__, ret);
-
-               cfg.addl_hdrs = ICE_FLOW_SEG_HDR_GTPU_EH | ICE_FLOW_SEG_HDR_IPV4 |
-                               ICE_FLOW_SEG_HDR_IPV_OTHER;
-               ret = ice_add_rss_cfg_wrap(pf, vsi->idx, &cfg);
-               if (ret)
-                       PMD_DRV_LOG(ERR, "%s GTPU_EH_IPV4 rss flow fail %d",
-                                   __func__, ret);
-
                cfg.addl_hdrs = ICE_FLOW_SEG_HDR_PPPOE | ICE_FLOW_SEG_HDR_IPV4 |
                                ICE_FLOW_SEG_HDR_IPV_OTHER;
+               cfg.hash_flds = ICE_FLOW_HASH_IPV4;
                ret = ice_add_rss_cfg_wrap(pf, vsi->idx, &cfg);
                if (ret)
                        PMD_DRV_LOG(ERR, "%s PPPoE_IPV4 rss flow fail %d",
@@ -2952,23 +2937,9 @@ ice_rss_hash_set(struct ice_pf *pf, uint64_t rss_hf)
        }
 
        if (rss_hf & ETH_RSS_IPV6) {
-               cfg.addl_hdrs = ICE_FLOW_SEG_HDR_GTPU_IP | ICE_FLOW_SEG_HDR_IPV6 |
-                               ICE_FLOW_SEG_HDR_IPV_OTHER;
-               cfg.hash_flds = ICE_FLOW_HASH_IPV6;
-               ret = ice_add_rss_cfg_wrap(pf, vsi->idx, &cfg);
-               if (ret)
-                       PMD_DRV_LOG(ERR, "%s GTPU_IPV6 rss flow fail %d",
-                                   __func__, ret);
-
-               cfg.addl_hdrs = ICE_FLOW_SEG_HDR_GTPU_EH | ICE_FLOW_SEG_HDR_IPV6 |
-                               ICE_FLOW_SEG_HDR_IPV_OTHER;
-               ret = ice_add_rss_cfg_wrap(pf, vsi->idx, &cfg);
-               if (ret)
-                       PMD_DRV_LOG(ERR, "%s GTPU_EH_IPV6 rss flow fail %d",
-                                   __func__, ret);
-
                cfg.addl_hdrs = ICE_FLOW_SEG_HDR_PPPOE | ICE_FLOW_SEG_HDR_IPV6 |
                                ICE_FLOW_SEG_HDR_IPV_OTHER;
+               cfg.hash_flds = ICE_FLOW_HASH_IPV6;
                ret = ice_add_rss_cfg_wrap(pf, vsi->idx, &cfg);
                if (ret)
                        PMD_DRV_LOG(ERR, "%s PPPoE_IPV6 rss flow fail %d",
@@ -2976,23 +2947,9 @@ ice_rss_hash_set(struct ice_pf *pf, uint64_t rss_hf)
        }
 
        if (rss_hf & ETH_RSS_NONFRAG_IPV4_UDP) {
-               cfg.addl_hdrs = ICE_FLOW_SEG_HDR_GTPU_IP | ICE_FLOW_SEG_HDR_UDP |
-                               ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER;
-               cfg.hash_flds = ICE_HASH_UDP_IPV4;
-               ret = ice_add_rss_cfg_wrap(pf, vsi->idx, &cfg);
-               if (ret)
-                       PMD_DRV_LOG(ERR, "%s GTPU_IPV4_UDP rss flow fail %d",
-                                   __func__, ret);
-
-               cfg.addl_hdrs = ICE_FLOW_SEG_HDR_GTPU_EH | ICE_FLOW_SEG_HDR_UDP |
-                               ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER;
-               ret = ice_add_rss_cfg_wrap(pf, vsi->idx, &cfg);
-               if (ret)
-                       PMD_DRV_LOG(ERR, "%s GTPU_EH_IPV4_UDP rss flow fail %d",
-                                   __func__, ret);
-
                cfg.addl_hdrs = ICE_FLOW_SEG_HDR_PPPOE | ICE_FLOW_SEG_HDR_UDP |
                                ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER;
+               cfg.hash_flds = ICE_HASH_UDP_IPV4;
                ret = ice_add_rss_cfg_wrap(pf, vsi->idx, &cfg);
                if (ret)
                        PMD_DRV_LOG(ERR, "%s PPPoE_IPV4_UDP rss flow fail %d",
@@ -3000,23 +2957,9 @@ ice_rss_hash_set(struct ice_pf *pf, uint64_t rss_hf)
        }
 
        if (rss_hf & ETH_RSS_NONFRAG_IPV6_UDP) {
-               cfg.addl_hdrs = ICE_FLOW_SEG_HDR_GTPU_IP | ICE_FLOW_SEG_HDR_UDP |
-                               ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER;
-               cfg.hash_flds = ICE_HASH_UDP_IPV6;
-               ret = ice_add_rss_cfg_wrap(pf, vsi->idx, &cfg);
-               if (ret)
-                       PMD_DRV_LOG(ERR, "%s GTPU_IPV6_UDP rss flow fail %d",
-                                   __func__, ret);
-
-               cfg.addl_hdrs = ICE_FLOW_SEG_HDR_GTPU_EH | ICE_FLOW_SEG_HDR_UDP |
-                               ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER;
-               ret = ice_add_rss_cfg_wrap(pf, vsi->idx, &cfg);
-               if (ret)
-                       PMD_DRV_LOG(ERR, "%s GTPU_EH_IPV6_UDP rss flow fail %d",
-                                   __func__, ret);
-
                cfg.addl_hdrs = ICE_FLOW_SEG_HDR_PPPOE | ICE_FLOW_SEG_HDR_UDP |
                                ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER;
+               cfg.hash_flds = ICE_HASH_UDP_IPV6;
                ret = ice_add_rss_cfg_wrap(pf, vsi->idx, &cfg);
                if (ret)
                        PMD_DRV_LOG(ERR, "%s PPPoE_IPV6_UDP rss flow fail %d",
@@ -3024,23 +2967,9 @@ ice_rss_hash_set(struct ice_pf *pf, uint64_t rss_hf)
        }
 
        if (rss_hf & ETH_RSS_NONFRAG_IPV4_TCP) {
-               cfg.addl_hdrs = ICE_FLOW_SEG_HDR_GTPU_IP | ICE_FLOW_SEG_HDR_TCP |
-                               ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER;
-               cfg.hash_flds = ICE_HASH_TCP_IPV4;
-               ret = ice_add_rss_cfg_wrap(pf, vsi->idx, &cfg);
-               if (ret)
-                       PMD_DRV_LOG(ERR, "%s GTPU_IPV4_TCP rss flow fail %d",
-                                   __func__, ret);
-
-               cfg.addl_hdrs = ICE_FLOW_SEG_HDR_GTPU_EH | ICE_FLOW_SEG_HDR_TCP |
-                               ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER;
-               ret = ice_add_rss_cfg_wrap(pf, vsi->idx, &cfg);
-               if (ret)
-                       PMD_DRV_LOG(ERR, "%s GTPU_EH_IPV4_TCP rss flow fail %d",
-                                   __func__, ret);
-
                cfg.addl_hdrs = ICE_FLOW_SEG_HDR_PPPOE | ICE_FLOW_SEG_HDR_TCP |
                                ICE_FLOW_SEG_HDR_IPV4 | ICE_FLOW_SEG_HDR_IPV_OTHER;
+               cfg.hash_flds = ICE_HASH_TCP_IPV4;
                ret = ice_add_rss_cfg_wrap(pf, vsi->idx, &cfg);
                if (ret)
                        PMD_DRV_LOG(ERR, "%s PPPoE_IPV4_TCP rss flow fail %d",
@@ -3048,23 +2977,9 @@ ice_rss_hash_set(struct ice_pf *pf, uint64_t rss_hf)
        }
 
        if (rss_hf & ETH_RSS_NONFRAG_IPV6_TCP) {
-               cfg.addl_hdrs = ICE_FLOW_SEG_HDR_GTPU_IP | ICE_FLOW_SEG_HDR_TCP |
-                               ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER;
-               cfg.hash_flds = ICE_HASH_TCP_IPV6;
-               ret = ice_add_rss_cfg_wrap(pf, vsi->idx, &cfg);
-               if (ret)
-                       PMD_DRV_LOG(ERR, "%s GTPU_IPV6_TCP rss flow fail %d",
-                                   __func__, ret);
-
-               cfg.addl_hdrs = ICE_FLOW_SEG_HDR_GTPU_EH | ICE_FLOW_SEG_HDR_TCP |
-                               ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER;
-               ret = ice_add_rss_cfg_wrap(pf, vsi->idx, &cfg);
-               if (ret)
-                       PMD_DRV_LOG(ERR, "%s GTPU_EH_IPV6_TCP rss flow fail %d",
-                                   __func__, ret);
-
                cfg.addl_hdrs = ICE_FLOW_SEG_HDR_PPPOE | ICE_FLOW_SEG_HDR_TCP |
                                ICE_FLOW_SEG_HDR_IPV6 | ICE_FLOW_SEG_HDR_IPV_OTHER;
+               cfg.hash_flds = ICE_HASH_TCP_IPV6;
                ret = ice_add_rss_cfg_wrap(pf, vsi->idx, &cfg);
                if (ret)
                        PMD_DRV_LOG(ERR, "%s PPPoE_IPV6_TCP rss flow fail %d",
@@ -3074,11 +2989,36 @@ ice_rss_hash_set(struct ice_pf *pf, uint64_t rss_hf)
        pf->rss_hf = rss_hf & ICE_RSS_HF_ALL;
 }
 
+static void
+ice_get_default_rss_key(uint8_t *rss_key, uint32_t rss_key_size)
+{
+       static struct ice_aqc_get_set_rss_keys default_key;
+       static bool default_key_done;
+       uint8_t *key = (uint8_t *)&default_key;
+       size_t i;
+
+       if (rss_key_size > sizeof(default_key)) {
+               PMD_DRV_LOG(WARNING,
+                           "requested size %u is larger than default %zu, "
+                           "only %zu bytes are gotten for key\n",
+                           rss_key_size, sizeof(default_key),
+                           sizeof(default_key));
+       }
+
+       if (!default_key_done) {
+               /* Calculate the default hash key */
+               for (i = 0; i < sizeof(default_key); i++)
+                       key[i] = (uint8_t)rte_rand();
+               default_key_done = true;
+       }
+       rte_memcpy(rss_key, key, RTE_MIN(rss_key_size, sizeof(default_key)));
+}
+
 static int ice_init_rss(struct ice_pf *pf)
 {
        struct ice_hw *hw = ICE_PF_TO_HW(pf);
        struct ice_vsi *vsi = pf->main_vsi;
-       struct rte_eth_dev *dev = pf->adapter->eth_dev;
+       struct rte_eth_dev_data *dev_data = pf->dev_data;
        struct ice_aq_get_set_rss_lut_params lut_params;
        struct rte_eth_rss_conf *rss_conf;
        struct ice_aqc_get_set_rss_keys key;
@@ -3087,8 +3027,8 @@ static int ice_init_rss(struct ice_pf *pf)
        bool is_safe_mode = pf->adapter->is_safe_mode;
        uint32_t reg;
 
-       rss_conf = &dev->data->dev_conf.rx_adv_conf.rss_conf;
-       nb_q = dev->data->nb_rx_queues;
+       rss_conf = &dev_data->dev_conf.rx_adv_conf.rss_conf;
+       nb_q = dev_data->nb_rx_queues;
        vsi->rss_key_size = ICE_AQC_GET_SET_RSS_KEY_DATA_RSS_KEY_SIZE;
        vsi->rss_lut_size = pf->hash_lut_size;
 
@@ -3122,15 +3062,13 @@ static int ice_init_rss(struct ice_pf *pf)
                }
        }
        /* configure RSS key */
-       if (!rss_conf->rss_key) {
-               /* Calculate the default hash key */
-               for (i = 0; i <= vsi->rss_key_size; i++)
-                       vsi->rss_key[i] = (uint8_t)rte_rand();
-       } else {
+       if (!rss_conf->rss_key)
+               ice_get_default_rss_key(vsi->rss_key, vsi->rss_key_size);
+       else
                rte_memcpy(vsi->rss_key, rss_conf->rss_key,
                           RTE_MIN(rss_conf->rss_key_len,
                                   vsi->rss_key_size));
-       }
+
        rte_memcpy(key.standard_rss_key, vsi->rss_key, vsi->rss_key_size);
        ret = ice_aq_set_rss_key(hw, vsi->idx, &key);
        if (ret)
@@ -3222,7 +3160,7 @@ __vsi_queues_bind_intr(struct ice_vsi *vsi, uint16_t msix_vect,
 void
 ice_vsi_queues_bind_intr(struct ice_vsi *vsi)
 {
-       struct rte_eth_dev *dev = vsi->adapter->eth_dev;
+       struct rte_eth_dev *dev = &rte_eth_devices[vsi->adapter->pf.dev_data->port_id];
        struct rte_pci_device *pci_dev = ICE_DEV_TO_PCI(dev);
        struct rte_intr_handle *intr_handle = &pci_dev->intr_handle;
        struct ice_hw *hw = ICE_VSI_TO_HW(vsi);
@@ -3275,7 +3213,7 @@ ice_vsi_queues_bind_intr(struct ice_vsi *vsi)
 void
 ice_vsi_enable_queues_intr(struct ice_vsi *vsi)
 {
-       struct rte_eth_dev *dev = vsi->adapter->eth_dev;
+       struct rte_eth_dev *dev = &rte_eth_devices[vsi->adapter->pf.dev_data->port_id];
        struct rte_pci_device *pci_dev = ICE_DEV_TO_PCI(dev);
        struct rte_intr_handle *intr_handle = &pci_dev->intr_handle;
        struct ice_hw *hw = ICE_VSI_TO_HW(vsi);
@@ -3539,7 +3477,7 @@ ice_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
        }
 
        dev_info->rx_queue_offload_capa = 0;
-       dev_info->tx_queue_offload_capa = 0;
+       dev_info->tx_queue_offload_capa = DEV_TX_OFFLOAD_MBUF_FAST_FREE;
 
        dev_info->reta_size = pf->hash_lut_size;
        dev_info->hash_key_size = (VSIQF_HKEY_MAX_INDEX + 1) * sizeof(uint32_t);
@@ -4646,10 +4584,12 @@ ice_fw_version_get(struct rte_eth_dev *dev, char *fw_version, size_t fw_size)
                        hw->flash.nvm.minor,
                        hw->flash.nvm.eetrack,
                        ver, build, patch);
+       if (ret < 0)
+               return -EINVAL;
 
        /* add the size of '\0' */
        ret += 1;
-       if (fw_size < (u32)ret)
+       if (fw_size < (size_t)ret)
                return ret;
        else
                return 0;
@@ -5370,11 +5310,11 @@ RTE_PMD_REGISTER_PARAM_STRING(net_ice,
                              ICE_SAFE_MODE_SUPPORT_ARG "=<0|1>"
                              ICE_PIPELINE_MODE_SUPPORT_ARG "=<0|1>");
 
-RTE_LOG_REGISTER(ice_logtype_init, pmd.net.ice.init, NOTICE);
-RTE_LOG_REGISTER(ice_logtype_driver, pmd.net.ice.driver, NOTICE);
+RTE_LOG_REGISTER_SUFFIX(ice_logtype_init, init, NOTICE);
+RTE_LOG_REGISTER_SUFFIX(ice_logtype_driver, driver, NOTICE);
 #ifdef RTE_ETHDEV_DEBUG_RX
-RTE_LOG_REGISTER(ice_logtype_rx, pmd.net.ice.rx, DEBUG);
+RTE_LOG_REGISTER_SUFFIX(ice_logtype_rx, rx, DEBUG);
 #endif
 #ifdef RTE_ETHDEV_DEBUG_TX
-RTE_LOG_REGISTER(ice_logtype_tx, pmd.net.ice.tx, DEBUG);
+RTE_LOG_REGISTER_SUFFIX(ice_logtype_tx, tx, DEBUG);
 #endif