cxgb4: Allow for backward compatibility with new VPD scheme.
New scheme calls for 3rd party VPD at offset 0x0 and Chelsio VPD at offset 0x400 of the function. If no 3rd party VPD is present, then a copy of Chelsio's VPD will be at offset 0x0 to keep in line with PCI spec which requires the VPD to be present at offset 0x0. Signed-off-by: Santosh Rastapur <santosh@chelsio.com> Signed-off-by: Vipul Pandya <vipul@chelsio.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
7c6baa304b
commit
47ce9c4821
|
@ -497,8 +497,9 @@ int t4_memory_write(struct adapter *adap, int mtype, u32 addr, u32 len,
|
|||
}
|
||||
|
||||
#define EEPROM_STAT_ADDR 0x7bfc
|
||||
#define VPD_BASE 0
|
||||
#define VPD_LEN 512
|
||||
#define VPD_BASE 0x400
|
||||
#define VPD_BASE_OLD 0
|
||||
|
||||
/**
|
||||
* t4_seeprom_wp - enable/disable EEPROM write protection
|
||||
|
@ -524,7 +525,7 @@ int t4_seeprom_wp(struct adapter *adapter, bool enable)
|
|||
int get_vpd_params(struct adapter *adapter, struct vpd_params *p)
|
||||
{
|
||||
u32 cclk_param, cclk_val;
|
||||
int i, ret;
|
||||
int i, ret, addr;
|
||||
int ec, sn;
|
||||
u8 *vpd, csum;
|
||||
unsigned int vpdr_len, kw_offset, id_len;
|
||||
|
@ -533,7 +534,12 @@ int get_vpd_params(struct adapter *adapter, struct vpd_params *p)
|
|||
if (!vpd)
|
||||
return -ENOMEM;
|
||||
|
||||
ret = pci_read_vpd(adapter->pdev, VPD_BASE, VPD_LEN, vpd);
|
||||
ret = pci_read_vpd(adapter->pdev, VPD_BASE, sizeof(u32), vpd);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
addr = *vpd == 0x82 ? VPD_BASE : VPD_BASE_OLD;
|
||||
|
||||
ret = pci_read_vpd(adapter->pdev, addr, VPD_LEN, vpd);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
|
||||
|
|
Loading…
Reference in New Issue