cxgb4: Fixed the code to use correct length for part number
Previously it was using the length value of serial number. Also added macro for VPD unique identifier (0x82). Signed-off-by: Casey Leedom <leedom@chelsio.com> Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
444018a7f1
commit
63a92fe6f7
|
@ -566,6 +566,7 @@ int t4_memory_rw(struct adapter *adap, int win, int mtype, u32 addr,
|
||||||
#define VPD_BASE 0x400
|
#define VPD_BASE 0x400
|
||||||
#define VPD_BASE_OLD 0
|
#define VPD_BASE_OLD 0
|
||||||
#define VPD_LEN 1024
|
#define VPD_LEN 1024
|
||||||
|
#define CHELSIO_VPD_UNIQUE_ID 0x82
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* t4_seeprom_wp - enable/disable EEPROM write protection
|
* t4_seeprom_wp - enable/disable EEPROM write protection
|
||||||
|
@ -603,7 +604,14 @@ int get_vpd_params(struct adapter *adapter, struct vpd_params *p)
|
||||||
ret = pci_read_vpd(adapter->pdev, VPD_BASE, sizeof(u32), vpd);
|
ret = pci_read_vpd(adapter->pdev, VPD_BASE, sizeof(u32), vpd);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto out;
|
goto out;
|
||||||
addr = *vpd == 0x82 ? VPD_BASE : VPD_BASE_OLD;
|
|
||||||
|
/* The VPD shall have a unique identifier specified by the PCI SIG.
|
||||||
|
* For chelsio adapters, the identifier is 0x82. The first byte of a VPD
|
||||||
|
* shall be CHELSIO_VPD_UNIQUE_ID (0x82). The VPD programming software
|
||||||
|
* is expected to automatically put this entry at the
|
||||||
|
* beginning of the VPD.
|
||||||
|
*/
|
||||||
|
addr = *vpd == CHELSIO_VPD_UNIQUE_ID ? VPD_BASE : VPD_BASE_OLD;
|
||||||
|
|
||||||
ret = pci_read_vpd(adapter->pdev, addr, VPD_LEN, vpd);
|
ret = pci_read_vpd(adapter->pdev, addr, VPD_LEN, vpd);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
|
@ -667,6 +675,7 @@ int get_vpd_params(struct adapter *adapter, struct vpd_params *p)
|
||||||
i = pci_vpd_info_field_size(vpd + sn - PCI_VPD_INFO_FLD_HDR_SIZE);
|
i = pci_vpd_info_field_size(vpd + sn - PCI_VPD_INFO_FLD_HDR_SIZE);
|
||||||
memcpy(p->sn, vpd + sn, min(i, SERNUM_LEN));
|
memcpy(p->sn, vpd + sn, min(i, SERNUM_LEN));
|
||||||
strim(p->sn);
|
strim(p->sn);
|
||||||
|
i = pci_vpd_info_field_size(vpd + pn - PCI_VPD_INFO_FLD_HDR_SIZE);
|
||||||
memcpy(p->pn, vpd + pn, min(i, PN_LEN));
|
memcpy(p->pn, vpd + pn, min(i, PN_LEN));
|
||||||
strim(p->pn);
|
strim(p->pn);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue