cxgb4: add new routine to get adapter info
authorHariprasad Shenai <hariprasad@chelsio.com>
Tue, 26 Apr 2016 14:40:22 +0000 (20:10 +0530)
committerDavid S. Miller <davem@davemloft.net>
Tue, 26 Apr 2016 17:23:56 +0000 (13:23 -0400)
Add new routine to print out general adapter information (various version
numbers, adapter name, part number, serial number, etc.) and remove
redundant information dumped in the Port Information.

Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/chelsio/cxgb4/cxgb4.h
drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
drivers/net/ethernet/chelsio/cxgb4/t4_hw.h

index 326d4009525e1abf5cae7674c29b65a7d76af66a..459775884cad17b236e03df3c73dd4cecb954abf 100644 (file)
@@ -324,7 +324,9 @@ struct adapter_params {
        unsigned int sf_fw_start;         /* start of FW image in flash */
 
        unsigned int fw_vers;
+       unsigned int bs_vers;           /* bootstrap version */
        unsigned int tp_vers;
+       unsigned int er_vers;           /* expansion ROM version */
        u8 api_vers[7];
 
        unsigned short mtus[NMTUS];
@@ -731,6 +733,7 @@ struct adapter {
        u32 t4_bar0;
        struct pci_dev *pdev;
        struct device *pdev_dev;
+       const char *name;
        unsigned int mbox;
        unsigned int pf;
        unsigned int flags;
@@ -1306,6 +1309,7 @@ int t4_fl_pkt_align(struct adapter *adap);
 unsigned int t4_flash_cfg_addr(struct adapter *adapter);
 int t4_check_fw_version(struct adapter *adap);
 int t4_get_fw_version(struct adapter *adapter, u32 *vers);
+int t4_get_bs_version(struct adapter *adapter, u32 *vers);
 int t4_get_tp_version(struct adapter *adapter, u32 *vers);
 int t4_get_exprom_version(struct adapter *adapter, u32 *vers);
 int t4_prep_fw(struct adapter *adap, struct fw_info *fw_info,
index a1e329ec24cd1fd8e6d6d2cf68a8d55d886e69d1..b8dc7921b25883133b423b5c2fb7fcea3b6e4502 100644 (file)
@@ -3738,7 +3738,10 @@ static int adap_init0(struct adapter *adap)
         * is excessively mismatched relative to the driver.)
         */
        t4_get_fw_version(adap, &adap->params.fw_vers);
+       t4_get_bs_version(adap, &adap->params.bs_vers);
        t4_get_tp_version(adap, &adap->params.tp_vers);
+       t4_get_exprom_version(adap, &adap->params.er_vers);
+
        ret = t4_check_fw_version(adap);
        /* If firmware is too old (not supported by driver) force an update. */
        if (ret)
@@ -4652,6 +4655,68 @@ static void cxgb4_check_pcie_caps(struct adapter *adap)
                         "suggested for optimal performance.\n");
 }
 
