Skip to content

Commit

Permalink
[TG3]: Fix nvram arbitration bugs.
Browse files Browse the repository at this point in the history
The nvram arbitration rules were not strictly followed in a few places
and this could lead to reading corrupted values from the nvram.

Signed-off-by: Michael Chan <mchan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Michael Chan authored and David S. Miller committed Dec 14, 2005
1 parent 65ab592 commit 381291b
Showing 1 changed file with 8 additions and 2 deletions.
10 changes: 8 additions & 2 deletions drivers/net/tg3.c
Original file line number Diff line number Diff line change
Expand Up @@ -8533,6 +8533,7 @@ static void __devinit tg3_nvram_init(struct tg3 *tp)
GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701) {
tp->tg3_flags |= TG3_FLAG_NVRAM;

tg3_nvram_lock(tp);
tg3_enable_nvram_access(tp);

if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752)
Expand All @@ -8543,6 +8544,7 @@ static void __devinit tg3_nvram_init(struct tg3 *tp)
tg3_get_nvram_size(tp);

tg3_disable_nvram_access(tp);
tg3_nvram_unlock(tp);

} else {
tp->tg3_flags &= ~(TG3_FLAG_NVRAM | TG3_FLAG_NVRAM_BUFFERED);
Expand Down Expand Up @@ -8640,10 +8642,10 @@ static int tg3_nvram_read(struct tg3 *tp, u32 offset, u32 *val)
if (ret == 0)
*val = swab32(tr32(NVRAM_RDDATA));

tg3_nvram_unlock(tp);

tg3_disable_nvram_access(tp);

tg3_nvram_unlock(tp);

return ret;
}

Expand Down Expand Up @@ -8728,6 +8730,10 @@ static int tg3_nvram_write_block_unbuffered(struct tg3 *tp, u32 offset, u32 len,

offset = offset + (pagesize - page_off);

/* Nvram lock released by tg3_nvram_read() above,
* so need to get it again.
*/
tg3_nvram_lock(tp);
tg3_enable_nvram_access(tp);

/*
Expand Down

0 comments on commit 381291b

Please sign in to comment.