summaryrefslogtreecommitdiffstats
path: root/src/drivers/net/smscusb.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/drivers/net/smscusb.c')
-rw-r--r--src/drivers/net/smscusb.c34
1 files changed, 34 insertions, 0 deletions
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 <ipxe/usbnet.h>
#include <ipxe/ethernet.h>
#include <ipxe/profile.h>
+#include <ipxe/fdt.h>
#include "smscusb.h"
/** @file
@@ -441,6 +442,39 @@ int smscusb_otp_fetch_mac ( struct smscusb_device *smscusb,
/******************************************************************************
*
+ * 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
*
******************************************************************************