@@ -3140,8 +3140,6 @@ static int tg3_nvram_write_block_buffered(struct tg3 *tp, u32 offset, u32 len,
phy_addr = tg3_nvram_phys_addr(tp, offset);
- tw32(NVRAM_ADDR, phy_addr);
-
nvram_cmd = NVRAM_CMD_GO | NVRAM_CMD_DONE | NVRAM_CMD_WR;
if (page_off == 0 || i == 0)
@@ -3152,6 +3150,11 @@ static int tg3_nvram_write_block_buffered(struct tg3 *tp, u32 offset, u32 len,
if (i == (len - 4))
nvram_cmd |= NVRAM_CMD_LAST;
+ if ((nvram_cmd & NVRAM_CMD_FIRST) ||
+ !tg3_flag(tp, FLASH) ||
+ !tg3_flag(tp, 57765_PLUS))
+ tw32(NVRAM_ADDR, phy_addr);
+
if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5752 &&
!tg3_flag(tp, 5755_PLUS) &&
(tp->nvram_jedecnum == JEDEC_ST) &&
On newer devices, the hardware expects the NVRAM address register to be written only once per NVRAM page. To do otherwise causes NVRAM corruption. This patch fixes the problem. Signed-off-by: Matt Carlson <mcarlson@broadcom.com> --- drivers/net/ethernet/broadcom/tg3.c | 7 +++++-- 1 files changed, 5 insertions(+), 2 deletions(-)