Skip to content

Commit

Permalink
[smscusb] Fetch MAC from device tree for Raspberry Pi Model B+
Browse files Browse the repository at this point in the history
Signed-off-by: Michael Brown <mcb30@ipxe.org>
  • Loading branch information
mcb30 committed Jul 19, 2019
1 parent a046329 commit f4cc583
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 29 deletions.
4 changes: 4 additions & 0 deletions src/drivers/net/lan78xx.c
Expand Up @@ -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",
Expand Down
31 changes: 2 additions & 29 deletions src/drivers/net/smsc95xx.c
Expand Up @@ -33,7 +33,6 @@ 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
Expand Down Expand Up @@ -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
*
Expand All @@ -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 */
Expand Down
34 changes: 34 additions & 0 deletions src/drivers/net/smscusb.c
Expand Up @@ -30,6 +30,7 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
#include <ipxe/usbnet.h>
#include <ipxe/ethernet.h>
#include <ipxe/profile.h>
#include <ipxe/fdt.h>
#include "smscusb.h"

/** @file
Expand Down Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions src/drivers/net/smscusb.h
Expand Up @@ -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 );
Expand Down

0 comments on commit f4cc583

Please sign in to comment.