Index: sys/dev/bge/if_bgereg.h =================================================================== --- sys/dev/bge/if_bgereg.h (revision 209954) +++ sys/dev/bge/if_bgereg.h (working copy) @@ -77,6 +77,8 @@ #define BGE_SOFTWARE_GENCOMM_FW 0x00000B78 #define BGE_SOFTWARE_GENNCOMM_FW_LEN 0x00000B7C #define BGE_SOFTWARE_GENNCOMM_FW_DATA 0x00000B80 +#define BGE_SRAM_MAC_ADDR_HIGH_MBOX 0x00000C14 +#define BGE_SRAM_MAC_ADDR_LOW_MBOX 0x00000C18 #define BGE_SOFTWARE_GENCOMM_END 0x00000FFF #define BGE_UNMAPPED 0x00001000 #define BGE_UNMAPPED_END 0x00001FFF Index: sys/dev/bge/if_bge.c =================================================================== --- sys/dev/bge/if_bge.c (revision 209954) +++ sys/dev/bge/if_bge.c (working copy) @@ -5203,17 +5203,21 @@ static int bge_get_eaddr_mem(struct bge_softc *sc, uint8_t ether_addr[]) { + uint8_t inv_addr[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; uint32_t mac_addr; - mac_addr = bge_readmem_ind(sc, 0x0c14); + mac_addr = bge_readmem_ind(sc, BGE_SRAM_MAC_ADDR_HIGH_MBOX); if ((mac_addr >> 16) == 0x484b) { ether_addr[0] = (uint8_t)(mac_addr >> 8); ether_addr[1] = (uint8_t)mac_addr; - mac_addr = bge_readmem_ind(sc, 0x0c18); + mac_addr = bge_readmem_ind(sc, BGE_SRAM_MAC_ADDR_LOW_MBOX); ether_addr[2] = (uint8_t)(mac_addr >> 24); ether_addr[3] = (uint8_t)(mac_addr >> 16); ether_addr[4] = (uint8_t)(mac_addr >> 8); ether_addr[5] = (uint8_t)mac_addr; + /* Old bootcode can report all 0s in SRAM. */ + if (bcmp(ether_addr, inv_addr, sizeof(inv_addr)) == 0) + return (1); return (0); } return (1);