Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 63a92fe6 authored by Hariprasad Shenai's avatar Hariprasad Shenai Committed by David S. Miller
Browse files

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: default avatarCasey Leedom <leedom@chelsio.com>
Signed-off-by: default avatarHariprasad Shenai <hariprasad@chelsio.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 444018a7
Loading
Loading
Loading
Loading
+10 −1
Original line number Original line Diff line number Diff line
@@ -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);