mirror of
https://github.com/ipxe/ipxe
synced 2026-03-16 03:02:07 +03:00
[smscusb] Fetch MAC from device tree for Raspberry Pi Model B+
Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
@@ -97,6 +97,10 @@ static int lan78xx_fetch_mac ( struct smscusb_device *smscusb ) {
|
|||||||
if ( ( rc = smscusb_otp_fetch_mac ( smscusb, LAN78XX_OTP_BASE ) ) == 0 )
|
if ( ( rc = smscusb_otp_fetch_mac ( smscusb, LAN78XX_OTP_BASE ) ) == 0 )
|
||||||
return 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 */
|
/* Otherwise, generate a random MAC address */
|
||||||
eth_random_addr ( netdev->hw_addr );
|
eth_random_addr ( netdev->hw_addr );
|
||||||
DBGC ( smscusb, "LAN78XX %p using random MAC %s\n",
|
DBGC ( smscusb, "LAN78XX %p using random MAC %s\n",
|
||||||
|
|||||||
@@ -33,7 +33,6 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
|
|||||||
#include <ipxe/profile.h>
|
#include <ipxe/profile.h>
|
||||||
#include <ipxe/base16.h>
|
#include <ipxe/base16.h>
|
||||||
#include <ipxe/smbios.h>
|
#include <ipxe/smbios.h>
|
||||||
#include <ipxe/fdt.h>
|
|
||||||
#include "smsc95xx.h"
|
#include "smsc95xx.h"
|
||||||
|
|
||||||
/** @file
|
/** @file
|
||||||
@@ -159,32 +158,6 @@ static int smsc95xx_vm3_fetch_mac ( struct smscusb_device *smscusb ) {
|
|||||||
return 0;
|
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
|
* Fetch MAC address
|
||||||
*
|
*
|
||||||
@@ -200,8 +173,8 @@ static int smsc95xx_fetch_mac ( struct smscusb_device *smscusb ) {
|
|||||||
SMSC95XX_E2P_BASE ) ) == 0 )
|
SMSC95XX_E2P_BASE ) ) == 0 )
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* Read MAC address from device tree */
|
/* Read MAC address from device tree, if present */
|
||||||
if ( ( rc = smsc95xx_fdt_fetch_mac ( smscusb ) ) == 0 )
|
if ( ( rc = smscusb_fdt_fetch_mac ( smscusb ) ) == 0 )
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* Construct MAC address for Honeywell VM3, if applicable */
|
/* Construct MAC address for Honeywell VM3, if applicable */
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
|
|||||||
#include <ipxe/usbnet.h>
|
#include <ipxe/usbnet.h>
|
||||||
#include <ipxe/ethernet.h>
|
#include <ipxe/ethernet.h>
|
||||||
#include <ipxe/profile.h>
|
#include <ipxe/profile.h>
|
||||||
|
#include <ipxe/fdt.h>
|
||||||
#include "smscusb.h"
|
#include "smscusb.h"
|
||||||
|
|
||||||
/** @file
|
/** @file
|
||||||
@@ -439,6 +440,39 @@ int smscusb_otp_fetch_mac ( struct smscusb_device *smscusb,
|
|||||||
return 0;
|
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
|
* MII access
|
||||||
|
|||||||
@@ -287,6 +287,7 @@ extern int smscusb_eeprom_fetch_mac ( struct smscusb_device *smscusb,
|
|||||||
unsigned int e2p_base );
|
unsigned int e2p_base );
|
||||||
extern int smscusb_otp_fetch_mac ( struct smscusb_device *smscusb,
|
extern int smscusb_otp_fetch_mac ( struct smscusb_device *smscusb,
|
||||||
unsigned int otp_base );
|
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_check_link ( struct smscusb_device *smscusb );
|
||||||
extern int smscusb_mii_open ( struct smscusb_device *smscusb,
|
extern int smscusb_mii_open ( struct smscusb_device *smscusb,
|
||||||
unsigned int phy_mask, unsigned int intrs );
|
unsigned int phy_mask, unsigned int intrs );
|
||||||
|
|||||||
Reference in New Issue
Block a user