net/bnxt: fix MTU calculation
[dpdk.git] / drivers / net / bnxt / bnxt_ethdev.c
index 1d4ff54..cd5acc6 100644 (file)
 
 #define DRV_MODULE_NAME                "bnxt"
 static const char bnxt_version[] =
-       "Broadcom Cumulus driver " DRV_MODULE_NAME "\n";
+       "Broadcom NetXtreme driver " DRV_MODULE_NAME "\n";
 int bnxt_logtype_driver;
 
 #define PCI_VENDOR_ID_BROADCOM 0x14E4
 
-#define BROADCOM_DEV_ID_STRATUS_NIC_VF 0x1609
+#define BROADCOM_DEV_ID_STRATUS_NIC_VF1 0x1606
+#define BROADCOM_DEV_ID_STRATUS_NIC_VF2 0x1609
 #define BROADCOM_DEV_ID_STRATUS_NIC 0x1614
 #define BROADCOM_DEV_ID_57414_VF 0x16c1
 #define BROADCOM_DEV_ID_57301 0x16c8
@@ -75,7 +76,9 @@ int bnxt_logtype_driver;
 
 static const struct rte_pci_id bnxt_pci_id_map[] = {
        { RTE_PCI_DEVICE(PCI_VENDOR_ID_BROADCOM,
-                        BROADCOM_DEV_ID_STRATUS_NIC_VF) },
+                        BROADCOM_DEV_ID_STRATUS_NIC_VF1) },
+       { RTE_PCI_DEVICE(PCI_VENDOR_ID_BROADCOM,
+                        BROADCOM_DEV_ID_STRATUS_NIC_VF2) },
        { RTE_PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, BROADCOM_DEV_ID_STRATUS_NIC) },
        { RTE_PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, BROADCOM_DEV_ID_57414_VF) },
        { RTE_PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, BROADCOM_DEV_ID_57301) },
@@ -148,6 +151,7 @@ static const struct rte_pci_id bnxt_pci_id_map[] = {
 
 static int bnxt_vlan_offload_set_op(struct rte_eth_dev *dev, int mask);
 static void bnxt_print_link_info(struct rte_eth_dev *eth_dev);
+static int bnxt_mtu_set_op(struct rte_eth_dev *eth_dev, uint16_t new_mtu);
 
 /***********************/
 
@@ -392,10 +396,6 @@ static int bnxt_init_nic(struct bnxt *bp)
        bnxt_init_vnics(bp);
        bnxt_init_filters(bp);
 
-       rc = bnxt_init_chip(bp);
-       if (rc)
-               return rc;
-
        return 0;
 }
 
@@ -549,10 +549,13 @@ static int bnxt_dev_configure_op(struct rte_eth_dev *eth_dev)
        bp->rx_cp_nr_rings = bp->rx_nr_rings;
        bp->tx_cp_nr_rings = bp->tx_nr_rings;
 
-       if (rx_offloads & DEV_RX_OFFLOAD_JUMBO_FRAME)
+       if (rx_offloads & DEV_RX_OFFLOAD_JUMBO_FRAME) {
                eth_dev->data->mtu =
                                eth_dev->data->dev_conf.rxmode.max_rx_pkt_len -
-                               ETHER_HDR_LEN - ETHER_CRC_LEN - VLAN_TAG_SIZE;
+                               ETHER_HDR_LEN - ETHER_CRC_LEN - VLAN_TAG_SIZE *
+                               BNXT_NUM_VLANS;
+               bnxt_mtu_set_op(eth_dev, eth_dev->data->mtu);
+       }
        return 0;
 }
 
@@ -591,7 +594,7 @@ static int bnxt_dev_start_op(struct rte_eth_dev *eth_dev)
        }
        bp->dev_stopped = 0;
 
-       rc = bnxt_init_nic(bp);
+       rc = bnxt_init_chip(bp);
        if (rc)
                goto error;
 
