summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/net.h4
-rw-r--r--net/eth.c6
2 files changed, 9 insertions, 1 deletions
diff --git a/include/net.h b/include/net.h
index b9c13f282c..d09bec9de1 100644
--- a/include/net.h
+++ b/include/net.h
@@ -119,7 +119,9 @@ enum eth_recv_flags {
* mcast: Join or leave a multicast group (for TFTP) - optional
* write_hwaddr: Write a MAC address to the hardware (used to pass it to Linux
* on some platforms like ARM). This function expects the
- * eth_pdata::enetaddr field to be populated - optional
+ * eth_pdata::enetaddr field to be populated. The method can
+ * return -ENOSYS to indicate that this is not implemented for
+ this hardware - optional.
* read_rom_hwaddr: Some devices have a backup of the MAC address stored in a
* ROM on the board. This is how the driver should expose it
* to the network stack. This function should fill in the
diff --git a/net/eth.c b/net/eth.c
index 72ce91c9d0..d3ec8d64d5 100644
--- a/net/eth.c
+++ b/net/eth.c
@@ -287,7 +287,13 @@ static int eth_write_hwaddr(struct udevice *dev)
return -EINVAL;
}
+ /*
+ * Drivers are allowed to decide not to implement this at
+ * run-time. E.g. Some devices may use it and some may not.
+ */
ret = eth_get_ops(dev)->write_hwaddr(dev);
+ if (ret == -ENOSYS)
+ ret = 0;
if (ret)
printf("\nWarning: %s failed to set MAC address\n",
dev->name);