aboutsummaryrefslogtreecommitdiff
path: root/net
diff options
context:
space:
mode:
authorRob Herring2012-04-14 18:06:49 +0000
committerJoe Hershberger2012-07-11 13:15:32 -0500
commitc88ef3c12dcf8596433d52a2631982d9d3a478dd (patch)
tree05080575c719163664b67fbb82aedd40a0f63d06 /net
parent66f119e50cc854695a3709c67bf6a6c8ef60f6bc (diff)
net: allow setting env enetaddr from net device setting
If the net driver has setup a valid ethernet address and an ethernet address is not set in the environment already, then set the environment variables from the net driver setting. This enables pxe booting on boards which don't set ethaddr env variable. Signed-off-by: Rob Herring <rob.herring@calxeda.com>
Diffstat (limited to 'net')
-rw-r--r--net/eth.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/net/eth.c b/net/eth.c
index d526264fa65..6290b332fd3 100644
--- a/net/eth.c
+++ b/net/eth.c
@@ -62,6 +62,15 @@ int eth_getenv_enetaddr_by_index(const char *base_name, int index,
return eth_getenv_enetaddr(enetvar, enetaddr);
}
+int eth_setenv_enetaddr_by_index(const char *base_name, int index,
+ uchar *enetaddr)
+{
+ char enetvar[32];
+ sprintf(enetvar, index ? "%s%daddr" : "%saddr", base_name, index);
+ return eth_setenv_enetaddr(enetvar, enetaddr);
+}
+
+
static int eth_mac_skip(int index)
{
char enetvar[15];
@@ -205,6 +214,11 @@ int eth_write_hwaddr(struct eth_device *dev, const char *base_name,
}
memcpy(dev->enetaddr, env_enetaddr, 6);
+ } else if (is_valid_ether_addr(dev->enetaddr)) {
+ eth_setenv_enetaddr_by_index(base_name, eth_number,
+ dev->enetaddr);
+ printf("\nWarning: %s using MAC address from net device\n",
+ dev->name);
}
if (dev->write_hwaddr &&