summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Brownell <dbrownell@users.sourceforge.net>2009-04-16 23:15:15 -0700
committerWolfgang Denk <wd@denx.de>2009-04-28 00:28:18 +0200
commitad74cae9ff8790727bc81ee91c6bca7d50dca446 (patch)
tree3ba9368c7cbbd93c5de1e8a8784c67d7de6a194c
parentd4c02e6f5d49880123e7f584b88f857ffd874381 (diff)
downloadu-boot-imx-ad74cae9ff8790727bc81ee91c6bca7d50dca446.zip
u-boot-imx-ad74cae9ff8790727bc81ee91c6bca7d50dca446.tar.gz
u-boot-imx-ad74cae9ff8790727bc81ee91c6bca7d50dca446.tar.bz2
dm9000 EEPROM reading bugfix
Make the U-Boot dm9000 driver read addresses from EEPROM just like Linux does ... read six bytes, instead of reading twelve bytes and then discarding every other one. Using the right Ethernet address is a big win. Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> Acked-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> Acked-by: Ben Warren <biggerbadderben@gmail.com>
-rw-r--r--drivers/net/dm9000x.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/drivers/net/dm9000x.c b/drivers/net/dm9000x.c
index c52d307..8ca2bf7 100644
--- a/drivers/net/dm9000x.c
+++ b/drivers/net/dm9000x.c
@@ -113,7 +113,7 @@ void eth_halt(void);
static int dm9000_probe(void);
static u16 phy_read(int);
static void phy_write(int, u16);
-u16 read_srom_word(int);
+static void read_srom_word(int, u8 *);
static u8 DM9000_ior(int);
static void DM9000_iow(int reg, u8 value);
@@ -348,8 +348,8 @@ eth_init(bd_t * bd)
/* Set Node address */
if (!eth_getenv_enetaddr("ethaddr", enetaddr)) {
#if !defined(CONFIG_AT91SAM9261EK)
- for (i = 0; i < 6; i++)
- enetaddr[i] = read_srom_word(i);
+ for (i = 0; i < 3; i++)
+ read_srom_word(i, enetaddr + 2 * i);
eth_setenv_enetaddr("ethaddr", enetaddr);
#endif
}
@@ -541,14 +541,14 @@ eth_rx(void)
/*
Read a word data from SROM
*/
-u16
-read_srom_word(int offset)
+static void read_srom_word(int offset, u8 *to)
{
DM9000_iow(DM9000_EPAR, offset);
DM9000_iow(DM9000_EPCR, 0x4);
udelay(8000);
DM9000_iow(DM9000_EPCR, 0x0);
- return (DM9000_ior(DM9000_EPDRL) + (DM9000_ior(DM9000_EPDRH) << 8));
+ to[0] = DM9000_ior(DM9000_EPDRL);
+ to[1] = DM9000_ior(DM9000_EPDRH);
}
void