tg3: Add legacy bootcode version decoding
Subsystems (2)
PATCH 10/14 tg3: Add legacy bootcode version decoding
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 <[email protected]>
Signed-off-by Benjamin Li <[email protected]>
Signed-off-by Michael Chan <[email protected]>
--- drivers/net/tg3.c | 39 +++++++++++++++++++++++++++++++-------- drivers/net/tg3.h | 4 ++++ 2 files changed, 35 insertions(+), 8 deletions(-)
drivers/net/tg3.c +31 -8
@@ -11463,8 +11463,9 @@ 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))
@@ -11472,17 +11473,39 @@ static void __devinit tg3_read_bc_ver(struct tg3 *tp) 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); } }
drivers/net/tg3.h +4 -0
@@ -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
Signature · 1 line
1.6.0.6