Browse Source

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.

Marian Balakowicz 19 years ago
parent
commit
d9785c14bf
4 changed files with 27 additions and 7 deletions
  1. 6 0
      CHANGELOG
  2. 10 7
      common/miiphyutil.c
  3. 2 0
      include/miiphy.h
  4. 9 0
      net/eth.c

+ 6 - 0
CHANGELOG

@@ -2,6 +2,12 @@
 Changes for U-Boot 1.1.4:
 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
 * 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.
 * Allow use of include/image.h and include/asm-*/u-boot.h in proprietary code.

+ 10 - 7
common/miiphyutil.c

@@ -58,6 +58,16 @@ struct mii_dev {
 static struct list_head mii_devs;
 static struct list_head mii_devs;
 static struct mii_dev *current_mii;
 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>.
  * Register read and write MII access routines for the device <name>.
@@ -71,15 +81,8 @@ void miiphy_register(char *name,
 	struct list_head *entry;
 	struct list_head *entry;
 	struct mii_dev *new_dev;
 	struct mii_dev *new_dev;
 	struct mii_dev *miidev;
 	struct mii_dev *miidev;
-	static int head_initialized = 0;
 	unsigned int name_len;
 	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 */
 	/* check if we have unique name */
 	list_for_each(entry, &mii_devs) {
 	list_for_each(entry, &mii_devs) {
 		miidev = list_entry(entry, struct mii_dev, link);
 		miidev = list_entry(entry, struct mii_dev, link);

+ 2 - 0
include/miiphy.h

@@ -53,6 +53,8 @@ int  miiphy_duplex(char *devname, unsigned char addr);
 int  miiphy_link(char *devname, unsigned char addr);
 int  miiphy_link(char *devname, unsigned char addr);
 #endif
 #endif
 
 
+void miiphy_init(void);
+
 void miiphy_register(char *devname,
 void miiphy_register(char *devname,
 	int (* read)(char *devname, unsigned char addr,
 	int (* read)(char *devname, unsigned char addr,
 		unsigned char reg, unsigned short *value),
 		unsigned char reg, unsigned short *value),

+ 9 - 0
net/eth.c

@@ -24,6 +24,7 @@
 #include <common.h>
 #include <common.h>
 #include <command.h>
 #include <command.h>
 #include <net.h>
 #include <net.h>
+#include <miiphy.h>
 
 
 #if (CONFIG_COMMANDS & CFG_CMD_NET) && defined(CONFIG_NET_MULTI)
 #if (CONFIG_COMMANDS & CFG_CMD_NET) && defined(CONFIG_NET_MULTI)
 
 
@@ -136,6 +137,10 @@ int eth_initialize(bd_t *bis)
 	eth_devices = NULL;
 	eth_devices = NULL;
 	eth_current = NULL;
 	eth_current = NULL;
 
 
+#if defined(CONFIG_MII) || (CONFIG_COMMANDS & CFG_CMD_MII)
+	miiphy_init();
+#endif
+
 #ifdef CONFIG_DB64360
 #ifdef CONFIG_DB64360
 	mv6436x_eth_initialize(bis);
 	mv6436x_eth_initialize(bis);
 #endif
 #endif
@@ -442,6 +447,10 @@ extern int ns7520_miiphy_initialize(bd_t *bis);
 
 
 int eth_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)
 #if defined(CONFIG_AT91RM9200)
 	at91rm9200_miiphy_initialize(bis);
 	at91rm9200_miiphy_initialize(bis);
 #endif
 #endif