aboutsummaryrefslogtreecommitdiff
path: root/board
diff options
context:
space:
mode:
authorBen Gardiner <bengardiner@nanometrics.ca>2010-09-23 09:58:43 -0400
committerBen Warren <biggerbadderben@gmail.com>2010-10-11 23:07:17 -0700
commit7b37a27e14975f32528552deed453b56a4149818 (patch)
tree97b76f279c64ac3be9b186060e4aab0e969fcc53 /board
parent042272a6f2fce3bf610a84cbfde3676b53c0d8dd (diff)
davinci_emac: davinci_eth_set_mac_addr to ->write_hwaddr
This patch proposes to migrate the davinci_emac driver to using the eth_device->write_hwaddr function pointer as suggested by Ben Warren. All the davinci boards had the behaviour, prior to this patch, of sync'ing the environment variable enetaddr with the MAC address read from non-volatile storage on boot -- when the two locations disagreed, the environment variable value took precendence. This patch keeps the same behaviour but lets eth_initialize take care of it. This patch refactors davinci_emac setup in the boards so that the MAC address is read from non-volatile storage into the environment variable and then the environment variable value is use in eth_intialize. The only exception is the direct call to davinci_eth_set_mac_addr made by the da830evm board init which was changed into an assignment of the enetaddr field. Signed-off-by: Ben Gardiner <bengardiner@nanometrics.ca> Tested-by: Nick Thompson <nick.thompson@ge.com> Signed-off-by: Ben Warren <biggerbadderben@gmail.com>
Diffstat (limited to 'board')
-rw-r--r--board/davinci/common/misc.c41
-rw-r--r--board/davinci/common/misc.h2
-rw-r--r--board/davinci/da8xxevm/da830evm.c12
-rw-r--r--board/davinci/dm365evm/dm365evm.c2
-rw-r--r--board/davinci/dvevm/dvevm.c2
-rw-r--r--board/davinci/sffsdr/sffsdr.c2
-rw-r--r--board/davinci/sonata/sonata.c2
7 files changed, 22 insertions, 41 deletions
diff --git a/board/davinci/common/misc.c b/board/davinci/common/misc.c
index 86a875eea..b60a46e96 100644
--- a/board/davinci/common/misc.c
+++ b/board/davinci/common/misc.c
@@ -85,45 +85,22 @@ err:
return 0;
}
-/* If there is a MAC address in the environment, and if it is not identical to
- * the MAC address in the EEPROM, then a warning is printed and the MAC address
- * from the environment is used.
- *
+/*
* If there is no MAC address in the environment, then it will be initialized
* (silently) from the value in the EEPROM.
*/
-void dv_configure_mac_address(uint8_t *rom_enetaddr)
+void davinci_sync_env_enetaddr(uint8_t *rom_enetaddr)
{
- int i;
- u_int8_t env_enetaddr[6];
- char *tmp = getenv("ethaddr");
- char *end;
-
- /* Read Ethernet MAC address from the U-Boot environment.
- * If it is not defined, env_enetaddr[] will be cleared. */
- for (i = 0; i < 6; i++) {
- env_enetaddr[i] = tmp ? simple_strtoul(tmp, &end, 16) : 0;
- if (tmp)
- tmp = (*end) ? end+1 : end;
- }
-
- /* Check if EEPROM and U-Boot environment MAC addresses match. */
- if (memcmp(env_enetaddr, "\0\0\0\0\0\0", 6) != 0 &&
- memcmp(env_enetaddr, rom_enetaddr, 6) != 0) {
- printf("Warning: MAC addresses don't match:\n");
- printf(" EEPROM MAC address: %pM\n", rom_enetaddr);
- printf(" \"ethaddr\" value: %pM\n", env_enetaddr) ;
- debug("### Using MAC address from environment\n");
- }
- if (!tmp) {
- char ethaddr[20];
+ uint8_t env_enetaddr[6];
+ eth_getenv_enetaddr_by_index(0, env_enetaddr);
+ if (!memcmp(env_enetaddr, "\0\0\0\0\0\0", 6)) {
/* There is no MAC address in the environment, so we initialize
* it from the value in the EEPROM. */
- sprintf(ethaddr, "%pM", rom_enetaddr) ;
- debug("### Setting environment from EEPROM MAC address = \"%s\"\n",
- ethaddr);
- setenv("ethaddr", ethaddr);
+ debug("### Setting environment from EEPROM MAC address = "
+ "\"%pM\"\n",
+ env_enetaddr);
+ eth_setenv_enetaddr("ethaddr", rom_enetaddr);
}
}
diff --git a/board/davinci/common/misc.h b/board/davinci/common/misc.h
index 329c36976..a6ac3b9a5 100644
--- a/board/davinci/common/misc.h
+++ b/board/davinci/common/misc.h
@@ -46,7 +46,7 @@ struct pinmux_resource {
}
int dvevm_read_mac_address(uint8_t *buf);
-void dv_configure_mac_address(uint8_t *rom_enetaddr);
+void davinci_sync_env_enetaddr(uint8_t *rom_enetaddr);
int davinci_configure_pin_mux(const struct pinmux_config *pins, int n_pins);
int davinci_configure_pin_mux_items(const struct pinmux_resource *item,
int n_items);
diff --git a/board/davinci/da8xxevm/da830evm.c b/board/davinci/da8xxevm/da830evm.c
index 6baa8603f..8a9f9884d 100644
--- a/board/davinci/da8xxevm/da830evm.c
+++ b/board/davinci/da8xxevm/da830evm.c
@@ -196,19 +196,17 @@ int board_eth_init(bd_t *bis)
{
u_int8_t mac_addr[6];
u_int8_t switch_start_cmd[2] = { 0x01, 0x23 };
+ struct eth_device *dev;
/* Read Ethernet MAC address from EEPROM */
if (dvevm_read_mac_address(mac_addr))
/* set address env if not already set */
- dv_configure_mac_address(mac_addr);
+ davinci_sync_env_enetaddr(mac_addr);
/* read the address back from env */
if (!eth_getenv_enetaddr("ethaddr", mac_addr))
return -1;
- /* provide the resulting addr to the driver */
- davinci_eth_set_mac_addr(mac_addr);
-
/* enable the Ethernet switch in the 3 port PHY */
if (i2c_write(PHY_SW_I2C_ADDR, 0, 0,
switch_start_cmd, sizeof(switch_start_cmd))) {
@@ -222,6 +220,12 @@ int board_eth_init(bd_t *bis)
return -1;
}
+ dev = eth_get_dev();
+
+ /* provide the resulting addr to the driver */
+ memcpy(dev->enetaddr, mac_addr, 6);
+ dev->write_hwaddr(dev);
+
return 0;
}
#endif /* CONFIG_DRIVER_TI_EMAC */
diff --git a/board/davinci/dm365evm/dm365evm.c b/board/davinci/dm365evm/dm365evm.c
index 290eb9974..85dbe2a9c 100644
--- a/board/davinci/dm365evm/dm365evm.c
+++ b/board/davinci/dm365evm/dm365evm.c
@@ -68,7 +68,7 @@ int board_eth_init(bd_t *bis)
/* Read Ethernet MAC address from EEPROM */
if (dvevm_read_mac_address(eeprom_enetaddr))
- dv_configure_mac_address(eeprom_enetaddr);
+ davinci_sync_env_enetaddr(eeprom_enetaddr);
davinci_emac_initialize();
diff --git a/board/davinci/dvevm/dvevm.c b/board/davinci/dvevm/dvevm.c
index 98937a962..073c21a8c 100644
--- a/board/davinci/dvevm/dvevm.c
+++ b/board/davinci/dvevm/dvevm.c
@@ -71,7 +71,7 @@ int misc_init_r(void)
/* Read Ethernet MAC address from EEPROM if available. */
if (dvevm_read_mac_address(eeprom_enetaddr))
- dv_configure_mac_address(eeprom_enetaddr);
+ davinci_sync_env_enetaddr(eeprom_enetaddr);
i2c_read(0x39, 0x00, 1, &video_mode, 1);
diff --git a/board/davinci/sffsdr/sffsdr.c b/board/davinci/sffsdr/sffsdr.c
index c24b9e188..657cf2b0d 100644
--- a/board/davinci/sffsdr/sffsdr.c
+++ b/board/davinci/sffsdr/sffsdr.c
@@ -141,7 +141,7 @@ int misc_init_r(void)
/* Read Ethernet MAC address from EEPROM if available. */
if (sffsdr_read_mac_address(eeprom_enetaddr))
- dv_configure_mac_address(eeprom_enetaddr);
+ davinci_sync_env_enetaddr(eeprom_enetaddr);
return(0);
}
diff --git a/board/davinci/sonata/sonata.c b/board/davinci/sonata/sonata.c
index 817970aea..1dc42c408 100644
--- a/board/davinci/sonata/sonata.c
+++ b/board/davinci/sonata/sonata.c
@@ -70,7 +70,7 @@ int misc_init_r(void)
/* Read Ethernet MAC address from EEPROM if available. */
if (dvevm_read_mac_address(eeprom_enetaddr))
- dv_configure_mac_address(eeprom_enetaddr);
+ davinci_sync_env_enetaddr(eeprom_enetaddr);
return(0);
}