Skip to content

Commit

Permalink
net: allow setting env enetaddr from net device setting
Browse files Browse the repository at this point in the history
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 <[email protected]>
  • Loading branch information
Rob Herring authored and jhershbe committed Jul 11, 2012
1 parent 66f119e commit c88ef3c
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 1 deletion.
6 changes: 5 additions & 1 deletion doc/README.enetaddr
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,11 @@ Correct flow of setting up the MAC address (summarized):

1. Read from hardware in initialize() function
2. Read from environment in net/eth.c after initialize()
3. Give priority to the value in the environment if a conflict
3. The environment variable will be compared to the driver initialized
struct eth_device->enetaddr. If they differ, a warning is printed, and the
environment variable will be used unchanged.
If the environment variable is not set, it will be initialized from
eth_device->enetaddr, and a warning will be printed.
4. Program the address into hardware if the following conditions are met:
a) The relevant driver has a 'write_addr' function
b) The user hasn't set an 'ethmacskip' environment variable
Expand Down
14 changes: 14 additions & 0 deletions net/eth.c
Original file line number Diff line number Diff line change
Expand Up @@ -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];
Expand Down Expand Up @@ -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 &&
Expand Down

0 comments on commit c88ef3c

Please sign in to comment.