From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Mack Date: Wed, 3 Dec 2008 02:01:54 +0100 Subject: [U-Boot] [PATCH] ne2000: take MAC address from config if available In-Reply-To: <20081129131728.GA23785@buzzloop.caiaq.de> References: <20081128161643.GA13920@buzzloop.caiaq.de> <20081129131728.GA23785@buzzloop.caiaq.de> Message-ID: <20081203010154.GE2012@buzzloop.caiaq.de> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de This adds CONFIG_NE2000_NOPROM. If set, the ethernet MAC address is taken from the environment variable 'ethaddr' and the NIC is configured accordingly. Needed for boards that don't have an EEPROM to store this setting permanently. Signed-off-by: Daniel Mack --- ne2000_base.c | 38 ++++++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/drivers/net/ne2000_base.c b/drivers/net/ne2000_base.c index f93f932..86c1380 100644 --- a/drivers/net/ne2000_base.c +++ b/drivers/net/ne2000_base.c @@ -669,7 +669,6 @@ void uboot_push_tx_done(int key, int val) { int eth_init(bd_t *bd) { int r; u8 dev_addr[6]; - char ethaddr[20]; PRINTK("### eth_init\n"); @@ -693,16 +692,35 @@ int eth_init(bd_t *bd) { nic.base = (u8 *) CONFIG_DRIVER_NE2000_BASE; - r = get_prom(dev_addr, nic.base); - if (!r) - return -1; +#ifndef CONFIG_NE2000_NOPROM + { + char ethaddr[20]; + r = get_prom(dev_addr, nic.base); + if (!r) + return -1; + + sprintf (ethaddr, "%02X:%02X:%02X:%02X:%02X:%02X", + dev_addr[0], dev_addr[1], + dev_addr[2], dev_addr[3], + dev_addr[4], dev_addr[5]) ; + PRINTK("Set environment from HW MAC addr = \"%s\"\n", ethaddr); + setenv ("ethaddr", ethaddr); + } +#else /* CONFIG_NE2000_NOPROM */ + { + char *s = getenv("ethaddr"); - sprintf (ethaddr, "%02X:%02X:%02X:%02X:%02X:%02X", - dev_addr[0], dev_addr[1], - dev_addr[2], dev_addr[3], - dev_addr[4], dev_addr[5]) ; - PRINTK("Set environment from HW MAC addr = \"%s\"\n", ethaddr); - setenv ("ethaddr", ethaddr); + if (!s) { + printf ("CONFIG_NE2000_NOPROM set but no " + "ethaddr given in environment.\n"); + return -1; + } + + /* convert the string notation */ + for (r = 0; r < 6; r++) + dev_addr[r] = simple_strtol(s + (r * 3), NULL, 16); + } +#endif nic.data = nic.base + DP_DATA; nic.tx_buf1 = START_PG;