|
@@ -691,24 +691,32 @@ static int ax88772_bind(struct usbnet *dev, struct usb_interface *intf)
|
|
|
u32 phyid;
|
|
|
struct asix_common_private *priv;
|
|
|
|
|
|
- usbnet_get_endpoints(dev,intf);
|
|
|
+ usbnet_get_endpoints(dev, intf);
|
|
|
|
|
|
- /* Get the MAC address */
|
|
|
- if (dev->driver_info->data & FLAG_EEPROM_MAC) {
|
|
|
- for (i = 0; i < (ETH_ALEN >> 1); i++) {
|
|
|
- ret = asix_read_cmd(dev, AX_CMD_READ_EEPROM, 0x04 + i,
|
|
|
- 0, 2, buf + i * 2, 0);
|
|
|
- if (ret < 0)
|
|
|
- break;
|
|
|
- }
|
|
|
+ /* Maybe the boot loader passed the MAC address via device tree */
|
|
|
+ if (!eth_platform_get_mac_address(&dev->udev->dev, buf)) {
|
|
|
+ netif_dbg(dev, ifup, dev->net,
|
|
|
+ "MAC address read from device tree");
|
|
|
} else {
|
|
|
- ret = asix_read_cmd(dev, AX_CMD_READ_NODE_ID,
|
|
|
- 0, 0, ETH_ALEN, buf, 0);
|
|
|
- }
|
|
|
+ /* Try getting the MAC address from EEPROM */
|
|
|
+ if (dev->driver_info->data & FLAG_EEPROM_MAC) {
|
|
|
+ for (i = 0; i < (ETH_ALEN >> 1); i++) {
|
|
|
+ ret = asix_read_cmd(dev, AX_CMD_READ_EEPROM,
|
|
|
+ 0x04 + i, 0, 2, buf + i * 2,
|
|
|
+ 0);
|
|
|
+ if (ret < 0)
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ ret = asix_read_cmd(dev, AX_CMD_READ_NODE_ID,
|
|
|
+ 0, 0, ETH_ALEN, buf, 0);
|
|
|
+ }
|
|
|
|
|
|
- if (ret < 0) {
|
|
|
- netdev_dbg(dev->net, "Failed to read MAC address: %d\n", ret);
|
|
|
- return ret;
|
|
|
+ if (ret < 0) {
|
|
|
+ netdev_dbg(dev->net, "Failed to read MAC address: %d\n",
|
|
|
+ ret);
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
asix_set_netdev_dev_addr(dev, buf);
|