diff options
-rw-r--r-- | drivers/net/ethernet/chelsio/cxgb4/t4_hw.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c index 6b92c4c5a241..adf16a54da26 100644 --- a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c +++ b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c | |||
@@ -566,6 +566,7 @@ int t4_memory_rw(struct adapter *adap, int win, int mtype, u32 addr, | |||
566 | #define VPD_BASE 0x400 | 566 | #define VPD_BASE 0x400 |
567 | #define VPD_BASE_OLD 0 | 567 | #define VPD_BASE_OLD 0 |
568 | #define VPD_LEN 1024 | 568 | #define VPD_LEN 1024 |
569 | #define CHELSIO_VPD_UNIQUE_ID 0x82 | ||
569 | 570 | ||
570 | /** | 571 | /** |
571 | * t4_seeprom_wp - enable/disable EEPROM write protection | 572 | * t4_seeprom_wp - enable/disable EEPROM write protection |
@@ -603,7 +604,14 @@ int get_vpd_params(struct adapter *adapter, struct vpd_params *p) | |||
603 | ret = pci_read_vpd(adapter->pdev, VPD_BASE, sizeof(u32), vpd); | 604 | ret = pci_read_vpd(adapter->pdev, VPD_BASE, sizeof(u32), vpd); |
604 | if (ret < 0) | 605 | if (ret < 0) |
605 | goto out; | 606 | goto out; |
606 | addr = *vpd == 0x82 ? VPD_BASE : VPD_BASE_OLD; | 607 | |
608 | /* The VPD shall have a unique identifier specified by the PCI SIG. | ||
609 | * For chelsio adapters, the identifier is 0x82. The first byte of a VPD | ||
610 | * shall be CHELSIO_VPD_UNIQUE_ID (0x82). The VPD programming software | ||
611 | * is expected to automatically put this entry at the | ||
612 | * beginning of the VPD. | ||
613 | */ | ||
614 | addr = *vpd == CHELSIO_VPD_UNIQUE_ID ? VPD_BASE : VPD_BASE_OLD; | ||
607 | 615 | ||
608 | ret = pci_read_vpd(adapter->pdev, addr, VPD_LEN, vpd); | 616 | ret = pci_read_vpd(adapter->pdev, addr, VPD_LEN, vpd); |
609 | if (ret < 0) | 617 | if (ret < 0) |
@@ -667,6 +675,7 @@ int get_vpd_params(struct adapter *adapter, struct vpd_params *p) | |||
667 | i = pci_vpd_info_field_size(vpd + sn - PCI_VPD_INFO_FLD_HDR_SIZE); | 675 | i = pci_vpd_info_field_size(vpd + sn - PCI_VPD_INFO_FLD_HDR_SIZE); |
668 | memcpy(p->sn, vpd + sn, min(i, SERNUM_LEN)); | 676 | memcpy(p->sn, vpd + sn, min(i, SERNUM_LEN)); |
669 | strim(p->sn); | 677 | strim(p->sn); |
678 | i = pci_vpd_info_field_size(vpd + pn - PCI_VPD_INFO_FLD_HDR_SIZE); | ||
670 | memcpy(p->pn, vpd + pn, min(i, PN_LEN)); | 679 | memcpy(p->pn, vpd + pn, min(i, PN_LEN)); |
671 | strim(p->pn); | 680 | strim(p->pn); |
672 | 681 | ||