examples/ipsec-secgw: replace strncpy with strlcpy
[dpdk.git] / drivers / net / bnxt / bnxt_ethdev.c
index 54348de..348129d 100644 (file)
@@ -34,7 +34,8 @@ 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
@@ -69,10 +70,15 @@ int bnxt_logtype_driver;
 #define BROADCOM_DEV_ID_57407_MF 0x16ea
 #define BROADCOM_DEV_ID_57414_MF 0x16ec
 #define BROADCOM_DEV_ID_57416_MF 0x16ee
+#define BROADCOM_DEV_ID_58802 0xd802
+#define BROADCOM_DEV_ID_58804 0xd804
+#define BROADCOM_DEV_ID_58808 0x16f0
 
 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) },
@@ -107,6 +113,9 @@ static const struct rte_pci_id bnxt_pci_id_map[] = {
        { RTE_PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, BROADCOM_DEV_ID_57317_SFP) },
        { RTE_PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, BROADCOM_DEV_ID_57414_MF) },
        { RTE_PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, BROADCOM_DEV_ID_57416_MF) },
+       { RTE_PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, BROADCOM_DEV_ID_58802) },
+       { RTE_PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, BROADCOM_DEV_ID_58804) },
+       { RTE_PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, BROADCOM_DEV_ID_58808) },
        { .vendor_id = 0, /* sentinel */ },
 };
 
@@ -386,10 +395,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;
 }
 
@@ -585,7 +590,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;
 
@@ -1403,7 +1408,7 @@ bnxt_vlan_offload_set_op(struct rte_eth_dev *dev, int mask)
        return 0;
 }
 
-static void
+static int
 bnxt_set_default_mac_addr_op(struct rte_eth_dev *dev, struct ether_addr *addr)
 {
        struct bnxt *bp = (struct bnxt *)dev->data->dev_private;
@@ -1413,7 +1418,7 @@ bnxt_set_default_mac_addr_op(struct rte_eth_dev *dev, struct ether_addr *addr)
        int rc;
 
        if (BNXT_VF(bp))
-               return;
+               return -EPERM;
 
        memcpy(bp->mac_addr, addr, sizeof(bp->mac_addr));
 
@@ -1423,7 +1428,7 @@ bnxt_set_default_mac_addr_op(struct rte_eth_dev *dev, struct ether_addr *addr)
                        continue;
                rc = bnxt_hwrm_clear_l2_filter(bp, filter);
                if (rc)
-                       break;
+                       return rc;
                memcpy(filter->l2_addr, bp->mac_addr, ETHER_ADDR_LEN);
                memset(filter->l2_addr_mask, 0xff, ETHER_ADDR_LEN);
                filter->flags |= HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_PATH_RX;
@@ -1432,10 +1437,12 @@ bnxt_set_default_mac_addr_op(struct rte_eth_dev *dev, struct ether_addr *addr)
                        HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_L2_ADDR_MASK;
                rc = bnxt_hwrm_set_l2_filter(bp, vnic->fw_vnic_id, filter);
                if (rc)
-                       break;
+                       return rc;
                filter->mac_index = 0;
                PMD_DRV_LOG(DEBUG, "Set MAC addr\n");
        }
+
+       return 0;
 }
 
 static int
@@ -3055,7 +3062,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;
 }
@@ -3083,11 +3091,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:
 
@@ -3121,7 +3141,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)
@@ -3375,6 +3394,7 @@ skip_init:
                goto error_free_int;
 
        bnxt_enable_int(bp);
+       bnxt_init_nic(bp);
 
        return 0;
 
@@ -3464,7 +3484,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);