BNX2X: usability fixups
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 4 Mar 2015 19:12:26 +0000 (14:12 -0500)
committerBarret Rhoden <brho@cs.berkeley.edu>
Wed, 4 Mar 2015 20:34:30 +0000 (15:34 -0500)
For whatever reason, we can run with the max number of queues on ether0,
but not on ether1.  From poking around, this happened once we started
attaching after resetting both NIC functions (ether0 and ether1).  I had
tried this at one point, but it didn't work.  For whateve reason, it
does now.

But ether1 will still die with the same old MC assert - unless both NICs
are limited to 1 queue.  Then they both work fine.  Note that if the
NICs have different values for NQ (say, 15 for ether0 and 1 for ether1),
*ether0* will get the MC assert.

Other changes include making sure init only happens when we actually
have a bnx2x NIC (by contrast, pnp always happens), and cleaning up the
print debugging.

Unfortunately, we don't have a way to send parameters to attach yet, so
you'll have to manually toggle the debug level if you want to debug
while attaching.

kern/drivers/net/bnx2x/bnx2x.h
kern/drivers/net/bnx2x/bnx2x_cmn.c
kern/drivers/net/bnx2x/bnx2x_dev.c
kern/drivers/net/bnx2x/bnx2x_main.c

index 1aec4b4..dc8b116 100644 (file)
@@ -62,6 +62,7 @@ enum bnx2x_int_mode {
 #define BNX2X_MSG_DMAE                 0x0080000 /* was: NETIF_MSG_HW */
 #define BNX2X_MSG_SP                   0x0100000 /* was: NETIF_MSG_INTR */
 #define BNX2X_MSG_FP                   0x0200000 /* was: NETIF_MSG_INTR */
+#define BNX2X_MSG_INFO                 0x0400000
 #define BNX2X_MSG_IOV                  0x0800000
 #define BNX2X_MSG_PTP                  0x1000000
 #define BNX2X_MSG_IDLE                 0x2000000 /* used for idle check*/
@@ -116,7 +117,7 @@ do {                                                                \
        pr_err("[%s:%d]" fmt, __func__, __LINE__, ##__VA_ARGS__)
 
 /* before we have a dev->name use dev_info() */
-#define BNX2X_DEV_INFO(fmt, ...) pr_info(fmt, ##__VA_ARGS__)
+#define BNX2X_DEV_INFO(fmt, ...) DP(BNX2X_MSG_INFO, fmt, ##__VA_ARGS__)
 
 /* Error handling */
 void bnx2x_panic_dump(struct bnx2x *bp, bool disable_int);
index ec5cb0c..021b19a 100644 (file)
@@ -60,9 +60,6 @@ static int bnx2x_calc_num_queues(struct bnx2x *bp)
                nq = 1;
 
        nq = CLAMP(nq, 1, BNX2X_MAX_QUEUES(bp));
-       /* AKAROS_PORT XME.  For some reason, we can't handle 8 queues.  The linux
-        * driver can...  We can handle 4 *total* queues, one per function. */
-       nq = MIN(nq, 2);
        return nq;
 }
 
index 9c9303a..60e276b 100644 (file)
@@ -317,9 +317,6 @@ static void bnx2x_attach(struct ether *edev)
        bnx2x_open(ctlr->edev);
        bnx2x_set_rx_mode(edev);
 
-       /* shut it up for now.  too much stats output */
-       ctlr->msg_enable = 0;
-
        ctlr->attached = TRUE;
        qunlock(&ctlr->alock);
        /* not sure if we'll need/want any of the other 9ns stuff */
@@ -381,8 +378,6 @@ static void bnx2x_pci(void)
        struct bnx2x *ctlr;
        const struct pci_device_id *pci_id;
 
-       bnx2x_init();
-
        STAILQ_FOREACH(pcidev, &pci_devices, all_dev) {
                /* This checks that pcidev is a Network Controller for Ethernet */
                if (pcidev->class != 0x02 || pcidev->subclass != 0x00)
@@ -393,6 +388,9 @@ static void bnx2x_pci(void)
                if (!pci_id)
                        continue;
 
+               /* only run bnx2x's __init method once we know we have one */
+               run_once(bnx2x_init());
+
                printk("bnx2x driver found 0x%04x:%04x at %02x:%02x.%x\n",
                           pcidev->ven_id, pcidev->dev_id,
                           pcidev->bus, pcidev->dev, pcidev->func);
index c01293e..d108d99 100644 (file)
@@ -53,7 +53,7 @@ MODULE_FIRMWARE(FW_FILE_NAME_E1);
 MODULE_FIRMWARE(FW_FILE_NAME_E1H);
 MODULE_FIRMWARE(FW_FILE_NAME_E2);
 
-int bnx2x_num_queues;
+int bnx2x_num_queues = 16;     // AKAROS_PORT try for the max
 module_param_named(num_queues, bnx2x_num_queues, int, S_IRUGO);
 MODULE_PARM_DESC(num_queues,
                 " Set number of queues (default is as a number of CPUs)");
@@ -75,7 +75,8 @@ static int mrrs = -1;
 module_param(mrrs, int, S_IRUGO);
 MODULE_PARM_DESC(mrrs, " Force Max Read Req Size (0..3) (for debug)");
 
-static int debug;
+/* Set this for debugging during boot */
+static int debug; // = 0xffffffff & ~BNX2X_MSG_DMAE;
 module_param(debug, int, S_IRUGO);
 MODULE_PARM_DESC(debug, " Default debug msglevel");
 
@@ -10964,8 +10965,7 @@ static void bnx2x_get_common_hwinfo(struct bnx2x *bp)
        val3 = SHMEM_RD(bp, dev_info.shared_hw_config.part_num[8]);
        val4 = SHMEM_RD(bp, dev_info.shared_hw_config.part_num[12]);
 
-       dev_info(&bp->pdev->dev, "part number %X-%X-%X-%X\n",
-                val, val2, val3, val4);
+       BNX2X_DEV_INFO("part number %x-%x-%x-%x\n", val, val2, val3, val4);
 }
 
 #define IGU_FID(val)   GET_FIELD((val), IGU_REG_MAPPING_MEMORY_FID)
@@ -12952,7 +12952,6 @@ static int bnx2x_init_dev(struct bnx2x *bp, struct pci_device *pdev,
        dev->dcbnl_ops = &bnx2x_dcbnl_ops;
 #endif
 
-       warn("NEED TO DO MII STUFF");
 #if 0 // AKAROS_PORT MII XME
        /* get_port_hwinfo() will set prtad and mmds properly */
        bp->mdio.prtad = MDIO_PRTAD_NONE;
@@ -13269,7 +13268,6 @@ static int bnx2x_get_num_non_def_sbs(struct pci_device *pdev, int cnic_cnt)
                dev_info(&pdev->dev, "no msix capability found\n");
                return 1 + cnic_cnt;
        }
-       dev_info(&pdev->dev, "msix capability found\n");
 
        /*
         * The value in the PCI configuration space is the index of the last
@@ -13429,7 +13427,7 @@ int bnx2x_init_one(struct ether *dev, struct bnx2x *bp,
 
        bp->igu_sb_cnt = max_non_def_sbs;
        bp->igu_base_addr = IS_VF(bp) ? PXP_VF_ADDR_IGU_START : BAR_IGU_INTMEM;
-       bp->msg_enable = 0xffffffff & ~BNX2X_MSG_DMAE;
+       bp->msg_enable = debug;
        bp->cnic_support = cnic_cnt;
        bp->cnic_probe = bnx2x_cnic_probe;