ethdev: add return value to stats get dev op
[dpdk.git] / drivers / net / qede / qede_ethdev.c
index fcc9bbb..a238781 100644 (file)
@@ -125,143 +125,199 @@ struct rte_qede_xstats_name_off {
 };
 
 static const struct rte_qede_xstats_name_off qede_xstats_strings[] = {
-       {"rx_unicast_bytes", offsetof(struct ecore_eth_stats, rx_ucast_bytes)},
+       {"rx_unicast_bytes",
+               offsetof(struct ecore_eth_stats_common, rx_ucast_bytes)},
        {"rx_multicast_bytes",
-               offsetof(struct ecore_eth_stats, rx_mcast_bytes)},
+               offsetof(struct ecore_eth_stats_common, rx_mcast_bytes)},
        {"rx_broadcast_bytes",
-               offsetof(struct ecore_eth_stats, rx_bcast_bytes)},
-       {"rx_unicast_packets", offsetof(struct ecore_eth_stats, rx_ucast_pkts)},
+               offsetof(struct ecore_eth_stats_common, rx_bcast_bytes)},
+       {"rx_unicast_packets",
+               offsetof(struct ecore_eth_stats_common, rx_ucast_pkts)},
        {"rx_multicast_packets",
-               offsetof(struct ecore_eth_stats, rx_mcast_pkts)},
+               offsetof(struct ecore_eth_stats_common, rx_mcast_pkts)},
        {"rx_broadcast_packets",
-               offsetof(struct ecore_eth_stats, rx_bcast_pkts)},
+               offsetof(struct ecore_eth_stats_common, rx_bcast_pkts)},
 
