net/ice/base: reset capabilities before parsing
[dpdk.git] / drivers / net / ice / ice_ethdev.c
index 6b344cb..d5110c4 100644 (file)
@@ -67,15 +67,8 @@ static struct proto_xtr_ol_flag ice_proto_xtr_ol_flag_params[] = {
 
 #define ICE_DFLT_OUTER_TAG_TYPE ICE_AQ_VSI_OUTER_TAG_VLAN_9100
 
-/* DDP package search path */
-#define ICE_PKG_FILE_DEFAULT "/lib/firmware/intel/ice/ddp/ice.pkg"
-#define ICE_PKG_FILE_UPDATES "/lib/firmware/updates/intel/ice/ddp/ice.pkg"
-#define ICE_PKG_FILE_SEARCH_PATH_DEFAULT "/lib/firmware/intel/ice/ddp/"
-#define ICE_PKG_FILE_SEARCH_PATH_UPDATES "/lib/firmware/updates/intel/ice/ddp/"
-
 #define ICE_OS_DEFAULT_PKG_NAME                "ICE OS Default Package"
 #define ICE_COMMS_PKG_NAME                     "ICE COMMS Package"
-#define ICE_MAX_PKG_FILENAME_SIZE   256
 #define ICE_MAX_RES_DESC_NUM        1024
 
 int ice_logtype_init;
@@ -163,11 +156,11 @@ static const struct rte_pci_id pci_id_ice_map[] = {
        { RTE_PCI_DEVICE(ICE_INTEL_VENDOR_ID, ICE_DEV_ID_E810_XXV_BACKPLANE) },
        { RTE_PCI_DEVICE(ICE_INTEL_VENDOR_ID, ICE_DEV_ID_E810_XXV_QSFP) },
        { RTE_PCI_DEVICE(ICE_INTEL_VENDOR_ID, ICE_DEV_ID_E810_XXV_SFP) },
-       { RTE_PCI_DEVICE(ICE_INTEL_VENDOR_ID, ICE_DEV_ID_C822N_BACKPLANE) },
-       { RTE_PCI_DEVICE(ICE_INTEL_VENDOR_ID, ICE_DEV_ID_C822N_QSFP) },
-       { RTE_PCI_DEVICE(ICE_INTEL_VENDOR_ID, ICE_DEV_ID_C822N_SFP) },
-       { RTE_PCI_DEVICE(ICE_INTEL_VENDOR_ID, ICE_DEV_ID_C822N_10G_BASE_T) },
-       { RTE_PCI_DEVICE(ICE_INTEL_VENDOR_ID, ICE_DEV_ID_C822N_SGMII) },
+       { RTE_PCI_DEVICE(ICE_INTEL_VENDOR_ID, ICE_DEV_ID_E822C_BACKPLANE) },
+       { RTE_PCI_DEVICE(ICE_INTEL_VENDOR_ID, ICE_DEV_ID_E822C_QSFP) },
+       { RTE_PCI_DEVICE(ICE_INTEL_VENDOR_ID, ICE_DEV_ID_E822C_SFP) },
+       { RTE_PCI_DEVICE(ICE_INTEL_VENDOR_ID, ICE_DEV_ID_E822C_10G_BASE_T) },
+       { RTE_PCI_DEVICE(ICE_INTEL_VENDOR_ID, ICE_DEV_ID_E822C_SGMII) },
        { .vendor_id = 0, /* sentinel */ },
 };
 
@@ -225,6 +218,7 @@ static const struct eth_dev_ops ice_eth_dev_ops = {
        .filter_ctrl                  = ice_dev_filter_ctrl,
        .udp_tunnel_port_add          = ice_dev_udp_tunnel_port_add,
        .udp_tunnel_port_del          = ice_dev_udp_tunnel_port_del,
+       .tx_done_cleanup              = ice_tx_done_cleanup,
 };
 
 /* store statistics names and its offset in stats structure */
@@ -1719,7 +1713,7 @@ ice_pf_setup(struct ice_pf *pf)
        uint16_t unused;
 
        /* Clear all stats counters */
-       pf->offset_loaded = FALSE;
+       pf->offset_loaded = false;
        memset(&pf->stats, 0, sizeof(struct ice_hw_port_stats));
        memset(&pf->stats_offset, 0, sizeof(struct ice_hw_port_stats));
        memset(&pf->internal_stats, 0, sizeof(struct ice_eth_stats));
@@ -1832,7 +1826,7 @@ fail_dsn:
        return 0;
 }
 
