diff options
author | Michael Brown <mcb30@ipxe.org> | 2019-07-19 17:43:39 +0100 |
---|---|---|
committer | Michael Brown <mcb30@ipxe.org> | 2019-07-19 17:44:27 +0100 |
commit | 83e0f9f377246ba99f61e24a9074122d86ec3f20 (patch) | |
tree | 447b201fd611e004c57b5ef64ce11290b2c2cc22 | |
parent | 6dde0f60bfab458208a763532c9e776b32deebb3 (diff) | |
download | ipxe-83e0f9f377246ba99f61e24a9074122d86ec3f20.tar.gz |
[smsc95xx] Fetch MAC from device tree for Raspberry Pi
Signed-off-by: Michael Brown <mcb30@ipxe.org>
-rw-r--r-- | src/drivers/net/smsc95xx.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/drivers/net/smsc95xx.c b/src/drivers/net/smsc95xx.c index 9b09657db..4ac3f42f0 100644 --- a/src/drivers/net/smsc95xx.c +++ b/src/drivers/net/smsc95xx.c @@ -33,6 +33,7 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); #include <ipxe/profile.h> #include <ipxe/base16.h> #include <ipxe/smbios.h> +#include <ipxe/fdt.h> #include "smsc95xx.h" /** @file @@ -159,6 +160,32 @@ static int smsc95xx_vm3_fetch_mac ( struct smscusb_device *smscusb ) { } /** + * Fetch MAC address from device tree + * + * @v smscusb SMSC USB device + * @ret rc Return status code + */ +static int smsc95xx_fdt_fetch_mac ( struct smscusb_device *smscusb ) { + struct net_device *netdev = smscusb->netdev; + unsigned int offset; + int rc; + + /* Look for "ethernet[0]" alias */ + if ( ( rc = fdt_alias ( "ethernet", &offset ) != 0 ) && + ( rc = fdt_alias ( "ethernet0", &offset ) != 0 ) ) { + return rc; + } + + /* Fetch MAC address */ + if ( ( rc = fdt_mac ( offset, netdev ) ) != 0 ) + return rc; + + DBGC ( smscusb, "SMSC95XX %p using FDT MAC %s\n", + smscusb, eth_ntoa ( netdev->hw_addr ) ); + return 0; +} + +/** * Fetch MAC address * * @v smscusb SMSC USB device @@ -173,6 +200,10 @@ static int smsc95xx_fetch_mac ( struct smscusb_device *smscusb ) { SMSC95XX_E2P_BASE ) ) == 0 ) return 0; + /* Read MAC address from device tree */ + if ( ( rc = smsc95xx_fdt_fetch_mac ( smscusb ) ) == 0 ) + return 0; + /* Construct MAC address for Honeywell VM3, if applicable */ if ( ( rc = smsc95xx_vm3_fetch_mac ( smscusb ) ) == 0 ) return 0; |