-       {"tx_unicast_bytes", offsetof(struct ecore_eth_stats, tx_ucast_bytes)},
+       {"tx_unicast_bytes",
+               offsetof(struct ecore_eth_stats_common, tx_ucast_bytes)},
        {"tx_multicast_bytes",
-               offsetof(struct ecore_eth_stats, tx_mcast_bytes)},
+               offsetof(struct ecore_eth_stats_common, tx_mcast_bytes)},
        {"tx_broadcast_bytes",
-               offsetof(struct ecore_eth_stats, tx_bcast_bytes)},
-       {"tx_unicast_packets", offsetof(struct ecore_eth_stats, tx_ucast_pkts)},
+               offsetof(struct ecore_eth_stats_common, tx_bcast_bytes)},
+       {"tx_unicast_packets",
+               offsetof(struct ecore_eth_stats_common, tx_ucast_pkts)},
        {"tx_multicast_packets",
-               offsetof(struct ecore_eth_stats, tx_mcast_pkts)},
+               offsetof(struct ecore_eth_stats_common, tx_mcast_pkts)},
        {"tx_broadcast_packets",
-               offsetof(struct ecore_eth_stats, tx_bcast_pkts)},
+               offsetof(struct ecore_eth_stats_common, tx_bcast_pkts)},
 
        {"rx_64_byte_packets",
-               offsetof(struct ecore_eth_stats, rx_64_byte_packets)},
+               offsetof(struct ecore_eth_stats_common, rx_64_byte_packets)},
        {"rx_65_to_127_byte_packets",
-               offsetof(struct ecore_eth_stats, rx_65_to_127_byte_packets)},
+               offsetof(struct ecore_eth_stats_common,
+                        rx_65_to_127_byte_packets)},
        {"rx_128_to_255_byte_packets",
-               offsetof(struct ecore_eth_stats, rx_128_to_255_byte_packets)},
+               offsetof(struct ecore_eth_stats_common,
+                        rx_128_to_255_byte_packets)},
        {"rx_256_to_511_byte_packets",
-               offsetof(struct ecore_eth_stats, rx_256_to_511_byte_packets)},
+               offsetof(struct ecore_eth_stats_common,
+                        rx_256_to_511_byte_packets)},
        {"rx_512_to_1023_byte_packets",
-               offsetof(struct ecore_eth_stats, rx_512_to_1023_byte_packets)},
+               offsetof(struct ecore_eth_stats_common,
+                        rx_512_to_1023_byte_packets)},
        {"rx_1024_to_1518_byte_packets",
-               offsetof(struct ecore_eth_stats, rx_1024_to_1518_byte_packets)},
-       {"rx_1519_to_1522_byte_packets",
-               offsetof(struct ecore_eth_stats, rx_1519_to_1522_byte_packets)},
-       {"rx_1519_to_2047_byte_packets",
-               offsetof(struct ecore_eth_stats, rx_1519_to_2047_byte_packets)},
-       {"rx_2048_to_4095_byte_packets",
-               offsetof(struct ecore_eth_stats, rx_2048_to_4095_byte_packets)},
-       {"rx_4096_to_9216_byte_packets",
-               offsetof(struct ecore_eth_stats, rx_4096_to_9216_byte_packets)},
-       {"rx_9217_to_16383_byte_packets",
-               offsetof(struct ecore_eth_stats,
-                        rx_9217_to_16383_byte_packets)},
+               offsetof(struct ecore_eth_stats_common,
+                        rx_1024_to_1518_byte_packets)},
        {"tx_64_byte_packets",
-               offsetof(struct ecore_eth_stats, tx_64_byte_packets)},
+               offsetof(struct ecore_eth_stats_common, tx_64_byte_packets)},
        {"tx_65_to_127_byte_packets",
-               offsetof(struct ecore_eth_stats, tx_65_to_127_byte_packets)},
+               offsetof(struct ecore_eth_stats_common,
+                        tx_65_to_127_byte_packets)},
        {"tx_128_to_255_byte_packets",
-               offsetof(struct ecore_eth_stats, tx_128_to_255_byte_packets)},
+               offsetof(struct ecore_eth_stats_common,
+                        tx_128_to_255_byte_packets)},
        {"tx_256_to_511_byte_packets",
-               offsetof(struct ecore_eth_stats, tx_256_to_511_byte_packets)},
+               offsetof(struct ecore_eth_stats_common,
+                        tx_256_to_511_byte_packets)},
        {"tx_512_to_1023_byte_packets",
-               offsetof(struct ecore_eth_stats, tx_512_to_1023_byte_packets)},
+               offsetof(struct ecore_eth_stats_common,
+                        tx_512_to_1023_byte_packets)},
        {"tx_1024_to_1518_byte_packets",
-               offsetof(struct ecore_eth_stats, tx_1024_to_1518_byte_packets)},
-       {"trx_1519_to_1522_byte_packets",
-               offsetof(struct ecore_eth_stats, tx_1519_to_2047_byte_packets)},
-       {"tx_2048_to_4095_byte_packets",
-               offsetof(struct ecore_eth_stats, tx_2048_to_4095_byte_packets)},
-       {"tx_4096_to_9216_byte_packets",
-               offsetof(struct ecore_eth_stats, tx_4096_to_9216_byte_packets)},
-       {"tx_9217_to_16383_byte_packets",
-               offsetof(struct ecore_eth_stats,
-                        tx_9217_to_16383_byte_packets)},
+               offsetof(struct ecore_eth_stats_common,
+                        tx_1024_to_1518_byte_packets)},
 
        {"rx_mac_crtl_frames",
-               offsetof(struct ecore_eth_stats, rx_mac_crtl_frames)},
+               offsetof(struct ecore_eth_stats_common, rx_mac_crtl_frames)},
        {"tx_mac_control_frames",
-               offsetof(struct ecore_eth_stats, tx_mac_ctrl_frames)},
-       {"rx_pause_frames", offsetof(struct ecore_eth_stats, rx_pause_frames)},
-       {"tx_pause_frames", offsetof(struct ecore_eth_stats, tx_pause_frames)},
+               offsetof(struct ecore_eth_stats_common, tx_mac_ctrl_frames)},
+       {"rx_pause_frames",
+               offsetof(struct ecore_eth_stats_common, rx_pause_frames)},
+       {"tx_pause_frames",
+               offsetof(struct ecore_eth_stats_common, tx_pause_frames)},
        {"rx_priority_flow_control_frames",
-               offsetof(struct ecore_eth_stats, rx_pfc_frames)},
+               offsetof(struct ecore_eth_stats_common, rx_pfc_frames)},
        {"tx_priority_flow_control_frames",
-               offsetof(struct ecore_eth_stats, tx_pfc_frames)},
+               offsetof(struct ecore_eth_stats_common, tx_pfc_frames)},
 
