Skip to content

Commit a937615

Browse files
committed
[intel] Use autoloaded MAC address instead of EEPROM MAC address
The i350 (and possibly other Intel NICs) have a non-trivial correspondence between the PCI function number and the external physical port number. For example, the i350 has a "LAN Function Sel" bit within the EEPROM which can invert the mapping so that function 0 becomes port 3, function 1 becomes port 2, etc. Unfortunately the MAC addresses within the EEPROM are indexed by physical port number rather than PCI function number. The end result is that when anything other than the default mapping is used, iPXE will use the wrong address as the base MAC address. Fix by using the autoloaded MAC address if it is valid, and falling back to reading the MAC address directly from the EEPROM only if no autoloaded address is available. Signed-off-by: Michael Brown <mcb30@ipxe.org>
1 parent dea6a6c commit a937615

1 file changed

Lines changed: 4 additions & 4 deletions

File tree

src/drivers/net/intel.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -232,16 +232,16 @@ static int intel_fetch_mac ( struct intel_nic *intel, uint8_t *hw_addr ) {
232232
DBGC ( intel, "INTEL %p has autoloaded MAC address %s\n",
233233
intel, eth_ntoa ( mac.raw ) );
234234

235-
/* Try to read address from EEPROM */
236-
if ( ( rc = intel_fetch_mac_eeprom ( intel, hw_addr ) ) == 0 )
237-
return 0;
238-
239235
/* Use current address if valid */
240236
if ( is_valid_ether_addr ( mac.raw ) ) {
241237
memcpy ( hw_addr, mac.raw, ETH_ALEN );
242238
return 0;
243239
}
244240

241+
/* Otherwise, try to read address from EEPROM */
242+
if ( ( rc = intel_fetch_mac_eeprom ( intel, hw_addr ) ) == 0 )
243+
return 0;
244+
245245
DBGC ( intel, "INTEL %p has no MAC address to use\n", intel );
246246
return -ENOENT;
247247
}

0 commit comments

Comments
 (0)