@@ -781,6 +784,11 @@ out:
        new.link_speed != eth_dev->data->dev_link.link_speed) {
                memcpy(&eth_dev->data->dev_link, &new,
                        sizeof(struct rte_eth_link));
+
+               _rte_eth_dev_callback_process(eth_dev,
+                                             RTE_ETH_EVENT_INTR_LSC,
+                                             NULL);
+
                bnxt_print_link_info(eth_dev);
        }
 
@@ -1528,7 +1536,6 @@ bnxt_txq_info_get_op(struct rte_eth_dev *dev, uint16_t queue_id,
 
        qinfo->conf.tx_free_thresh = txq->tx_free_thresh;
        qinfo->conf.tx_rs_thresh = 0;
-       qinfo->conf.txq_flags = txq->txq_flags;
        qinfo->conf.tx_deferred_start = txq->tx_deferred_start;
 }
 
@@ -3063,7 +3070,8 @@ static bool bnxt_vf_pciid(uint16_t id)
            id == BROADCOM_DEV_ID_5731X_VF ||
            id == BROADCOM_DEV_ID_5741X_VF ||
            id == BROADCOM_DEV_ID_57414_VF ||
-           id == BROADCOM_DEV_ID_STRATUS_NIC_VF)
+           id == BROADCOM_DEV_ID_STRATUS_NIC_VF1 ||
+           id == BROADCOM_DEV_ID_STRATUS_NIC_VF2)
                return true;
        return false;
 }
@@ -3091,11 +3099,23 @@ static int bnxt_init_board(struct rte_eth_dev *eth_dev)
                rc = -ENOMEM;
                goto init_err_release;
        }
+
+       if (!pci_dev->mem_resource[2].addr) {
+               PMD_DRV_LOG(ERR,
+                           "Cannot find PCI device BAR 2 address, aborting\n");
+               rc = -ENODEV;
+               goto init_err_release;
+       } else {
+               bp->doorbell_base = (void *)pci_dev->mem_resource[2].addr;
+       }
+
        return 0;
 
 init_err_release:
        if (bp->bar0)
                bp->bar0 = NULL;
+       if (bp->doorbell_base)
+               bp->doorbell_base = NULL;
 
 init_err_disable:
 
@@ -3129,7 +3149,6 @@ bnxt_dev_init(struct rte_eth_dev *eth_dev)
 
        bp = eth_dev->data->dev_private;
 
-       rte_atomic64_init(&bp->rx_mbuf_alloc_fail);
        bp->dev_stopped = 1;
 
        if (rte_eal_process_type() != RTE_PROC_PRIMARY)
@@ -3270,7 +3289,7 @@ skip_init:
                goto error_free;
        }
 
-       if (check_zero_bytes(bp->dflt_mac_addr, ETHER_ADDR_LEN)) {
+       if (bnxt_check_zero_bytes(bp->dflt_mac_addr, ETHER_ADDR_LEN)) {
                PMD_DRV_LOG(ERR,
                            "Invalid MAC addr %02X:%02X:%02X:%02X:%02X:%02X\n",
                            bp->dflt_mac_addr[0], bp->dflt_mac_addr[1],
@@ -3383,6 +3402,7 @@ skip_init:
                goto error_free_int;
 
        bnxt_enable_int(bp);
+       bnxt_init_nic(bp);
 
        return 0;
 
@@ -3472,7 +3492,7 @@ bnxt_init_log(void)
 {
        bnxt_logtype_driver = rte_log_register("pmd.bnxt.driver");
        if (bnxt_logtype_driver >= 0)
-               rte_log_set_level(bnxt_logtype_driver, RTE_LOG_NOTICE);
+               rte_log_set_level(bnxt_logtype_driver, RTE_LOG_INFO);
 }
 
 RTE_PMD_REGISTER_PCI(net_bnxt, bnxt_rte_pmd);