-       {"rx_crc_errors", offsetof(struct ecore_eth_stats, rx_crc_errors)},
-       {"rx_align_errors", offsetof(struct ecore_eth_stats, rx_align_errors)},
+       {"rx_crc_errors",
+               offsetof(struct ecore_eth_stats_common, rx_crc_errors)},
+       {"rx_align_errors",
+               offsetof(struct ecore_eth_stats_common, rx_align_errors)},
        {"rx_carrier_errors",
-               offsetof(struct ecore_eth_stats, rx_carrier_errors)},
+               offsetof(struct ecore_eth_stats_common, rx_carrier_errors)},
        {"rx_oversize_packet_errors",
-               offsetof(struct ecore_eth_stats, rx_oversize_packets)},
-       {"rx_jabber_errors", offsetof(struct ecore_eth_stats, rx_jabbers)},
+               offsetof(struct ecore_eth_stats_common, rx_oversize_packets)},
+       {"rx_jabber_errors",
+               offsetof(struct ecore_eth_stats_common, rx_jabbers)},
        {"rx_undersize_packet_errors",
-               offsetof(struct ecore_eth_stats, rx_undersize_packets)},
-       {"rx_fragments", offsetof(struct ecore_eth_stats, rx_fragments)},
+               offsetof(struct ecore_eth_stats_common, rx_undersize_packets)},
+       {"rx_fragments", offsetof(struct ecore_eth_stats_common, rx_fragments)},
        {"rx_host_buffer_not_available",
-               offsetof(struct ecore_eth_stats, no_buff_discards)},
+               offsetof(struct ecore_eth_stats_common, no_buff_discards)},
        /* Number of packets discarded because they are bigger than MTU */
        {"rx_packet_too_big_discards",
-               offsetof(struct ecore_eth_stats, packet_too_big_discard)},
+               offsetof(struct ecore_eth_stats_common,
+                        packet_too_big_discard)},
        {"rx_ttl_zero_discards",
-               offsetof(struct ecore_eth_stats, ttl0_discard)},
+               offsetof(struct ecore_eth_stats_common, ttl0_discard)},
        {"rx_multi_function_tag_filter_discards",
-               offsetof(struct ecore_eth_stats, mftag_filter_discards)},
+               offsetof(struct ecore_eth_stats_common, mftag_filter_discards)},
        {"rx_mac_filter_discards",
-               offsetof(struct ecore_eth_stats, mac_filter_discards)},
+               offsetof(struct ecore_eth_stats_common, mac_filter_discards)},
        {"rx_hw_buffer_truncates",
-               offsetof(struct ecore_eth_stats, brb_truncates)},
+               offsetof(struct ecore_eth_stats_common, brb_truncates)},
        {"rx_hw_buffer_discards",
-               offsetof(struct ecore_eth_stats, brb_discards)},
-       {"tx_lpi_entry_count",
-               offsetof(struct ecore_eth_stats, tx_lpi_entry_count)},
-       {"tx_total_collisions",
-               offsetof(struct ecore_eth_stats, tx_total_collisions)},
+               offsetof(struct ecore_eth_stats_common, brb_discards)},
        {"tx_error_drop_packets",
-               offsetof(struct ecore_eth_stats, tx_err_drop_pkts)},
+               offsetof(struct ecore_eth_stats_common, tx_err_drop_pkts)},
 
