mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-02 15:36:42 +07:00
net/smscx5xx: use the device tree for mac address
This takes the MAC address for smsc75xx/smsc95xx USB network devices from a the device tree. This is required to get a usable persistent address on the popular beagleboard, whose hardware designers accidentally forgot that an ethernet device really requires an a MAC address to be functional. The Raspberry Pi also ships smsc9514 without a serial EEPROM, stores the MAC address in ROM accessible via VC4 firmware. The smsc75xx and smsc95xx drivers are just two copies of the same code, so better fix both. [lkundrak@v3.sk: updated to use of_get_property() as per suggestion from Arnd, reworded the message and comments a bit] Tested-by: Lubomir Rintel <lkundrak@v3.sk> Signed-off-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Lubomir Rintel <lkundrak@v3.sk> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
90e5d0db2b
commit
c489565b53
@ -29,6 +29,7 @@
|
||||
#include <linux/crc32.h>
|
||||
#include <linux/usb/usbnet.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/of_net.h>
|
||||
#include "smsc75xx.h"
|
||||
|
||||
#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)
|
||||
{
|
||||
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 */
|
||||
if (smsc75xx_read_eeprom(dev, EEPROM_MAC_OFFSET, ETH_ALEN,
|
||||
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);
|
||||
netif_dbg(dev, ifup, dev->net, "MAC address set to eth_random_addr\n");
|
||||
}
|
||||
|
@ -29,6 +29,7 @@
|
||||
#include <linux/crc32.h>
|
||||
#include <linux/usb/usbnet.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/of_net.h>
|
||||
#include "smsc95xx.h"
|
||||
|
||||
#define SMSC_CHIPNAME "smsc95xx"
|
||||
@ -765,6 +766,15 @@ static int smsc95xx_ioctl(struct net_device *netdev, struct ifreq *rq, int cmd)
|
||||
|
||||
static void smsc95xx_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 */
|
||||
if (smsc95xx_read_eeprom(dev, EEPROM_MAC_OFFSET, ETH_ALEN,
|
||||
dev->net->dev_addr) == 0) {
|
||||
@ -775,7 +785,7 @@ static void smsc95xx_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);
|
||||
netif_dbg(dev, ifup, dev->net, "MAC address set to eth_random_addr\n");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user