summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG6
-rw-r--r--common/miiphyutil.c17
-rw-r--r--include/miiphy.h2
-rw-r--r--net/eth.c9
4 files changed, 27 insertions, 7 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 2f5fe91bb..826f8633a 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -2,6 +2,12 @@
Changes for U-Boot 1.1.4:
======================================================================
+* Fix miiphy global data initialization (problem on 4xx boards when no
+ ethaddr is assigned). Initialization moved from miiphy_register() to
+ eth_initialize().
+
+ Based on initial patch for 4xx platform by Matthias Fuchs.
+
* Remove unnnecessary #include <linux/types.h> from include/asm-*/u-boot.h
* Allow use of include/image.h and include/asm-*/u-boot.h in proprietary code.
diff --git a/common/miiphyutil.c b/common/miiphyutil.c
index d67c8b537..e411e573c 100644
--- a/common/miiphyutil.c
+++ b/common/miiphyutil.c
@@ -60,6 +60,16 @@ static struct mii_dev *current_mii;
/*****************************************************************************
*
+ * Initialize global data. Need to be called before any other miiphy routine.
+ */
+void miiphy_init()
+{
+ INIT_LIST_HEAD(&mii_devs);
+ current_mii = NULL;
+}
+
+/*****************************************************************************
+ *
* Register read and write MII access routines for the device <name>.
*/
void miiphy_register(char *name,
@@ -71,15 +81,8 @@ void miiphy_register(char *name,
struct list_head *entry;
struct mii_dev *new_dev;
struct mii_dev *miidev;
- static int head_initialized = 0;
unsigned int name_len;
- if (head_initialized == 0) {
- INIT_LIST_HEAD(&mii_devs);
- current_mii = NULL;
- head_initialized = 1;
- }
-
/* check if we have unique name */
list_for_each(entry, &mii_devs) {
miidev = list_entry(entry, struct mii_dev, link);
diff --git a/include/miiphy.h b/include/miiphy.h
index 3c6ee7707..71716b04d 100644
--- a/include/miiphy.h
+++ b/include/miiphy.h
@@ -53,6 +53,8 @@ int miiphy_duplex(char *devname, unsigned char addr);
int miiphy_link(char *devname, unsigned char addr);
#endif
+void miiphy_init(void);
+
void miiphy_register(char *devname,
int (* read)(char *devname, unsigned char addr,
unsigned char reg, unsigned short *value),
diff --git a/net/eth.c b/net/eth.c
index b4ff5eff6..1646111d1 100644
--- a/net/eth.c
+++ b/net/eth.c
@@ -24,6 +24,7 @@
#include <common.h>
#include <command.h>
#include <net.h>
+#include <miiphy.h>
#if (CONFIG_COMMANDS & CFG_CMD_NET) && defined(CONFIG_NET_MULTI)
@@ -136,6 +137,10 @@ int eth_initialize(bd_t *bis)
eth_devices = NULL;
eth_current = NULL;
+#if defined(CONFIG_MII) || (CONFIG_COMMANDS & CFG_CMD_MII)
+ miiphy_init();
+#endif
+
#ifdef CONFIG_DB64360
mv6436x_eth_initialize(bis);
#endif
@@ -442,6 +447,10 @@ extern int ns7520_miiphy_initialize(bd_t *bis);
int eth_initialize(bd_t *bis)
{
+#if defined(CONFIG_MII) || (CONFIG_COMMANDS & CFG_CMD_MII)
+ miiphy_init();
+#endif
+
#if defined(CONFIG_AT91RM9200)
at91rm9200_miiphy_initialize(bis);
#endif