-       {"rx_mac_bytes", offsetof(struct ecore_eth_stats, rx_mac_bytes)},
+       {"rx_mac_bytes", offsetof(struct ecore_eth_stats_common, rx_mac_bytes)},
        {"rx_mac_unicast_packets",
-               offsetof(struct ecore_eth_stats, rx_mac_uc_packets)},
+               offsetof(struct ecore_eth_stats_common, rx_mac_uc_packets)},
        {"rx_mac_multicast_packets",
-               offsetof(struct ecore_eth_stats, rx_mac_mc_packets)},
+               offsetof(struct ecore_eth_stats_common, rx_mac_mc_packets)},
        {"rx_mac_broadcast_packets",
-               offsetof(struct ecore_eth_stats, rx_mac_bc_packets)},
+               offsetof(struct ecore_eth_stats_common, rx_mac_bc_packets)},
        {"rx_mac_frames_ok",
-               offsetof(struct ecore_eth_stats, rx_mac_frames_ok)},
-       {"tx_mac_bytes", offsetof(struct ecore_eth_stats, tx_mac_bytes)},
+               offsetof(struct ecore_eth_stats_common, rx_mac_frames_ok)},
+       {"tx_mac_bytes", offsetof(struct ecore_eth_stats_common, tx_mac_bytes)},
        {"tx_mac_unicast_packets",
-               offsetof(struct ecore_eth_stats, tx_mac_uc_packets)},
+               offsetof(struct ecore_eth_stats_common, tx_mac_uc_packets)},
        {"tx_mac_multicast_packets",
-               offsetof(struct ecore_eth_stats, tx_mac_mc_packets)},
+               offsetof(struct ecore_eth_stats_common, tx_mac_mc_packets)},
        {"tx_mac_broadcast_packets",
-               offsetof(struct ecore_eth_stats, tx_mac_bc_packets)},
+               offsetof(struct ecore_eth_stats_common, tx_mac_bc_packets)},
 
        {"lro_coalesced_packets",
-               offsetof(struct ecore_eth_stats, tpa_coalesced_pkts)},
+               offsetof(struct ecore_eth_stats_common, tpa_coalesced_pkts)},
        {"lro_coalesced_events",
-               offsetof(struct ecore_eth_stats, tpa_coalesced_events)},
+               offsetof(struct ecore_eth_stats_common, tpa_coalesced_events)},
        {"lro_aborts_num",
-               offsetof(struct ecore_eth_stats, tpa_aborts_num)},
+               offsetof(struct ecore_eth_stats_common, tpa_aborts_num)},
        {"lro_not_coalesced_packets",
-               offsetof(struct ecore_eth_stats, tpa_not_coalesced_pkts)},
+               offsetof(struct ecore_eth_stats_common,
+                        tpa_not_coalesced_pkts)},
        {"lro_coalesced_bytes",
-               offsetof(struct ecore_eth_stats, tpa_coalesced_bytes)},
+               offsetof(struct ecore_eth_stats_common,
+                        tpa_coalesced_bytes)},
+};
+
+static const struct rte_qede_xstats_name_off qede_bb_xstats_strings[] = {
+       {"rx_1519_to_1522_byte_packets",
+               offsetof(struct ecore_eth_stats, bb) +
+               offsetof(struct ecore_eth_stats_bb,
+                        rx_1519_to_1522_byte_packets)},
+       {"rx_1519_to_2047_byte_packets",
+               offsetof(struct ecore_eth_stats, bb) +
+               offsetof(struct ecore_eth_stats_bb,
+                        rx_1519_to_2047_byte_packets)},
+       {"rx_2048_to_4095_byte_packets",
+               offsetof(struct ecore_eth_stats, bb) +
+               offsetof(struct ecore_eth_stats_bb,
+                        rx_2048_to_4095_byte_packets)},
+       {"rx_4096_to_9216_byte_packets",
+               offsetof(struct ecore_eth_stats, bb) +
+               offsetof(struct ecore_eth_stats_bb,
+                        rx_4096_to_9216_byte_packets)},
+       {"rx_9217_to_16383_byte_packets",
+               offsetof(struct ecore_eth_stats, bb) +
+               offsetof(struct ecore_eth_stats_bb,
+                        rx_9217_to_16383_byte_packets)},
+
+       {"tx_1519_to_2047_byte_packets",
+               offsetof(struct ecore_eth_stats, bb) +
+               offsetof(struct ecore_eth_stats_bb,
+                        tx_1519_to_2047_byte_packets)},
+       {"tx_2048_to_4095_byte_packets",
+               offsetof(struct ecore_eth_stats, bb) +
+               offsetof(struct ecore_eth_stats_bb,
+                        tx_2048_to_4095_byte_packets)},
+       {"tx_4096_to_9216_byte_packets",
+               offsetof(struct ecore_eth_stats, bb) +
+               offsetof(struct ecore_eth_stats_bb,
+                        tx_4096_to_9216_byte_packets)},
+       {"tx_9217_to_16383_byte_packets",
+               offsetof(struct ecore_eth_stats, bb) +
+               offsetof(struct ecore_eth_stats_bb,
+                        tx_9217_to_16383_byte_packets)},
+
+       {"tx_lpi_entry_count",
+               offsetof(struct ecore_eth_stats, bb) +
+               offsetof(struct ecore_eth_stats_bb, tx_lpi_entry_count)},
+       {"tx_total_collisions",
+               offsetof(struct ecore_eth_stats, bb) +
+               offsetof(struct ecore_eth_stats_bb, tx_total_collisions)},
+};
+
+static const struct rte_qede_xstats_name_off qede_ah_xstats_strings[] = {
+       {"rx_1519_to_max_byte_packets",
+               offsetof(struct ecore_eth_stats, ah) +
+               offsetof(struct ecore_eth_stats_ah,
+                        rx_1519_to_max_byte_packets)},
+       {"tx_1519_to_max_byte_packets",
+               offsetof(struct ecore_eth_stats, ah) +
+               offsetof(struct ecore_eth_stats_ah,
+                        tx_1519_to_max_byte_packets)},
 };
 
 static const struct rte_qede_xstats_name_off qede_rxq_xstats_strings[] = {
@@ -307,9 +363,10 @@ static void qede_print_adapter_info(struct qede_dev *qdev)
 
        DP_INFO(edev, "*********************************\n");
        DP_INFO(edev, " DPDK version:%s\n", rte_version());
-       DP_INFO(edev, " Chip details : %s%d\n",
+       DP_INFO(edev, " Chip details : %s %c%d\n",
                  ECORE_IS_BB(edev) ? "BB" : "AH",
-                 CHIP_REV_IS_A0(edev) ? 0 : 1);
+                 'A' + edev->chip_rev,
+                 (int)edev->chip_metal);
        snprintf(ver_str, QEDE_PMD_DRV_VER_STR_SIZE, "%d.%d.%d.%d",
                 info->fw_major, info->fw_minor, info->fw_rev, info->fw_eng);
        snprintf(drv_ver, QEDE_PMD_DRV_VER_STR_SIZE, "%s_%s",
@@ -571,6 +628,7 @@ qede_ucast_filter(struct rte_eth_dev *eth_dev, struct ecore_filter_ucast *ucast,
                SLIST_FOREACH(tmp, &qdev->uc_list_head, list) {
                        if ((memcmp(mac_addr, &tmp->mac,
                                    ETHER_ADDR_LEN) == 0) &&
+                            ucast->vni == tmp->vni &&
                             ucast->vlan == tmp->vlan) {
                                DP_ERR(edev, "Unicast MAC is already added"
                                       " with vlan = %u, vni = %u\n",
@@ -1103,7 +1161,7 @@ static int qede_dev_configure(struct rte_eth_dev *eth_dev)
        PMD_INIT_FUNC_TRACE(edev);
 
        /* Check requirements for 100G mode */
-       if (edev->num_hwfns > 1) {
+       if (ECORE_IS_CMT(edev)) {
                if (eth_dev->data->nb_rx_queues < 2 ||
                                eth_dev->data->nb_tx_queues < 2) {
                        DP_ERR(edev, "100G mode needs min. 2 RX/TX queues\n");
@@ -1121,8 +1179,10 @@ static int qede_dev_configure(struct rte_eth_dev *eth_dev)
        /* Sanity checks and throw warnings */
        if (rxmode->enable_scatter)
                eth_dev->data->scattered_rx = 1;
+
        if (!rxmode->hw_strip_crc)
                DP_INFO(edev, "L2 CRC stripping is always enabled in hw\n");
+
        if (!rxmode->hw_ip_checksum)
                DP_INFO(edev, "IP/UDP/TCP checksum offload is always enabled "
                                "in hw\n");
@@ -1396,11 +1456,11 @@ static void qede_dev_close(struct rte_eth_dev *eth_dev)
        rte_intr_disable(&pci_dev->intr_handle);
        rte_intr_callback_unregister(&pci_dev->intr_handle,
                                     qede_interrupt_handler, (void *)eth_dev);
-       if (edev->num_hwfns > 1)
+       if (ECORE_IS_CMT(edev))
                rte_eal_alarm_cancel(qede_poll_sp_sb_cb, (void *)eth_dev);
 }
 
-static void
+static int
 qede_get_stats(struct rte_eth_dev *eth_dev, struct rte_eth_stats *eth_stats)
 {
        struct qede_dev *qdev = eth_dev->data->dev_private;
@@ -1413,32 +1473,33 @@ qede_get_stats(struct rte_eth_dev *eth_dev, struct rte_eth_stats *eth_stats)
        ecore_get_vport_stats(edev, &stats);
 
        /* RX Stats */
-       eth_stats->ipackets = stats.rx_ucast_pkts +
-           stats.rx_mcast_pkts + stats.rx_bcast_pkts;
+       eth_stats->ipackets = stats.common.rx_ucast_pkts +
+           stats.common.rx_mcast_pkts + stats.common.rx_bcast_pkts;
 
-       eth_stats->ibytes = stats.rx_ucast_bytes +
-           stats.rx_mcast_bytes + stats.rx_bcast_bytes;
+       eth_stats->ibytes = stats.common.rx_ucast_bytes +
+           stats.common.rx_mcast_bytes + stats.common.rx_bcast_bytes;
 
-       eth_stats->ierrors = stats.rx_crc_errors +
-           stats.rx_align_errors +
-           stats.rx_carrier_errors +
-           stats.rx_oversize_packets +
-           stats.rx_jabbers + stats.rx_undersize_packets;
+       eth_stats->ierrors = stats.common.rx_crc_errors +
+           stats.common.rx_align_errors +
+           stats.common.rx_carrier_errors +
+           stats.common.rx_oversize_packets +
+           stats.common.rx_jabbers + stats.common.rx_undersize_packets;
 
-       eth_stats->rx_nombuf = stats.no_buff_discards;
+       eth_stats->rx_nombuf = stats.common.no_buff_discards;
 
-       eth_stats->imissed = stats.mftag_filter_discards +
-           stats.mac_filter_discards +
-           stats.no_buff_discards + stats.brb_truncates + stats.brb_discards;
+       eth_stats->imissed = stats.common.mftag_filter_discards +
+           stats.common.mac_filter_discards +
+           stats.common.no_buff_discards +
+           stats.common.brb_truncates + stats.common.brb_discards;
 
        /* TX stats */
-       eth_stats->opackets = stats.tx_ucast_pkts +
-           stats.tx_mcast_pkts + stats.tx_bcast_pkts;
+       eth_stats->opackets = stats.common.tx_ucast_pkts +
+           stats.common.tx_mcast_pkts + stats.common.tx_bcast_pkts;
 
-       eth_stats->obytes = stats.tx_ucast_bytes +
-           stats.tx_mcast_bytes + stats.tx_bcast_bytes;
+       eth_stats->obytes = stats.common.tx_ucast_bytes +
+           stats.common.tx_mcast_bytes + stats.common.tx_bcast_bytes;
 
-       eth_stats->oerrors = stats.tx_err_drop_pkts;
+       eth_stats->oerrors = stats.common.tx_err_drop_pkts;
 
        /* Queue stats */
        rxq_stat_cntrs = RTE_MIN(QEDE_RSS_COUNT(qdev),
@@ -1483,14 +1544,24 @@ qede_get_stats(struct rte_eth_dev *eth_dev, struct rte_eth_stats *eth_stats)
                if (j == txq_stat_cntrs)
                        break;
        }
+
+       return 0;
 }
 
 static unsigned
 qede_get_xstats_count(struct qede_dev *qdev) {
-       return RTE_DIM(qede_xstats_strings) +
-               (RTE_DIM(qede_rxq_xstats_strings) *
-                RTE_MIN(QEDE_RSS_COUNT(qdev),
-                        RTE_ETHDEV_QUEUE_STAT_CNTRS));
+       if (ECORE_IS_BB(&qdev->edev))
+               return RTE_DIM(qede_xstats_strings) +
+                      RTE_DIM(qede_bb_xstats_strings) +
+                      (RTE_DIM(qede_rxq_xstats_strings) *
+                       RTE_MIN(QEDE_RSS_COUNT(qdev),
+                               RTE_ETHDEV_QUEUE_STAT_CNTRS));
+       else
+               return RTE_DIM(qede_xstats_strings) +
+                      RTE_DIM(qede_ah_xstats_strings) +
+                      (RTE_DIM(qede_rxq_xstats_strings) *
+                       RTE_MIN(QEDE_RSS_COUNT(qdev),
+                               RTE_ETHDEV_QUEUE_STAT_CNTRS));
 }
 
 static int
@@ -1499,6 +1570,7 @@ qede_get_xstats_names(struct rte_eth_dev *dev,
                      __rte_unused unsigned int limit)
 {
        struct qede_dev *qdev = dev->data->dev_private;
+       struct ecore_dev *edev = &qdev->edev;
        const unsigned int stat_cnt = qede_get_xstats_count(qdev);
        unsigned int i, qid, stat_idx = 0;
        unsigned int rxq_stat_cntrs;
@@ -1512,6 +1584,24 @@ qede_get_xstats_names(struct rte_eth_dev *dev,
                        stat_idx++;
                }
 
+               if (ECORE_IS_BB(edev)) {
+                       for (i = 0; i < RTE_DIM(qede_bb_xstats_strings); i++) {
+                               snprintf(xstats_names[stat_idx].name,
+                                       sizeof(xstats_names[stat_idx].name),
+                                       "%s",
+                                       qede_bb_xstats_strings[i].name);
+                               stat_idx++;
+                       }
+               } else {
+                       for (i = 0; i < RTE_DIM(qede_ah_xstats_strings); i++) {
+                               snprintf(xstats_names[stat_idx].name,
+                                       sizeof(xstats_names[stat_idx].name),
+                                       "%s",
+                                       qede_ah_xstats_strings[i].name);
+                               stat_idx++;
+                       }
+               }
+
                rxq_stat_cntrs = RTE_MIN(QEDE_RSS_COUNT(qdev),
                                         RTE_ETHDEV_QUEUE_STAT_CNTRS);
                for (qid = 0; qid < rxq_stat_cntrs; qid++) {
@@ -1552,6 +1642,24 @@ qede_get_xstats(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats,
                stat_idx++;
        }
 
+       if (ECORE_IS_BB(edev)) {
+               for (i = 0; i < RTE_DIM(qede_bb_xstats_strings); i++) {
+                       xstats[stat_idx].value =
+                                       *(uint64_t *)(((char *)&stats) +
+                                       qede_bb_xstats_strings[i].offset);
+                       xstats[stat_idx].id = stat_idx;
+                       stat_idx++;
+               }
+       } else {
+               for (i = 0; i < RTE_DIM(qede_ah_xstats_strings); i++) {
+                       xstats[stat_idx].value =
+                                       *(uint64_t *)(((char *)&stats) +
+                                       qede_ah_xstats_strings[i].offset);
+                       xstats[stat_idx].id = stat_idx;
+                       stat_idx++;
+               }
+       }
+
        rxq_stat_cntrs = RTE_MIN(QEDE_RSS_COUNT(qdev),
                                 RTE_ETHDEV_QUEUE_STAT_CNTRS);
        for (qid = 0; qid < rxq_stat_cntrs; qid++) {
@@ -1906,6 +2014,10 @@ int qede_rss_reta_update(struct rte_eth_dev *eth_dev,
        memset(&vport_update_params, 0, sizeof(vport_update_params));
        params = rte_zmalloc("qede_rss", sizeof(*params) * edev->num_hwfns,
                             RTE_CACHE_LINE_SIZE);
+       if (params == NULL) {
+               DP_ERR(edev, "failed to allocate memory\n");
+               return -ENOMEM;
+       }
 
        for (i = 0; i < reta_size; i++) {
                idx = i / RTE_RETA_GROUP_SIZE;
@@ -1925,7 +2037,7 @@ int qede_rss_reta_update(struct rte_eth_dev *eth_dev,
        params->update_rss_config = 1;
 
        /* Fix up RETA for CMT mode device */
-       if (edev->num_hwfns > 1)
+       if (ECORE_IS_CMT(edev))
                qdev->rss_enable = qede_update_rss_parm_cmt(edev,
                                                            params);
        vport_update_params.vport_id = 0;
@@ -2057,11 +2169,15 @@ qede_conf_udp_dst_port(struct rte_eth_dev *eth_dev,
                                                  QEDE_VXLAN_DEF_PORT;
                for_each_hwfn(edev, i) {
                        p_hwfn = &edev->hwfns[i];
-                       rc = ecore_sp_pf_update_tunn_cfg(p_hwfn, &tunn,
+                       struct ecore_ptt *p_ptt = IS_PF(edev) ?
+                              ecore_ptt_acquire(p_hwfn) : NULL;
+                       rc = ecore_sp_pf_update_tunn_cfg(p_hwfn, p_ptt, &tunn,
                                                ECORE_SPQ_MODE_CB, NULL);
                        if (rc != ECORE_SUCCESS) {
                                DP_ERR(edev, "Unable to config UDP port %u\n",
                                       tunn.vxlan_port.port);
+                               if (IS_PF(edev))
+                                       ecore_ptt_release(p_hwfn, p_ptt);
                                return rc;
                        }
                }
@@ -2163,6 +2279,8 @@ static int qede_vxlan_tunn_config(struct rte_eth_dev *eth_dev,
        uint16_t filter_type;
        int rc, i;
 
+       PMD_INIT_FUNC_TRACE(edev);
+
        filter_type = conf->filter_type | qdev->vxlan_filter_type;
        /* First determine if the given filter classification is supported */
        qede_get_ecore_tunn_params(filter_type, &type, &clss, str);
@@ -2206,11 +2324,15 @@ static int qede_vxlan_tunn_config(struct rte_eth_dev *eth_dev,
                qede_set_cmn_tunn_param(&tunn, clss, true, true);
                for_each_hwfn(edev, i) {
                        p_hwfn = &edev->hwfns[i];
-                       rc = ecore_sp_pf_update_tunn_cfg(p_hwfn,
+                       struct ecore_ptt *p_ptt = IS_PF(edev) ?
+                              ecore_ptt_acquire(p_hwfn) : NULL;
+                       rc = ecore_sp_pf_update_tunn_cfg(p_hwfn, p_ptt,
                                &tunn, ECORE_SPQ_MODE_CB, NULL);
                        if (rc != ECORE_SUCCESS) {
                                DP_ERR(edev, "Failed to update tunn_clss %u\n",
                                       tunn.vxlan.tun_cls);
+                               if (IS_PF(edev))
+                                       ecore_ptt_release(p_hwfn, p_ptt);
                        }
                }
                qdev->num_tunn_filters++; /* Filter added successfully */
@@ -2240,12 +2362,17 @@ static int qede_vxlan_tunn_config(struct rte_eth_dev *eth_dev,
                        qede_set_cmn_tunn_param(&tunn, clss, false, true);
                        for_each_hwfn(edev, i) {
                                p_hwfn = &edev->hwfns[i];
-                               rc = ecore_sp_pf_update_tunn_cfg(p_hwfn, &tunn,
-                                       ECORE_SPQ_MODE_CB, NULL);
+                               struct ecore_ptt *p_ptt = IS_PF(edev) ?
+                                      ecore_ptt_acquire(p_hwfn) : NULL;
+                               rc = ecore_sp_pf_update_tunn_cfg(p_hwfn, p_ptt,
+                                       &tunn, ECORE_SPQ_MODE_CB, NULL);
                                if (rc != ECORE_SUCCESS) {
                                        DP_ERR(edev,
                                                "Failed to update tunn_clss %u\n",
                                                tunn.vxlan.tun_cls);
+                                       if (IS_PF(edev))
+                                               ecore_ptt_release(p_hwfn,
+                                                                 p_ptt);
                                        break;
                                }
                        }
@@ -2430,8 +2557,7 @@ static int qede_common_dev_init(struct rte_eth_dev *eth_dev, bool is_vf)
        eth_dev->tx_pkt_prepare = qede_xmit_prep_pkts;
 
        if (rte_eal_process_type() != RTE_PROC_PRIMARY) {
-               DP_NOTICE(edev, false,
-                         "Skipping device init from secondary process\n");
+               DP_ERR(edev, "Skipping device init from secondary process\n");
                return 0;
        }
 
@@ -2476,7 +2602,7 @@ static int qede_common_dev_init(struct rte_eth_dev *eth_dev, bool is_vf)
         * This is required since uio device uses only one MSI-x
         * interrupt vector but we need one for each engine.
         */
-       if (edev->num_hwfns > 1 && IS_PF(edev)) {
+       if (ECORE_IS_CMT(edev) && IS_PF(edev)) {
                rc = rte_eal_alarm_set(timer_period * US_PER_S,
                                       qede_poll_sp_sb_cb,
                                       (void *)eth_dev);
@@ -2554,8 +2680,7 @@ static int qede_common_dev_init(struct rte_eth_dev *eth_dev, bool is_vf)
                                ether_addr_copy(&eth_dev->data->mac_addrs[0],
                                                &adapter->primary_mac);
                        } else {
-                               DP_NOTICE(edev, false,
-                                         "No VF macaddr assigned\n");
+                               DP_ERR(edev, "No VF macaddr assigned\n");
                        }
                }
        }
@@ -2580,13 +2705,13 @@ static int qede_common_dev_init(struct rte_eth_dev *eth_dev, bool is_vf)
                if (qede_start_vport(adapter, adapter->mtu))
                        return -1;
 
-       DP_NOTICE(edev, false, "MAC address : %02x:%02x:%02x:%02x:%02x:%02x\n",
-                 adapter->primary_mac.addr_bytes[0],
-                 adapter->primary_mac.addr_bytes[1],
-                 adapter->primary_mac.addr_bytes[2],
-                 adapter->primary_mac.addr_bytes[3],
-                 adapter->primary_mac.addr_bytes[4],
-                 adapter->primary_mac.addr_bytes[5]);
+       DP_INFO(edev, "MAC address : %02x:%02x:%02x:%02x:%02x:%02x\n",
+               adapter->primary_mac.addr_bytes[0],
+               adapter->primary_mac.addr_bytes[1],
+               adapter->primary_mac.addr_bytes[2],
+               adapter->primary_mac.addr_bytes[3],
+               adapter->primary_mac.addr_bytes[4],
+               adapter->primary_mac.addr_bytes[5]);
 
        DP_INFO(edev, "Device initialized\n");
 
@@ -2605,6 +2730,13 @@ static int qede_eth_dev_init(struct rte_eth_dev *eth_dev)
 
 static int qede_dev_common_uninit(struct rte_eth_dev *eth_dev)
 {
+#ifdef RTE_LIBRTE_QEDE_DEBUG_INIT
+       struct qede_dev *qdev = eth_dev->data->dev_private;
+       struct ecore_dev *edev = &qdev->edev;
+
+       PMD_INIT_FUNC_TRACE(edev);
+#endif
+
        /* only uninitialize in the primary process */
        if (rte_eal_process_type() != RTE_PROC_PRIMARY)
                return 0;