+/* Dump basic information about the adapter */
+static void print_adapter_info(struct adapter *adapter)
+{
+       /* Device information */
+       dev_info(adapter->pdev_dev, "Chelsio %s rev %d\n",
+                adapter->params.vpd.id,
+                CHELSIO_CHIP_RELEASE(adapter->params.chip));
+       dev_info(adapter->pdev_dev, "S/N: %s, P/N: %s\n",
+                adapter->params.vpd.sn, adapter->params.vpd.pn);
+
+       /* Firmware Version */
+       if (!adapter->params.fw_vers)
+               dev_warn(adapter->pdev_dev, "No firmware loaded\n");
+       else
+               dev_info(adapter->pdev_dev, "Firmware version: %u.%u.%u.%u\n",
+                        FW_HDR_FW_VER_MAJOR_G(adapter->params.fw_vers),
+                        FW_HDR_FW_VER_MINOR_G(adapter->params.fw_vers),
+                        FW_HDR_FW_VER_MICRO_G(adapter->params.fw_vers),
+                        FW_HDR_FW_VER_BUILD_G(adapter->params.fw_vers));
+
+       /* Bootstrap Firmware Version. (Some adapters don't have Bootstrap
+        * Firmware, so dev_info() is more appropriate here.)
+        */
+       if (!adapter->params.bs_vers)
+               dev_info(adapter->pdev_dev, "No bootstrap loaded\n");
+       else
+               dev_info(adapter->pdev_dev, "Bootstrap version: %u.%u.%u.%u\n",
+                        FW_HDR_FW_VER_MAJOR_G(adapter->params.bs_vers),
+                        FW_HDR_FW_VER_MINOR_G(adapter->params.bs_vers),
+                        FW_HDR_FW_VER_MICRO_G(adapter->params.bs_vers),
+                        FW_HDR_FW_VER_BUILD_G(adapter->params.bs_vers));
+
+       /* TP Microcode Version */
+       if (!adapter->params.tp_vers)
+               dev_warn(adapter->pdev_dev, "No TP Microcode loaded\n");
+       else
+               dev_info(adapter->pdev_dev,
+                        "TP Microcode version: %u.%u.%u.%u\n",
+                        FW_HDR_FW_VER_MAJOR_G(adapter->params.tp_vers),
+                        FW_HDR_FW_VER_MINOR_G(adapter->params.tp_vers),
+                        FW_HDR_FW_VER_MICRO_G(adapter->params.tp_vers),
+                        FW_HDR_FW_VER_BUILD_G(adapter->params.tp_vers));
+
+       /* Expansion ROM version */
+       if (!adapter->params.er_vers)
+               dev_info(adapter->pdev_dev, "No Expansion ROM loaded\n");
+       else
+               dev_info(adapter->pdev_dev,
+                        "Expansion ROM version: %u.%u.%u.%u\n",
+                        FW_HDR_FW_VER_MAJOR_G(adapter->params.er_vers),
+                        FW_HDR_FW_VER_MINOR_G(adapter->params.er_vers),
+                        FW_HDR_FW_VER_MICRO_G(adapter->params.er_vers),
+                        FW_HDR_FW_VER_BUILD_G(adapter->params.er_vers));
+
+       /* Software/Hardware configuration */
+       dev_info(adapter->pdev_dev, "Configuration: %sNIC %s, %s capable\n",
+                is_offload(adapter) ? "R" : "",
+                ((adapter->flags & USING_MSIX) ? "MSI-X" :
+                 (adapter->flags & USING_MSI) ? "MSI" : ""),
+                is_offload(adapter) ? "Offload" : "non-Offload");
+}
+
 static void print_port_info(const struct net_device *dev)
 {
        char buf[80];
@@ -4679,14 +4744,8 @@ static void print_port_info(const struct net_device *dev)
                --bufp;
        sprintf(bufp, "BASE-%s", t4_get_port_type_description(pi->port_type));
 
-       netdev_info(dev, "Chelsio %s rev %d %s %sNIC %s\n",
-                   adap->params.vpd.id,
-                   CHELSIO_CHIP_RELEASE(adap->params.chip), buf,
-                   is_offload(adap) ? "R" : "",
-                   (adap->flags & USING_MSIX) ? " MSI-X" :
-                   (adap->flags & USING_MSI) ? " MSI" : "");
-       netdev_info(dev, "S/N: %s, P/N: %s\n",
-                   adap->params.vpd.sn, adap->params.vpd.pn);
+       netdev_info(dev, "%s: Chelsio %s (%s) %s\n",
+                   dev->name, adap->params.vpd.id, adap->name, buf);
 }
 
 static void enable_pcie_relaxed_ordering(struct pci_dev *dev)
@@ -4844,6 +4903,7 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
        adapter->regs = regs;
        adapter->pdev = pdev;
        adapter->pdev_dev = &pdev->dev;
+       adapter->name = pci_name(pdev);
        adapter->mbox = func;
        adapter->pf = func;
        adapter->msg_enable = dflt_msg_enable;
@@ -5074,6 +5134,8 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
        if (is_offload(adapter))
                attach_ulds(adapter);
 
+       print_adapter_info(adapter);
+
 sriov:
 #ifdef CONFIG_PCI_IOV
        if (func < ARRAY_SIZE(num_vf) && num_vf[func] > 0)
index 71586a3e0f613a83118281e5eb80f369d4c567c9..2ced24fc569d812d1cf1da280aa556be2650e2c0 100644 (file)
@@ -2936,6 +2936,20 @@ int t4_get_fw_version(struct adapter *adapter, u32 *vers)
                             vers, 0);
 }
 
+/**
+ *     t4_get_bs_version - read the firmware bootstrap version
+ *     @adapter: the adapter
+ *     @vers: where to place the version
+ *
+ *     Reads the FW Bootstrap version from flash.
+ */
+int t4_get_bs_version(struct adapter *adapter, u32 *vers)
+{
+       return t4_read_flash(adapter, FLASH_FWBOOTSTRAP_START +
+                            offsetof(struct fw_hdr, fw_ver), 1,
+                            vers, 0);
+}
+
 /**
  *     t4_get_tp_version - read the TP microcode version
  *     @adapter: the adapter
index 2fc60e83a7a154c7e12751684a9300cd3a17a6c1..7f59ca458431d1c25c4f680a01c713e2858c730a 100644 (file)
@@ -220,6 +220,13 @@ enum {
        FLASH_FW_START = FLASH_START(FLASH_FW_START_SEC),
        FLASH_FW_MAX_SIZE = FLASH_MAX_SIZE(FLASH_FW_NSECS),
 
+       /* Location of bootstrap firmware image in FLASH.
+        */
+       FLASH_FWBOOTSTRAP_START_SEC = 27,
+       FLASH_FWBOOTSTRAP_NSECS = 1,
+       FLASH_FWBOOTSTRAP_START = FLASH_START(FLASH_FWBOOTSTRAP_START_SEC),
+       FLASH_FWBOOTSTRAP_MAX_SIZE = FLASH_MAX_SIZE(FLASH_FWBOOTSTRAP_NSECS),
+
        /*
         * iSCSI persistent/crash information.
         */