-static enum ice_pkg_type
+enum ice_pkg_type
 ice_load_pkg_type(struct ice_hw *hw)
 {
        enum ice_pkg_type package_type;
@@ -2233,16 +2227,16 @@ ice_dev_init(struct rte_eth_dev *dev)
        vsi = pf->main_vsi;
 
        /* Disable double vlan by default */
-       ice_vsi_config_double_vlan(vsi, FALSE);
+       ice_vsi_config_double_vlan(vsi, false);
 
-       ret = ice_aq_stop_lldp(hw, TRUE, FALSE, NULL);
+       ret = ice_aq_stop_lldp(hw, true, false, NULL);
        if (ret != ICE_SUCCESS)
                PMD_INIT_LOG(DEBUG, "lldp has already stopped\n");
-       ret = ice_init_dcb(hw, TRUE);
+       ret = ice_init_dcb(hw, true);
        if (ret != ICE_SUCCESS)
                PMD_INIT_LOG(DEBUG, "Failed to init DCB\n");
        /* Forward LLDP packets to default VSI */
-       ret = ice_vsi_config_sw_lldp(vsi, TRUE);
+       ret = ice_vsi_config_sw_lldp(vsi, true);
        if (ret != ICE_SUCCESS)
                PMD_INIT_LOG(DEBUG, "Failed to cfg lldp\n");
        /* register callback func to eal lib */
@@ -2369,9 +2363,6 @@ ice_dev_stop(struct rte_eth_dev *dev)
        /* disable all queue interrupts */
        ice_vsi_disable_queues_intr(main_vsi);
 
-       /* Clear all queues and release mbufs */
-       ice_clear_queues(dev);
-
        if (pf->init_link_up)
                ice_dev_set_link_up(dev);
        else
@@ -2445,24 +2436,6 @@ ice_dev_uninit(struct rte_eth_dev *dev)
        return 0;
 }
 
-static int
-ice_dev_configure(struct rte_eth_dev *dev)
-{
-       struct ice_adapter *ad =
-               ICE_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private);
-
-       /* Initialize to TRUE. If any of Rx queues doesn't meet the
-        * bulk allocation or vector Rx preconditions we will reset it.
-        */
-       ad->rx_bulk_alloc_allowed = true;
-       ad->tx_simple_allowed = true;
-
-       if (dev->data->dev_conf.rxmode.mq_mode & ETH_MQ_RX_RSS_FLAG)
-               dev->data->dev_conf.rxmode.offloads |= DEV_RX_OFFLOAD_RSS_HASH;
-
-       return 0;
-}
-
 static int ice_init_rss(struct ice_pf *pf)
 {
        struct ice_hw *hw = ICE_PF_TO_HW(pf);
@@ -2593,6 +2566,32 @@ static int ice_init_rss(struct ice_pf *pf)
        return 0;
 }
 
+static int
+ice_dev_configure(struct rte_eth_dev *dev)
+{
+       struct ice_adapter *ad =
+               ICE_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private);
+       struct ice_pf *pf = ICE_DEV_PRIVATE_TO_PF(dev->data->dev_private);
+       int ret;
+
+       /* Initialize to TRUE. If any of Rx queues doesn't meet the
+        * bulk allocation or vector Rx preconditions we will reset it.
+        */
+       ad->rx_bulk_alloc_allowed = true;
+       ad->tx_simple_allowed = true;
+
+       if (dev->data->dev_conf.rxmode.mq_mode & ETH_MQ_RX_RSS_FLAG)
+               dev->data->dev_conf.rxmode.offloads |= DEV_RX_OFFLOAD_RSS_HASH;
+
+       ret = ice_init_rss(pf);
+       if (ret) {
+               PMD_DRV_LOG(ERR, "Failed to enable rss for PF");
+               return ret;
+       }
+
+       return 0;
+}
+
 static void
 __vsi_queues_bind_intr(struct ice_vsi *vsi, uint16_t msix_vect,
                       int base_queue, int nb_queue)
