Skip to content

Commit

Permalink
tg3: Add legacy bootcode version decoding
Browse files Browse the repository at this point in the history
This patch adds code to obtain the bootcode version for versions
of bootcode that do not use the new method.

Signed-off-by: Matt Carlson <mcarlson@broadcom.com>
Signed-off-by: Benjamin Li <benli@broadcom.com>
Signed-off-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 Feb 27, 2009
1 parent acd9c11 commit ff3a7cb
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 8 deletions.
39 changes: 31 additions & 8 deletions drivers/net/tg3.c
Original file line number Diff line number Diff line change
Expand Up @@ -11463,26 +11463,49 @@ static int __devinit tg3_fw_img_is_valid(struct tg3 *tp, u32 offset)

static void __devinit tg3_read_bc_ver(struct tg3 *tp)
{
u32 offset, start, ver_offset;
u32 val, offset, start, ver_offset;
int i;
bool newver = false;

if (tg3_nvram_read(tp, 0xc, &offset) ||
tg3_nvram_read(tp, 0x4, &start))
return;

offset = tg3_nvram_logical_addr(tp, offset);

if (!tg3_fw_img_is_valid(tp, offset) ||
tg3_nvram_read(tp, offset + 8, &ver_offset))
if (tg3_nvram_read(tp, offset, &val))
return;

offset = offset + ver_offset - start;
for (i = 0; i < 16; i += 4) {
__be32 v;
if (tg3_nvram_read_be32(tp, offset + i, &v))
if ((val & 0xfc000000) == 0x0c000000) {
if (tg3_nvram_read(tp, offset + 4, &val))
return;

if (val == 0)
newver = true;
}

if (newver) {
if (tg3_nvram_read(tp, offset + 8, &ver_offset))
return;

offset = offset + ver_offset - start;
for (i = 0; i < 16; i += 4) {
__be32 v;
if (tg3_nvram_read_be32(tp, offset + i, &v))
return;

memcpy(tp->fw_ver + i, &v, sizeof(v));
}
} else {
u32 major, minor;

if (tg3_nvram_read(tp, TG3_NVM_PTREV_BCVER, &ver_offset))
return;

memcpy(tp->fw_ver + i, &v, sizeof(v));
major = (ver_offset & TG3_NVM_BCVER_MAJMSK) >>
TG3_NVM_BCVER_MAJSFT;
minor = ver_offset & TG3_NVM_BCVER_MINMSK;
snprintf(&tp->fw_ver[0], 32, "v%d.%02d", major, minor);
}
}

Expand Down
4 changes: 4 additions & 0 deletions drivers/net/tg3.h
Original file line number Diff line number Diff line change
Expand Up @@ -1737,6 +1737,10 @@
#define TG3_NVM_DIRENT_SIZE 0xc
#define TG3_NVM_DIRTYPE_SHIFT 24
#define TG3_NVM_DIRTYPE_ASFINI 1
#define TG3_NVM_PTREV_BCVER 0x94
#define TG3_NVM_BCVER_MAJMSK 0x0000ff00
#define TG3_NVM_BCVER_MAJSFT 8
#define TG3_NVM_BCVER_MINMSK 0x000000ff

#define TG3_EEPROM_SB_F1R0_EDH_OFF 0x10
#define TG3_EEPROM_SB_F1R2_EDH_OFF 0x14
Expand Down

0 comments on commit ff3a7cb

Please sign in to comment.