|
37 | 37 | #include <linux/irqchip/chained_irq.h>
|
38 | 38 | #include <linux/microchipphy.h>
|
39 | 39 | #include <linux/phy.h>
|
| 40 | +#include <linux/of_net.h> |
40 | 41 | #include "lan78xx.h"
|
41 | 42 |
|
42 | 43 | #define DRIVER_AUTHOR "WOOJUNG HUH <woojung.huh@microchip.com>"
|
@@ -1652,34 +1653,31 @@ static void lan78xx_init_mac_address(struct lan78xx_net *dev)
|
1652 | 1653 | addr[5] = (addr_hi >> 8) & 0xFF;
|
1653 | 1654 |
|
1654 | 1655 | if (!is_valid_ether_addr(addr)) {
|
1655 |
| - /* reading mac address from EEPROM or OTP */ |
1656 |
| - if ((lan78xx_read_eeprom(dev, EEPROM_MAC_OFFSET, ETH_ALEN, |
1657 |
| - addr) == 0) || |
1658 |
| - (lan78xx_read_otp(dev, EEPROM_MAC_OFFSET, ETH_ALEN, |
1659 |
| - addr) == 0)) { |
1660 |
| - if (is_valid_ether_addr(addr)) { |
1661 |
| - /* eeprom values are valid so use them */ |
1662 |
| - netif_dbg(dev, ifup, dev->net, |
1663 |
| - "MAC address read from EEPROM"); |
1664 |
| - } else { |
1665 |
| - /* generate random MAC */ |
1666 |
| - random_ether_addr(addr); |
1667 |
| - netif_dbg(dev, ifup, dev->net, |
1668 |
| - "MAC address set to random addr"); |
1669 |
| - } |
1670 |
| - |
1671 |
| - addr_lo = addr[0] | (addr[1] << 8) | |
1672 |
| - (addr[2] << 16) | (addr[3] << 24); |
1673 |
| - addr_hi = addr[4] | (addr[5] << 8); |
1674 |
| - |
1675 |
| - ret = lan78xx_write_reg(dev, RX_ADDRL, addr_lo); |
1676 |
| - ret = lan78xx_write_reg(dev, RX_ADDRH, addr_hi); |
| 1656 | + if (!eth_platform_get_mac_address(&dev->udev->dev, addr)) { |
| 1657 | + /* valid address present in Device Tree */ |
| 1658 | + netif_dbg(dev, ifup, dev->net, |
| 1659 | + "MAC address read from Device Tree"); |
| 1660 | + } else if (((lan78xx_read_eeprom(dev, EEPROM_MAC_OFFSET, |
| 1661 | + ETH_ALEN, addr) == 0) || |
| 1662 | + (lan78xx_read_otp(dev, EEPROM_MAC_OFFSET, |
| 1663 | + ETH_ALEN, addr) == 0)) && |
| 1664 | + is_valid_ether_addr(addr)) { |
| 1665 | + /* eeprom values are valid so use them */ |
| 1666 | + netif_dbg(dev, ifup, dev->net, |
| 1667 | + "MAC address read from EEPROM"); |
1677 | 1668 | } else {
|
1678 | 1669 | /* generate random MAC */
|
1679 | 1670 | random_ether_addr(addr);
|
1680 | 1671 | netif_dbg(dev, ifup, dev->net,
|
1681 | 1672 | "MAC address set to random addr");
|
1682 | 1673 | }
|
| 1674 | + |
| 1675 | + addr_lo = addr[0] | (addr[1] << 8) | |
| 1676 | + (addr[2] << 16) | (addr[3] << 24); |
| 1677 | + addr_hi = addr[4] | (addr[5] << 8); |
| 1678 | + |
| 1679 | + ret = lan78xx_write_reg(dev, RX_ADDRL, addr_lo); |
| 1680 | + ret = lan78xx_write_reg(dev, RX_ADDRH, addr_hi); |
1683 | 1681 | }
|
1684 | 1682 |
|
1685 | 1683 | ret = lan78xx_write_reg(dev, MAF_LO(0), addr_lo);
|
|
0 commit comments