@@ -2604,9 +2603,9 @@ __vsi_queues_bind_intr(struct ice_vsi *vsi, uint16_t msix_vect,
        for (i = 0; i < nb_queue; i++) {
                /*do actual bind*/
                val = (msix_vect & QINT_RQCTL_MSIX_INDX_M) |
-                     (0 < QINT_RQCTL_ITR_INDX_S) | QINT_RQCTL_CAUSE_ENA_M;
+                     (0 << QINT_RQCTL_ITR_INDX_S) | QINT_RQCTL_CAUSE_ENA_M;
                val_tx = (msix_vect & QINT_TQCTL_MSIX_INDX_M) |
-                        (0 < QINT_TQCTL_ITR_INDX_S) | QINT_TQCTL_CAUSE_ENA_M;
+                        (0 << QINT_TQCTL_ITR_INDX_S) | QINT_TQCTL_CAUSE_ENA_M;
 
                PMD_DRV_LOG(INFO, "queue %d is binding to vect %d",
                            base_queue + i, msix_vect);
@@ -2796,12 +2795,6 @@ ice_dev_start(struct rte_eth_dev *dev)
                }
        }
 
-       ret = ice_init_rss(pf);
-       if (ret) {
-               PMD_DRV_LOG(ERR, "Failed to enable rss for PF");
-               goto rx_err;
-       }
-
        ice_set_rx_function(dev);
        ice_set_tx_function(dev);
 
@@ -3172,7 +3165,7 @@ ice_force_phys_link_state(struct ice_hw *hw, bool link_up)
        cfg.phy_type_low = pcaps->phy_type_low;
        cfg.phy_type_high = pcaps->phy_type_high;
        cfg.caps = pcaps->caps | ICE_AQ_PHY_ENA_AUTO_LINK_UPDT;
-       cfg.low_power_ctrl = pcaps->low_power_ctrl;
+       cfg.low_power_ctrl_an = pcaps->low_power_ctrl_an;
        cfg.eee_cap = pcaps->eee_cap;
        cfg.eeer_value = pcaps->eeer_value;
        cfg.link_fec_opt = pcaps->link_fec_options;
@@ -3448,23 +3441,23 @@ ice_vlan_offload_set(struct rte_eth_dev *dev, int mask)
        rxmode = &dev->data->dev_conf.rxmode;
        if (mask & ETH_VLAN_FILTER_MASK) {
                if (rxmode->offloads & DEV_RX_OFFLOAD_VLAN_FILTER)
-                       ice_vsi_config_vlan_filter(vsi, TRUE);
+                       ice_vsi_config_vlan_filter(vsi, true);
                else
-                       ice_vsi_config_vlan_filter(vsi, FALSE);
+                       ice_vsi_config_vlan_filter(vsi, false);
        }
 
        if (mask & ETH_VLAN_STRIP_MASK) {
                if (rxmode->offloads & DEV_RX_OFFLOAD_VLAN_STRIP)
-                       ice_vsi_config_vlan_stripping(vsi, TRUE);
+                       ice_vsi_config_vlan_stripping(vsi, true);
                else
-                       ice_vsi_config_vlan_stripping(vsi, FALSE);
+                       ice_vsi_config_vlan_stripping(vsi, false);
        }
 
        if (mask & ETH_VLAN_EXTEND_MASK) {
                if (rxmode->offloads & DEV_RX_OFFLOAD_VLAN_EXTEND)
-                       ice_vsi_config_double_vlan(vsi, TRUE);
+                       ice_vsi_config_double_vlan(vsi, true);
                else
-                       ice_vsi_config_double_vlan(vsi, FALSE);
+                       ice_vsi_config_double_vlan(vsi, false);
        }
 
        return 0;
@@ -3848,21 +3841,19 @@ static int
 ice_fw_version_get(struct rte_eth_dev *dev, char *fw_version, size_t fw_size)
 {
        struct ice_hw *hw = ICE_DEV_PRIVATE_TO_HW(dev->data->dev_private);
-       u32 full_ver;
        u8 ver, patch;
        u16 build;
        int ret;
 
-       full_ver = hw->nvm.oem_ver;
-       ver = (u8)(full_ver >> 24);
-       build = (u16)((full_ver >> 8) & 0xffff);
-       patch = (u8)(full_ver & 0xff);
+       ver = hw->nvm.orom.major;
+       patch = hw->nvm.orom.patch;
+       build = hw->nvm.orom.build;
 
        ret = snprintf(fw_version, fw_size,
-                       "%d.%d%d 0x%08x %d.%d.%d",
-                       ((hw->nvm.ver >> 12) & 0xf),
-                       ((hw->nvm.ver >> 4) & 0xff),
-                       (hw->nvm.ver & 0xf), hw->nvm.eetrack,
+                       "%d.%d 0x%08x %d.%d.%d",
+                       hw->nvm.major_ver,
+                       hw->nvm.minor_ver,
+                       hw->nvm.eetrack,
                        ver, build, patch);
 
        /* add the size of '\0' */