1. I didn't see that 0xA8 in the device config space was for the MAC address. It doesn't show it in the register spec I received. I'll give it a try when I get a chance. I only saw that offset 0xA8 in the MMIO space was for it.
2. Taking a closer look at it, I do like it. Maybe just change the if(!eeprom_valid) part to read from the ROMSTRAP the way I had it. The reason I like my way of reading the ROMSTRAPs MAC is because you have it at a fixed address. But the ROMSTRAP could actually be used to setup lots and lots of device registers, if chosen to do so. Thus pushing that address lower.
// read directly from rom_strap mac_pos = read8(0xffffffe0); // refer to romstrap.inc mac_pos |= (read8(0xffffffe1)<<8); mac_pos |= (read8(0xffffffe2)<<16); mac_pos |= (read8(0xffffffe3)<<24);
mac_pos += 0x30; for ( dword = nic_index ; dword > 0 ; dword-- ) { mac_pos += 8; }
mac_l = read32(mac_pos); mac_h = read32(mac_pos + 4);
Sorry I didn't look at it more closely.
3. yeah, I saw that. I was just using something familiar. Thanks.
1. In NV NDA doc. 2. That is trick, in romstrap.inc, rspointers must be 0xffffffe0, So just put MAC below that in 16bytes, and it can be fixed. actually it is not some kind of part romstrap, just want to make it in fixed positon. Fixed position is better than floating..., it may make your flash util more easier to find it.
YH
.long 0x81543266 // 30h, MAC address low 4 byte ---> keep it in 0xffffffd0 .long 0x000000E0 // 34h, MAC address high 4 byte
.long 0x002309CE // 38h, UUID low 4 byte .long 0x00E08100 // 3Ch, UUID high 4 byte
rspointers: .long rstables // It will be 0xffffffe0 .long rstables .long rstables .long rstables
.globl __romstrap_end