|
@@ -29,6 +29,7 @@
|
|
#include <linux/crc32.h>
|
|
#include <linux/crc32.h>
|
|
#include <linux/usb/usbnet.h>
|
|
#include <linux/usb/usbnet.h>
|
|
#include <linux/slab.h>
|
|
#include <linux/slab.h>
|
|
|
|
+#include <linux/of_net.h>
|
|
#include "smsc75xx.h"
|
|
#include "smsc75xx.h"
|
|
|
|
|
|
#define SMSC_CHIPNAME "smsc75xx"
|
|
#define SMSC_CHIPNAME "smsc75xx"
|
|
@@ -761,6 +762,15 @@ static int smsc75xx_ioctl(struct net_device *netdev, struct ifreq *rq, int cmd)
|
|
|
|
|
|
static void smsc75xx_init_mac_address(struct usbnet *dev)
|
|
static void smsc75xx_init_mac_address(struct usbnet *dev)
|
|
{
|
|
{
|
|
|
|
+ const u8 *mac_addr;
|
|
|
|
+
|
|
|
|
+ /* maybe the boot loader passed the MAC address in devicetree */
|
|
|
|
+ mac_addr = of_get_mac_address(dev->udev->dev.of_node);
|
|
|
|
+ if (mac_addr) {
|
|
|
|
+ memcpy(dev->net->dev_addr, mac_addr, ETH_ALEN);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
/* try reading mac address from EEPROM */
|
|
/* try reading mac address from EEPROM */
|
|
if (smsc75xx_read_eeprom(dev, EEPROM_MAC_OFFSET, ETH_ALEN,
|
|
if (smsc75xx_read_eeprom(dev, EEPROM_MAC_OFFSET, ETH_ALEN,
|
|
dev->net->dev_addr) == 0) {
|
|
dev->net->dev_addr) == 0) {
|
|
@@ -772,7 +782,7 @@ static void smsc75xx_init_mac_address(struct usbnet *dev)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- /* no eeprom, or eeprom values are invalid. generate random MAC */
|
|
|
|
|
|
+ /* no useful static MAC address found. generate a random one */
|
|
eth_hw_addr_random(dev->net);
|
|
eth_hw_addr_random(dev->net);
|
|
netif_dbg(dev, ifup, dev->net, "MAC address set to eth_random_addr\n");
|
|
netif_dbg(dev, ifup, dev->net, "MAC address set to eth_random_addr\n");
|
|
}
|
|
}
|