* [PATCH net-next] tg3: improve PCI VPD access
@ 2021-01-22 12:08 Heiner Kallweit
2021-01-25 22:09 ` Michael Chan
0 siblings, 1 reply; 3+ messages in thread
From: Heiner Kallweit @ 2021-01-22 12:08 UTC (permalink / raw)
To: Jakub Kicinski, David Miller, Siva Reddy Kallam,
Prashant Sreedharan, Michael Chan
Cc: netdev
When working on the PCI VPD code I also tested with a Broadcom BCM95719
card. tg3 uses internal NVRAM access with this card, so I forced it to
PCI VPD mode for testing. PCI VPD access fails
(i + PCI_VPD_LRDT_TAG_SIZE + j > len) because only TG3_NVM_VPD_LEN (256)
bytes are read, but PCI VPD has 400 bytes on this card.
So add a constant TG3_NVM_PCI_VPD_MAX_LEN that defines the maximum
PCI VPD size. The actual VPD size is returned by pci_read_vpd().
In addition it's not worth looping over pci_read_vpd(). If we miss the
125ms timeout per VPD dword read then definitely something is wrong,
and if the tg3 module loading is killed then there's also not much
benefit in retrying the VPD read.
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
---
drivers/net/ethernet/broadcom/tg3.c | 30 +++++++++++------------------
drivers/net/ethernet/broadcom/tg3.h | 1 +
2 files changed, 12 insertions(+), 19 deletions(-)
diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
index 7def6d815..4ee9da498 100644
--- a/drivers/net/ethernet/broadcom/tg3.c
+++ b/drivers/net/ethernet/broadcom/tg3.c
@@ -12826,11 +12826,13 @@ static __be32 *tg3_vpd_readblock(struct tg3 *tp, u32 *vpdlen)
offset = tg3_nvram_logical_addr(tp, offset);
}
- }
- if (!offset || !len) {
- offset = TG3_NVM_VPD_OFF;
- len = TG3_NVM_VPD_LEN;
+ if (!offset || !len) {
+ offset = TG3_NVM_VPD_OFF;
+ len = TG3_NVM_VPD_LEN;
+ }
+ } else {
+ len = TG3_NVM_PCI_VPD_MAX_LEN;
}
buf = kmalloc(len, GFP_KERNEL);
@@ -12846,26 +12848,16 @@ static __be32 *tg3_vpd_readblock(struct tg3 *tp, u32 *vpdlen)
if (tg3_nvram_read_be32(tp, offset + i, &buf[i/4]))
goto error;
}
+ *vpdlen = len;
} else {
- u8 *ptr;
ssize_t cnt;
- unsigned int pos = 0;
-
- ptr = (u8 *)&buf[0];
- for (i = 0; pos < len && i < 3; i++, pos += cnt, ptr += cnt) {
- cnt = pci_read_vpd(tp->pdev, pos,
- len - pos, ptr);
- if (cnt == -ETIMEDOUT || cnt == -EINTR)
- cnt = 0;
- else if (cnt < 0)
- goto error;
- }
- if (pos != len)
+
+ cnt = pci_read_vpd(tp->pdev, 0, len, (u8 *)buf);
+ if (cnt < 0)
goto error;
+ *vpdlen = cnt;
}
- *vpdlen = len;
-
return buf;
error:
diff --git a/drivers/net/ethernet/broadcom/tg3.h b/drivers/net/ethernet/broadcom/tg3.h
index 1000c8940..46ec4fdfd 100644
--- a/drivers/net/ethernet/broadcom/tg3.h
+++ b/drivers/net/ethernet/broadcom/tg3.h
@@ -2101,6 +2101,7 @@
/* Hardware Legacy NVRAM layout */
#define TG3_NVM_VPD_OFF 0x100
#define TG3_NVM_VPD_LEN 256
+#define TG3_NVM_PCI_VPD_MAX_LEN 512
/* Hardware Selfboot NVRAM layout */
#define TG3_NVM_HWSB_CFG1 0x00000004
--
2.30.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH net-next] tg3: improve PCI VPD access
2021-01-22 12:08 [PATCH net-next] tg3: improve PCI VPD access Heiner Kallweit
@ 2021-01-25 22:09 ` Michael Chan
2021-01-25 23:24 ` Jakub Kicinski
0 siblings, 1 reply; 3+ messages in thread
From: Michael Chan @ 2021-01-25 22:09 UTC (permalink / raw)
To: Heiner Kallweit
Cc: Jakub Kicinski, David Miller, Siva Reddy Kallam,
Prashant Sreedharan, Michael Chan, netdev
[-- Attachment #1: Type: text/plain, Size: 918 bytes --]
On Fri, Jan 22, 2021 at 4:08 AM Heiner Kallweit <hkallweit1@gmail.com> wrote:
>
> When working on the PCI VPD code I also tested with a Broadcom BCM95719
> card. tg3 uses internal NVRAM access with this card, so I forced it to
> PCI VPD mode for testing. PCI VPD access fails
> (i + PCI_VPD_LRDT_TAG_SIZE + j > len) because only TG3_NVM_VPD_LEN (256)
> bytes are read, but PCI VPD has 400 bytes on this card.
>
> So add a constant TG3_NVM_PCI_VPD_MAX_LEN that defines the maximum
> PCI VPD size. The actual VPD size is returned by pci_read_vpd().
> In addition it's not worth looping over pci_read_vpd(). If we miss the
> 125ms timeout per VPD dword read then definitely something is wrong,
> and if the tg3 module loading is killed then there's also not much
> benefit in retrying the VPD read.
>
> Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Reviewed-by: Michael Chan <michael.chan@broadcom.com>
Thanks.
[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4166 bytes --]
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH net-next] tg3: improve PCI VPD access
2021-01-25 22:09 ` Michael Chan
@ 2021-01-25 23:24 ` Jakub Kicinski
0 siblings, 0 replies; 3+ messages in thread
From: Jakub Kicinski @ 2021-01-25 23:24 UTC (permalink / raw)
To: Michael Chan, Heiner Kallweit
Cc: David Miller, Siva Reddy Kallam, Prashant Sreedharan,
Michael Chan, netdev
On Mon, 25 Jan 2021 14:09:16 -0800 Michael Chan wrote:
> On Fri, Jan 22, 2021 at 4:08 AM Heiner Kallweit <hkallweit1@gmail.com> wrote:
> >
> > When working on the PCI VPD code I also tested with a Broadcom BCM95719
> > card. tg3 uses internal NVRAM access with this card, so I forced it to
> > PCI VPD mode for testing. PCI VPD access fails
> > (i + PCI_VPD_LRDT_TAG_SIZE + j > len) because only TG3_NVM_VPD_LEN (256)
> > bytes are read, but PCI VPD has 400 bytes on this card.
> >
> > So add a constant TG3_NVM_PCI_VPD_MAX_LEN that defines the maximum
> > PCI VPD size. The actual VPD size is returned by pci_read_vpd().
> > In addition it's not worth looping over pci_read_vpd(). If we miss the
> > 125ms timeout per VPD dword read then definitely something is wrong,
> > and if the tg3 module loading is killed then there's also not much
> > benefit in retrying the VPD read.
> >
> > Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
>
> Reviewed-by: Michael Chan <michael.chan@broadcom.com>
Applied, thank you!
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2021-01-25 23:25 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-01-22 12:08 [PATCH net-next] tg3: improve PCI VPD access Heiner Kallweit
2021-01-25 22:09 ` Michael Chan
2021-01-25 23:24 ` Jakub Kicinski
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.