mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-11-29 13:06:00 +08:00
lan78xx: Read MAC address from DT if present
There is a standard mechanism for locating and using a MAC address from the Device Tree. Use this facility in the lan78xx driver to support applications without programmed EEPROM or OTP. At the same time, regularise the handling of the different address sources. Signed-off-by: Phil Elwell <phil@raspberrypi.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
a83762d979
commit
760db29bdc
@ -37,6 +37,7 @@
|
||||
#include <linux/irqchip/chained_irq.h>
|
||||
#include <linux/microchipphy.h>
|
||||
#include <linux/phy.h>
|
||||
#include <linux/of_net.h>
|
||||
#include "lan78xx.h"
|
||||
|
||||
#define DRIVER_AUTHOR "WOOJUNG HUH <woojung.huh@microchip.com>"
|
||||
@ -1652,34 +1653,31 @@ static void lan78xx_init_mac_address(struct lan78xx_net *dev)
|
||||
addr[5] = (addr_hi >> 8) & 0xFF;
|
||||
|
||||
if (!is_valid_ether_addr(addr)) {
|
||||
/* reading mac address from EEPROM or OTP */
|
||||
if ((lan78xx_read_eeprom(dev, EEPROM_MAC_OFFSET, ETH_ALEN,
|
||||
addr) == 0) ||
|
||||
(lan78xx_read_otp(dev, EEPROM_MAC_OFFSET, ETH_ALEN,
|
||||
addr) == 0)) {
|
||||
if (is_valid_ether_addr(addr)) {
|
||||
/* eeprom values are valid so use them */
|
||||
netif_dbg(dev, ifup, dev->net,
|
||||
"MAC address read from EEPROM");
|
||||
} else {
|
||||
/* generate random MAC */
|
||||
random_ether_addr(addr);
|
||||
netif_dbg(dev, ifup, dev->net,
|
||||
"MAC address set to random addr");
|
||||
}
|
||||
|
||||
addr_lo = addr[0] | (addr[1] << 8) |
|
||||
(addr[2] << 16) | (addr[3] << 24);
|
||||
addr_hi = addr[4] | (addr[5] << 8);
|
||||
|
||||
ret = lan78xx_write_reg(dev, RX_ADDRL, addr_lo);
|
||||
ret = lan78xx_write_reg(dev, RX_ADDRH, addr_hi);
|
||||
if (!eth_platform_get_mac_address(&dev->udev->dev, addr)) {
|
||||
/* valid address present in Device Tree */
|
||||
netif_dbg(dev, ifup, dev->net,
|
||||
"MAC address read from Device Tree");
|
||||
} else if (((lan78xx_read_eeprom(dev, EEPROM_MAC_OFFSET,
|
||||
ETH_ALEN, addr) == 0) ||
|
||||
(lan78xx_read_otp(dev, EEPROM_MAC_OFFSET,
|
||||
ETH_ALEN, addr) == 0)) &&
|
||||
is_valid_ether_addr(addr)) {
|
||||
/* eeprom values are valid so use them */
|
||||
netif_dbg(dev, ifup, dev->net,
|
||||
"MAC address read from EEPROM");
|
||||
} else {
|
||||
/* generate random MAC */
|
||||
random_ether_addr(addr);
|
||||
netif_dbg(dev, ifup, dev->net,
|
||||
"MAC address set to random addr");
|
||||
}
|
||||
|
||||
addr_lo = addr[0] | (addr[1] << 8) |
|
||||
(addr[2] << 16) | (addr[3] << 24);
|
||||
addr_hi = addr[4] | (addr[5] << 8);
|
||||
|
||||
ret = lan78xx_write_reg(dev, RX_ADDRL, addr_lo);
|
||||
ret = lan78xx_write_reg(dev, RX_ADDRH, addr_hi);
|
||||
}
|
||||
|
||||
ret = lan78xx_write_reg(dev, MAF_LO(0), addr_lo);
|
||||
|
Loading…
Reference in New Issue
Block a user