Skip to content

Commit

Permalink
tg3: Use pci_read_vpd() instead of private method
Browse files Browse the repository at this point in the history
If the driver needs to use PCI configuration space to read the VPD data,
the accesses could collide with the pci_read_vpd() function.  This patch
converts the driver to use pci_read_vpd() to avoid any potential
collisions.

Signed-off-by: Matt Carlson <mcarlson@broadcom.com>
Reviewed-by: Michael Chan <mchan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Matt Carlson authored and David S. Miller committed Dec 3, 2009
1 parent 141518c commit 94c982b
Showing 1 changed file with 12 additions and 23 deletions.
35 changes: 12 additions & 23 deletions drivers/net/tg3.c
Original file line number Diff line number Diff line change
Expand Up @@ -12455,31 +12455,20 @@ static void __devinit tg3_read_partno(struct tg3 *tp)
memcpy(&vpd_data[i], &tmp, sizeof(tmp));
}
} else {
int vpd_cap;

vpd_cap = pci_find_capability(tp->pdev, PCI_CAP_ID_VPD);
for (i = 0; i < TG3_NVM_VPD_LEN; i += 4) {
u32 tmp, j = 0;
__le32 v;
u16 tmp16;

pci_write_config_word(tp->pdev, vpd_cap + PCI_VPD_ADDR,
i);
while (j++ < 100) {
pci_read_config_word(tp->pdev, vpd_cap +
PCI_VPD_ADDR, &tmp16);
if (tmp16 & 0x8000)
break;
msleep(1);
}
if (!(tmp16 & 0x8000))
ssize_t cnt;
unsigned int pos = 0, i = 0;

for (; pos < TG3_NVM_VPD_LEN && i < 3; i++, pos += cnt) {
cnt = pci_read_vpd(tp->pdev, pos,
TG3_NVM_VPD_LEN - pos,
&vpd_data[pos]);
if (cnt == -ETIMEDOUT || -EINTR)
cnt = 0;
else if (cnt < 0)
goto out_not_found;

pci_read_config_dword(tp->pdev, vpd_cap + PCI_VPD_DATA,
&tmp);
v = cpu_to_le32(tmp);
memcpy(&vpd_data[i], &v, sizeof(v));
}
if (pos != TG3_NVM_VPD_LEN)
goto out_not_found;
}

/* Now parse and find the part number. */
Expand Down

0 comments on commit 94c982b

Please sign in to comment.