When we attach to adapter, print VPD Part Number instead of Engineering Change field.
Based on original work by Casey Leedom <leedom@chelsio.com>
Signed-off-by: Kumar Sanghvi <kumaras@chelsio.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
        SERNUM_LEN = 24,    /* Serial # length */
        EC_LEN     = 16,    /* E/C length */
        ID_LEN     = 16,    /* ID length */
+       PN_LEN     = 16,    /* Part Number length */
 };
 
 enum {
        u8 ec[EC_LEN + 1];
        u8 sn[SERNUM_LEN + 1];
        u8 id[ID_LEN + 1];
+       u8 pn[PN_LEN + 1];
 };
 
 struct pci_params {
 
                    is_offload(adap) ? "R" : "", adap->params.pci.width, spd,
                    (adap->flags & USING_MSIX) ? " MSI-X" :
                    (adap->flags & USING_MSI) ? " MSI" : "");
-       netdev_info(dev, "S/N: %s, E/C: %s\n",
-                   adap->params.vpd.sn, adap->params.vpd.ec);
+       netdev_info(dev, "S/N: %s, P/N: %s\n",
+                   adap->params.vpd.sn, adap->params.vpd.pn);
 }
 
 static void enable_pcie_relaxed_ordering(struct pci_dev *dev)
 
 {
        u32 cclk_param, cclk_val;
        int i, ret, addr;
-       int ec, sn;
+       int ec, sn, pn;
        u8 *vpd, csum;
        unsigned int vpdr_len, kw_offset, id_len;
 
 
        FIND_VPD_KW(ec, "EC");
        FIND_VPD_KW(sn, "SN");
+       FIND_VPD_KW(pn, "PN");
 #undef FIND_VPD_KW
 
        memcpy(p->id, vpd + PCI_VPD_LRDT_TAG_SIZE, id_len);
        i = pci_vpd_info_field_size(vpd + sn - PCI_VPD_INFO_FLD_HDR_SIZE);
        memcpy(p->sn, vpd + sn, min(i, SERNUM_LEN));
        strim(p->sn);
+       memcpy(p->pn, vpd + pn, min(i, PN_LEN));
+       strim(p->pn);
 
        /*
         * Ask firmware for the Core Clock since it knows how to translate the