From f4cc5834efe1b8fd366ec35cc016cd23527e2f42 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Fri, 19 Jul 2019 19:15:33 +0100 Subject: [smscusb] Fetch MAC from device tree for Raspberry Pi Model B+ Signed-off-by: Michael Brown --- src/drivers/net/lan78xx.c | 4 ++++ src/drivers/net/smsc95xx.c | 31 ++----------------------------- src/drivers/net/smscusb.c | 34 ++++++++++++++++++++++++++++++++++ src/drivers/net/smscusb.h | 1 + 4 files changed, 41 insertions(+), 29 deletions(-) diff --git a/src/drivers/net/lan78xx.c b/src/drivers/net/lan78xx.c index 3f705203..a8cf5740 100644 --- a/src/drivers/net/lan78xx.c +++ b/src/drivers/net/lan78xx.c @@ -97,6 +97,10 @@ static int lan78xx_fetch_mac ( struct smscusb_device *smscusb ) { if ( ( rc = smscusb_otp_fetch_mac ( smscusb, LAN78XX_OTP_BASE ) ) == 0 ) return 0; + /* Read MAC address from device tree, if present */ + if ( ( rc = smscusb_fdt_fetch_mac ( smscusb ) ) == 0 ) + return 0; + /* Otherwise, generate a random MAC address */ eth_random_addr ( netdev->hw_addr ); DBGC ( smscusb, "LAN78XX %p using random MAC %s\n", diff --git a/src/drivers/net/smsc95xx.c b/src/drivers/net/smsc95xx.c index 4ac3f42f..3ec49584 100644 --- a/src/drivers/net/smsc95xx.c +++ b/src/drivers/net/smsc95xx.c @@ -33,7 +33,6 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); #include #include #include -#include #include "smsc95xx.h" /** @file @@ -159,32 +158,6 @@ static int smsc95xx_vm3_fetch_mac ( struct smscusb_device *smscusb ) { return 0; } -/** - * 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 * @@ -200,8 +173,8 @@ 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 ) + /* Read MAC address from device tree, if present */ + if ( ( rc = smscusb_fdt_fetch_mac ( smscusb ) ) == 0 ) return 0; /* Construct MAC address for Honeywell VM3, if applicable */ diff --git a/src/drivers/net/smscusb.c b/src/drivers/net/smscusb.c index 538d338c..c639c58c 100644 --- a/src/drivers/net/smscusb.c +++ b/src/drivers/net/smscusb.c @@ -30,6 +30,7 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); #include #include #include +#include #include "smscusb.h" /** @file @@ -439,6 +440,39 @@ int smscusb_otp_fetch_mac ( struct smscusb_device *smscusb, return 0; } +/****************************************************************************** + * + * Device tree + * + ****************************************************************************** + */ + +/** + * Fetch MAC address from device tree + * + * @v smscusb SMSC USB device + * @ret rc Return status code + */ +int smscusb_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, "SMSCUSB %p using FDT MAC %s\n", + smscusb, eth_ntoa ( netdev->hw_addr ) ); + return 0; +} + /****************************************************************************** * * MII access diff --git a/src/drivers/net/smscusb.h b/src/drivers/net/smscusb.h index b5d9ad3f..e866bb74 100644 --- a/src/drivers/net/smscusb.h +++ b/src/drivers/net/smscusb.h @@ -287,6 +287,7 @@ extern int smscusb_eeprom_fetch_mac ( struct smscusb_device *smscusb, unsigned int e2p_base ); extern int smscusb_otp_fetch_mac ( struct smscusb_device *smscusb, unsigned int otp_base ); +extern int smscusb_fdt_fetch_mac ( struct smscusb_device *smscusb ); extern int smscusb_mii_check_link ( struct smscusb_device *smscusb ); extern int smscusb_mii_open ( struct smscusb_device *smscusb, unsigned int phy_mask, unsigned int intrs ); -- cgit v1.2.3-55-g7522