Patchwork [U-Boot,03/28] net: Move mv64x6x_eth_initialize() to board_eth_init()

login
register
mail settings
Submitter Joe Hershberger
Date Jan. 20, 2012, 12:53 a.m.
Message ID <1327020811-1538-4-git-send-email-joe.hershberger@ni.com>
Download mbox | patch
Permalink /patch/136963/
State Superseded
Delegated to: Joe Hershberger
Headers show

Comments

Joe Hershberger - Jan. 20, 2012, 12:53 a.m.
Clears up checkpatch.pl complaint about extern in c file
Completes the effort started by Ben Warren in 2008 to generalize
eth init

Signed-off-by: Joe Hershberger <joe.hershberger@ni.com>
Cc: Joe Hershberger <joe.hershberger@gmail.com>
Cc: Wolfgang Denk <wd@denx.de>
---
 board/Marvell/db64360/db64360.c |   12 ++++++-
 board/Marvell/db64360/mv_eth.c  |   76 +++++++++++++++++++++++++++++++++++----
 board/Marvell/db64360/mv_eth.h  |   63 +-------------------------------
 board/Marvell/db64460/db64460.c |   12 ++++++-
 board/Marvell/db64460/mv_eth.c  |   76 +++++++++++++++++++++++++++++++++++----
 board/Marvell/db64460/mv_eth.h  |   63 +-------------------------------
 board/esd/cpci750/cpci750.c     |    6 +++
 board/esd/cpci750/mv_eth.c      |   76 +++++++++++++++++++++++++++++++++++----
 board/esd/cpci750/mv_eth.h      |   63 +-------------------------------
 board/prodrive/p3mx/mv_eth.c    |   76 +++++++++++++++++++++++++++++++++++----
 board/prodrive/p3mx/mv_eth.h    |   63 +-------------------------------
 board/prodrive/p3mx/p3mx.c      |    6 +++
 net/eth.c                       |    9 -----
 13 files changed, 314 insertions(+), 287 deletions(-)
Mike Frysinger - Feb. 3, 2012, 11:49 a.m.
On Thursday 19 January 2012 19:53:06 Joe Hershberger wrote:
> Clears up checkpatch.pl complaint about extern in c file
> Completes the effort started by Ben Warren in 2008 to generalize
> eth init

awesome.  these boards have been around "forever", so if Stefan doesn't have 
any feedback, i'm good to merge it.
-mike
Stefan Roese - Feb. 3, 2012, 12:03 p.m.
On Friday 03 February 2012 12:49:12 Mike Frysinger wrote:
> On Thursday 19 January 2012 19:53:06 Joe Hershberger wrote:
> > Clears up checkpatch.pl complaint about extern in c file
> > Completes the effort started by Ben Warren in 2008 to generalize
> > eth init
> 
> awesome.  these boards have been around "forever", so if Stefan doesn't
> have any feedback, i'm good to merge it.

I have no objections. I didn't even remember being maintainer of these PowerPC 
750/7448 based boards. It might be possible to drop support for those 
completely.

But never the less:

Acked-by: Stefan Roese <sr@denx.de>

Thanks,
Stefan

Patch

diff --git a/board/Marvell/db64360/db64360.c b/board/Marvell/db64360/db64360.c
index 5183466..c66dc14 100644
--- a/board/Marvell/db64360/db64360.c
+++ b/board/Marvell/db64360/db64360.c
@@ -40,6 +40,7 @@ 
 #include "mpsc.h"
 #include "i2c.h"
 #include "64360.h"
+#include "mv_eth.h"
 #include "mv_regs.h"
 
 #undef	DEBUG
@@ -934,5 +935,14 @@  void board_prebootm_init ()
 
 int board_eth_init(bd_t *bis)
 {
-	return pci_eth_init(bis);
+	int pci_retval;
+	int mv_retval;
+
+	pci_retval = pci_eth_init(bis);
+	mv_retval = mv6436x_eth_initialize(bis);
+
+	if (pci_retval < 0 && mv_retval < 0)
+		return -1;
+	else
+		return 0;
 }
diff --git a/board/Marvell/db64360/mv_eth.c b/board/Marvell/db64360/mv_eth.c
index 550610e..c6b618f 100644
--- a/board/Marvell/db64360/mv_eth.c
+++ b/board/Marvell/db64360/mv_eth.c
@@ -78,6 +78,67 @@ 
 #define MV_SET_REG_BITS(regOffset,bits) ((*((volatile unsigned int*)((INTERNAL_REG_BASE_ADDR) + (regOffset)))) |= ((unsigned int)my_cpu_to_le32(bits)))
 #define MV_RESET_REG_BITS(regOffset,bits) ((*((volatile unsigned int*)((INTERNAL_REG_BASE_ADDR) + (regOffset)))) &= ~((unsigned int)my_cpu_to_le32(bits)))
 
+/* ethernet.h API list */
+
+/* Port operation control routines */
+static void eth_port_init(ETH_PORT_INFO *p_eth_port_ctrl);
+static void eth_port_reset(ETH_PORT	eth_port_num);
+static bool eth_port_start(ETH_PORT_INFO *p_eth_port_ctrl);
+
+
+/* Port MAC address routines */
+static void eth_port_uc_addr_set(ETH_PORT eth_port_num,
+				  unsigned char *p_addr,
+				  ETH_QUEUE queue);
+#if 0	/* FIXME */
+static void eth_port_mc_addr(ETH_PORT eth_port_num,
+				 unsigned char *p_addr,
+				 ETH_QUEUE queue,
+				 int option);
+#endif
+
+/* PHY and MIB routines */
+static bool ethernet_phy_reset(ETH_PORT eth_port_num);
+
+static bool eth_port_write_smi_reg(ETH_PORT eth_port_num,
+				   unsigned int phy_reg,
+				   unsigned int value);
+
+static bool eth_port_read_smi_reg(ETH_PORT eth_port_num,
+				  unsigned int phy_reg,
+				  unsigned int *value);
+
+static void eth_clear_mib_counters(ETH_PORT	eth_port_num);
+
+/* Port data flow control routines */
+static ETH_FUNC_RET_STATUS eth_port_send(ETH_PORT_INFO *p_eth_port_ctrl,
+					     ETH_QUEUE tx_queue,
+					     PKT_INFO *p_pkt_info);
+static ETH_FUNC_RET_STATUS eth_tx_return_desc(ETH_PORT_INFO *p_eth_port_ctrl,
+					      ETH_QUEUE tx_queue,
+					      PKT_INFO *p_pkt_info);
+static ETH_FUNC_RET_STATUS eth_port_receive(ETH_PORT_INFO *p_eth_port_ctrl,
+					     ETH_QUEUE rx_queue,
+					     PKT_INFO *p_pkt_info);
+static ETH_FUNC_RET_STATUS eth_rx_return_buff(ETH_PORT_INFO *p_eth_port_ctrl,
+					      ETH_QUEUE rx_queue,
+					      PKT_INFO *p_pkt_info);
+
+
+static bool ether_init_tx_desc_ring(ETH_PORT_INFO  *p_eth_port_ctrl,
+				    ETH_QUEUE	tx_queue,
+				    int				tx_desc_num,
+				    int				tx_buff_size,
+				    unsigned int	tx_desc_base_addr,
+				    unsigned int	tx_buff_base_addr);
+
+static bool ether_init_rx_desc_ring(ETH_PORT_INFO  *p_eth_port_ctrl,
+				    ETH_QUEUE	rx_queue,
+				    int				rx_desc_num,
+				    int				rx_buff_size,
+				    unsigned int	rx_desc_base_addr,
+				    unsigned int	rx_buff_base_addr);
+
 /* Static function declarations */
 static int mv64360_eth_real_open (struct eth_device *eth);
 static int mv64360_eth_real_stop (struct eth_device *eth);
@@ -203,7 +264,7 @@  void db64360_eth_disable (struct eth_device *dev)
 }
 
 
-void mv6436x_eth_initialize (bd_t * bis)
+int mv6436x_eth_initialize(bd_t *bis)
 {
 	struct eth_device *dev;
 	ETH_PORT_INFO *ethernet_private;
@@ -216,7 +277,7 @@  void mv6436x_eth_initialize (bd_t * bis)
 		if (!dev) {
 			printf ("%s: mv_enet%d allocation failure, %s\n",
 				__FUNCTION__, devnum, "eth_device structure");
-			return;
+			return -1;
 		}
 
 		/* must be less than NAMESIZE (16) */
@@ -243,7 +304,7 @@  void mv6436x_eth_initialize (bd_t * bis)
 		default:	/* this should never happen */
 			printf ("%s: Invalid device number %d\n",
 				__FUNCTION__, devnum);
-			return;
+			return -1;
 		}
 
 		temp = getenv_f(s, buf, sizeof (buf));
@@ -273,7 +334,7 @@  void mv6436x_eth_initialize (bd_t * bis)
 				__FUNCTION__, dev->name,
 				"Private Device Structure");
 			free (dev);
-			return;
+			return -1;
 		}
 		/* start with an zeroed ETH_PORT_INFO */
 		memset (ethernet_private, 0, sizeof (ETH_PORT_INFO));
@@ -289,7 +350,7 @@  void mv6436x_eth_initialize (bd_t * bis)
 
 			free (ethernet_private);
 			free (dev);
-			return;
+			return -1;
 		}
 
 		port_private->stats =
@@ -302,7 +363,7 @@  void mv6436x_eth_initialize (bd_t * bis)
 			free (port_private);
 			free (ethernet_private);
 			free (dev);
-			return;
+			return -1;
 		}
 		memset (ethernet_private->port_private, 0,
 			sizeof (struct mv64360_eth_priv));
@@ -346,7 +407,7 @@  void mv6436x_eth_initialize (bd_t * bis)
 		default:	/* this should never happen */
 			printf ("%s: Invalid device number %d\n",
 				__FUNCTION__, devnum);
-			return;
+			return -1;
 		}
 
 		temp = getenv_f(s, buf, sizeof (buf));
@@ -390,6 +451,7 @@  void mv6436x_eth_initialize (bd_t * bis)
 	}
 	DP (printf ("%s: exit\n", __FUNCTION__));
 
+	return 0;
 }
 
 /**********************************************************************
diff --git a/board/Marvell/db64360/mv_eth.h b/board/Marvell/db64360/mv_eth.h
index 142910b..9b2a4da 100644
--- a/board/Marvell/db64360/mv_eth.h
+++ b/board/Marvell/db64360/mv_eth.h
@@ -165,6 +165,7 @@  struct mv64360_eth_priv {
 };
 
 
+int mv6436x_eth_initialize(bd_t *bis);
 int mv64360_eth_init (struct eth_device *dev);
 int mv64360_eth_stop (struct eth_device *dev);
 int mv64360_eth_start_xmit (struct eth_device*, volatile void* packet, int length);
@@ -778,66 +779,4 @@  typedef struct _eth_port_ctrl
 
 } ETH_PORT_INFO;
 
-
-/* ethernet.h API list */
-
-/* Port operation control routines */
-static void eth_port_init (ETH_PORT_INFO *p_eth_port_ctrl);
-static void eth_port_reset(ETH_PORT	eth_port_num);
-static bool eth_port_start(ETH_PORT_INFO *p_eth_port_ctrl);
-
-
-/* Port MAC address routines */
-static void eth_port_uc_addr_set (ETH_PORT eth_port_num,
-				  unsigned char *p_addr,
-				  ETH_QUEUE queue);
-#if 0	/* FIXME */
-static void eth_port_mc_addr	(ETH_PORT eth_port_num,
-				 unsigned char *p_addr,
-				 ETH_QUEUE queue,
-				 int option);
-#endif
-
-/* PHY and MIB routines */
-static bool ethernet_phy_reset(ETH_PORT eth_port_num);
-
-static bool eth_port_write_smi_reg(ETH_PORT eth_port_num,
-				   unsigned int phy_reg,
-				   unsigned int value);
-
-static bool eth_port_read_smi_reg(ETH_PORT eth_port_num,
-				  unsigned int phy_reg,
-				  unsigned int* value);
-
-static void eth_clear_mib_counters(ETH_PORT	eth_port_num);
-
-/* Port data flow control routines */
-static ETH_FUNC_RET_STATUS eth_port_send    (ETH_PORT_INFO *p_eth_port_ctrl,
-					     ETH_QUEUE tx_queue,
-					     PKT_INFO *p_pkt_info);
-static ETH_FUNC_RET_STATUS eth_tx_return_desc(ETH_PORT_INFO *p_eth_port_ctrl,
-					      ETH_QUEUE tx_queue,
-					      PKT_INFO *p_pkt_info);
-static ETH_FUNC_RET_STATUS eth_port_receive (ETH_PORT_INFO *p_eth_port_ctrl,
-					     ETH_QUEUE rx_queue,
-					     PKT_INFO *p_pkt_info);
-static ETH_FUNC_RET_STATUS eth_rx_return_buff(ETH_PORT_INFO *p_eth_port_ctrl,
-					      ETH_QUEUE rx_queue,
-					      PKT_INFO *p_pkt_info);
-
-
-static bool ether_init_tx_desc_ring(ETH_PORT_INFO  *p_eth_port_ctrl,
-				    ETH_QUEUE	tx_queue,
-				    int				tx_desc_num,
-				    int				tx_buff_size,
-				    unsigned int	tx_desc_base_addr,
-				    unsigned int	tx_buff_base_addr);
-
-static bool ether_init_rx_desc_ring(ETH_PORT_INFO  *p_eth_port_ctrl,
-				    ETH_QUEUE	rx_queue,
-				    int				rx_desc_num,
-				    int				rx_buff_size,
-				    unsigned int	rx_desc_base_addr,
-				    unsigned int	rx_buff_base_addr);
-
 #endif /* MV64360_ETH_ */
diff --git a/board/Marvell/db64460/db64460.c b/board/Marvell/db64460/db64460.c
index a7836ed..de201b5 100644
--- a/board/Marvell/db64460/db64460.c
+++ b/board/Marvell/db64460/db64460.c
@@ -40,6 +40,7 @@ 
 #include "mpsc.h"
 #include "i2c.h"
 #include "64460.h"
+#include "mv_eth.h"
 #include "mv_regs.h"
 
 #undef	DEBUG
@@ -934,5 +935,14 @@  void board_prebootm_init ()
 
 int board_eth_init(bd_t *bis)
 {
-	return pci_eth_init(bis);
+	int pci_retval;
+	int mv_retval;
+
+	pci_retval = pci_eth_init(bis);
+	mv_retval = mv6446x_eth_initialize(bis);
+
+	if (pci_retval < 0 && mv_retval < 0)
+		return -1;
+	else
+		return 0;
 }
diff --git a/board/Marvell/db64460/mv_eth.c b/board/Marvell/db64460/mv_eth.c
index c447229..2630b85 100644
--- a/board/Marvell/db64460/mv_eth.c
+++ b/board/Marvell/db64460/mv_eth.c
@@ -78,6 +78,67 @@ 
 #define MV_SET_REG_BITS(regOffset,bits) ((*((volatile unsigned int*)((INTERNAL_REG_BASE_ADDR) + (regOffset)))) |= ((unsigned int)my_cpu_to_le32(bits)))
 #define MV_RESET_REG_BITS(regOffset,bits) ((*((volatile unsigned int*)((INTERNAL_REG_BASE_ADDR) + (regOffset)))) &= ~((unsigned int)my_cpu_to_le32(bits)))
 
+/* ethernet.h API list */
+
+/* Port operation control routines */
+static void eth_port_init(ETH_PORT_INFO *p_eth_port_ctrl);
+static void eth_port_reset(ETH_PORT	eth_port_num);
+static bool eth_port_start(ETH_PORT_INFO *p_eth_port_ctrl);
+
+
+/* Port MAC address routines */
+static void eth_port_uc_addr_set(ETH_PORT eth_port_num,
+				  unsigned char *p_addr,
+				  ETH_QUEUE queue);
+#if 0	/* FIXME */
+static void eth_port_mc_addr(ETH_PORT eth_port_num,
+				 unsigned char *p_addr,
+				 ETH_QUEUE queue,
+				 int option);
+#endif
+
+/* PHY and MIB routines */
+static bool ethernet_phy_reset(ETH_PORT eth_port_num);
+
+static bool eth_port_write_smi_reg(ETH_PORT eth_port_num,
+				   unsigned int phy_reg,
+				   unsigned int value);
+
+static bool eth_port_read_smi_reg(ETH_PORT eth_port_num,
+				  unsigned int phy_reg,
+				  unsigned int *value);
+
+static void eth_clear_mib_counters(ETH_PORT	eth_port_num);
+
+/* Port data flow control routines */
+static ETH_FUNC_RET_STATUS eth_port_send(ETH_PORT_INFO *p_eth_port_ctrl,
+					     ETH_QUEUE tx_queue,
+					     PKT_INFO *p_pkt_info);
+static ETH_FUNC_RET_STATUS eth_tx_return_desc(ETH_PORT_INFO *p_eth_port_ctrl,
+					      ETH_QUEUE tx_queue,
+					      PKT_INFO *p_pkt_info);
+static ETH_FUNC_RET_STATUS eth_port_receive(ETH_PORT_INFO *p_eth_port_ctrl,
+					     ETH_QUEUE rx_queue,
+					     PKT_INFO *p_pkt_info);
+static ETH_FUNC_RET_STATUS eth_rx_return_buff(ETH_PORT_INFO *p_eth_port_ctrl,
+					      ETH_QUEUE rx_queue,
+					      PKT_INFO *p_pkt_info);
+
+
+static bool ether_init_tx_desc_ring(ETH_PORT_INFO  *p_eth_port_ctrl,
+				    ETH_QUEUE	tx_queue,
+				    int				tx_desc_num,
+				    int				tx_buff_size,
+				    unsigned int	tx_desc_base_addr,
+				    unsigned int	tx_buff_base_addr);
+
+static bool ether_init_rx_desc_ring(ETH_PORT_INFO  *p_eth_port_ctrl,
+				    ETH_QUEUE	rx_queue,
+				    int				rx_desc_num,
+				    int				rx_buff_size,
+				    unsigned int	rx_desc_base_addr,
+				    unsigned int	rx_buff_base_addr);
+
 /* Static function declarations */
 static int mv64460_eth_real_open (struct eth_device *eth);
 static int mv64460_eth_real_stop (struct eth_device *eth);
@@ -203,7 +264,7 @@  void db64460_eth_disable (struct eth_device *dev)
 }
 
 
-void mv6446x_eth_initialize (bd_t * bis)
+int mv6446x_eth_initialize(bd_t *bis)
 {
 	struct eth_device *dev;
 	ETH_PORT_INFO *ethernet_private;
@@ -216,7 +277,7 @@  void mv6446x_eth_initialize (bd_t * bis)
 		if (!dev) {
 			printf ("%s: mv_enet%d allocation failure, %s\n",
 				__FUNCTION__, devnum, "eth_device structure");
-			return;
+			return -1;
 		}
 
 		/* must be less than NAMESIZE (16) */
@@ -243,7 +304,7 @@  void mv6446x_eth_initialize (bd_t * bis)
 		default:	/* this should never happen */
 			printf ("%s: Invalid device number %d\n",
 				__FUNCTION__, devnum);
-			return;
+			return -1;
 		}
 
 		temp = getenv_f(s, buf, sizeof (buf));
@@ -272,7 +333,7 @@  void mv6446x_eth_initialize (bd_t * bis)
 				__FUNCTION__, dev->name,
 				"Private Device Structure");
 			free (dev);
-			return;
+			return -1;
 		}
 		/* start with an zeroed ETH_PORT_INFO */
 		memset (ethernet_private, 0, sizeof (ETH_PORT_INFO));
@@ -288,7 +349,7 @@  void mv6446x_eth_initialize (bd_t * bis)
 
 			free (ethernet_private);
 			free (dev);
-			return;
+			return -1;
 		}
 
 		port_private->stats =
@@ -301,7 +362,7 @@  void mv6446x_eth_initialize (bd_t * bis)
 			free (port_private);
 			free (ethernet_private);
 			free (dev);
-			return;
+			return -1;
 		}
 		memset (ethernet_private->port_private, 0,
 			sizeof (struct mv64460_eth_priv));
@@ -345,7 +406,7 @@  void mv6446x_eth_initialize (bd_t * bis)
 		default:	/* this should never happen */
 			printf ("%s: Invalid device number %d\n",
 				__FUNCTION__, devnum);
-			return;
+			return -1;
 		}
 
 		temp = getenv_f(s, buf, sizeof (buf));
@@ -389,6 +450,7 @@  void mv6446x_eth_initialize (bd_t * bis)
 	}
 	DP (printf ("%s: exit\n", __FUNCTION__));
 
+	return 0;
 }
 
 /**********************************************************************
diff --git a/board/Marvell/db64460/mv_eth.h b/board/Marvell/db64460/mv_eth.h
index cbe751a..61d71a2 100644
--- a/board/Marvell/db64460/mv_eth.h
+++ b/board/Marvell/db64460/mv_eth.h
@@ -164,6 +164,7 @@  struct mv64460_eth_priv {
 
 };
 
+int mv6446x_eth_initialize(bd_t *bis);
 int mv64460_eth_init (struct eth_device *dev);
 int mv64460_eth_stop (struct eth_device *dev);
 int mv64460_eth_start_xmit (struct eth_device*, volatile void* packet, int length);
@@ -775,66 +776,4 @@  typedef struct _eth_port_ctrl
 
 } ETH_PORT_INFO;
 
-
-/* ethernet.h API list */
-
-/* Port operation control routines */
-static void eth_port_init (ETH_PORT_INFO *p_eth_port_ctrl);
-static void eth_port_reset(ETH_PORT	eth_port_num);
-static bool eth_port_start(ETH_PORT_INFO *p_eth_port_ctrl);
-
-
-/* Port MAC address routines */
-static void eth_port_uc_addr_set (ETH_PORT eth_port_num,
-				  unsigned char *p_addr,
-				  ETH_QUEUE queue);
-#if 0	/* FIXME */
-static void eth_port_mc_addr	(ETH_PORT eth_port_num,
-				 unsigned char *p_addr,
-				 ETH_QUEUE queue,
-				 int option);
-#endif
-
-/* PHY and MIB routines */
-static bool ethernet_phy_reset(ETH_PORT eth_port_num);
-
-static bool eth_port_write_smi_reg(ETH_PORT eth_port_num,
-				   unsigned int phy_reg,
-				   unsigned int value);
-
-static bool eth_port_read_smi_reg(ETH_PORT eth_port_num,
-				  unsigned int phy_reg,
-				  unsigned int* value);
-
-static void eth_clear_mib_counters(ETH_PORT	eth_port_num);
-
-/* Port data flow control routines */
-static ETH_FUNC_RET_STATUS eth_port_send    (ETH_PORT_INFO *p_eth_port_ctrl,
-					     ETH_QUEUE tx_queue,
-					     PKT_INFO *p_pkt_info);
-static ETH_FUNC_RET_STATUS eth_tx_return_desc(ETH_PORT_INFO *p_eth_port_ctrl,
-					      ETH_QUEUE tx_queue,
-					      PKT_INFO *p_pkt_info);
-static ETH_FUNC_RET_STATUS eth_port_receive (ETH_PORT_INFO *p_eth_port_ctrl,
-					     ETH_QUEUE rx_queue,
-					     PKT_INFO *p_pkt_info);
-static ETH_FUNC_RET_STATUS eth_rx_return_buff(ETH_PORT_INFO *p_eth_port_ctrl,
-					      ETH_QUEUE rx_queue,
-					      PKT_INFO *p_pkt_info);
-
-
-static bool ether_init_tx_desc_ring(ETH_PORT_INFO  *p_eth_port_ctrl,
-				    ETH_QUEUE	tx_queue,
-				    int				tx_desc_num,
-				    int				tx_buff_size,
-				    unsigned int	tx_desc_base_addr,
-				    unsigned int	tx_buff_base_addr);
-
-static bool ether_init_rx_desc_ring(ETH_PORT_INFO  *p_eth_port_ctrl,
-				    ETH_QUEUE	rx_queue,
-				    int				rx_desc_num,
-				    int				rx_buff_size,
-				    unsigned int	rx_desc_base_addr,
-				    unsigned int	rx_buff_base_addr);
-
 #endif /* MV64460_ETH_ */
diff --git a/board/esd/cpci750/cpci750.c b/board/esd/cpci750/cpci750.c
index 08311c9..904eff7 100644
--- a/board/esd/cpci750/cpci750.c
+++ b/board/esd/cpci750/cpci750.c
@@ -40,6 +40,7 @@ 
 #include "mpsc.h"
 #include "i2c.h"
 #include "64360.h"
+#include "mv_eth.h"
 #include "mv_regs.h"
 
 #undef	DEBUG
@@ -148,6 +149,11 @@  int board_video_skip(void)
 	return CPCI750_SLAVE_TEST;
 }
 
+int board_eth_init(bd_t *bis)
+{
+	return mv6436x_eth_initialize(bis);
+}
+
 /* ------------------------------------------------------------------------- */
 
 /*
diff --git a/board/esd/cpci750/mv_eth.c b/board/esd/cpci750/mv_eth.c
index db2324b..22bf9b5 100644
--- a/board/esd/cpci750/mv_eth.c
+++ b/board/esd/cpci750/mv_eth.c
@@ -78,6 +78,67 @@ 
 #define MV_SET_REG_BITS(regOffset,bits) ((*((volatile unsigned int*)((INTERNAL_REG_BASE_ADDR) + (regOffset)))) |= ((unsigned int)my_cpu_to_le32(bits)))
 #define MV_RESET_REG_BITS(regOffset,bits) ((*((volatile unsigned int*)((INTERNAL_REG_BASE_ADDR) + (regOffset)))) &= ~((unsigned int)my_cpu_to_le32(bits)))
 
+/* ethernet.h API list */
+
+/* Port operation control routines */
+static void eth_port_init(ETH_PORT_INFO *p_eth_port_ctrl);
+static void eth_port_reset(ETH_PORT	eth_port_num);
+static bool eth_port_start(ETH_PORT_INFO *p_eth_port_ctrl);
+
+
+/* Port MAC address routines */
+static void eth_port_uc_addr_set(ETH_PORT eth_port_num,
+				  unsigned char *p_addr,
+				  ETH_QUEUE queue);
+#if 0	/* FIXME */
+static void eth_port_mc_addr(ETH_PORT eth_port_num,
+				 unsigned char *p_addr,
+				 ETH_QUEUE queue,
+				 int option);
+#endif
+
+/* PHY and MIB routines */
+static bool ethernet_phy_reset(ETH_PORT eth_port_num);
+
+static bool eth_port_write_smi_reg(ETH_PORT eth_port_num,
+				   unsigned int phy_reg,
+				   unsigned int value);
+
+static bool eth_port_read_smi_reg(ETH_PORT eth_port_num,
+				  unsigned int phy_reg,
+				  unsigned int *value);
+
+static void eth_clear_mib_counters(ETH_PORT	eth_port_num);
+
+/* Port data flow control routines */
+static ETH_FUNC_RET_STATUS eth_port_send(ETH_PORT_INFO *p_eth_port_ctrl,
+					     ETH_QUEUE tx_queue,
+					     PKT_INFO *p_pkt_info);
+static ETH_FUNC_RET_STATUS eth_tx_return_desc(ETH_PORT_INFO *p_eth_port_ctrl,
+					      ETH_QUEUE tx_queue,
+					      PKT_INFO *p_pkt_info);
+static ETH_FUNC_RET_STATUS eth_port_receive(ETH_PORT_INFO *p_eth_port_ctrl,
+					     ETH_QUEUE rx_queue,
+					     PKT_INFO *p_pkt_info);
+static ETH_FUNC_RET_STATUS eth_rx_return_buff(ETH_PORT_INFO *p_eth_port_ctrl,
+					      ETH_QUEUE rx_queue,
+					      PKT_INFO *p_pkt_info);
+
+
+static bool ether_init_tx_desc_ring(ETH_PORT_INFO  *p_eth_port_ctrl,
+				    ETH_QUEUE	tx_queue,
+				    int				tx_desc_num,
+				    int				tx_buff_size,
+				    unsigned int	tx_desc_base_addr,
+				    unsigned int	tx_buff_base_addr);
+
+static bool ether_init_rx_desc_ring(ETH_PORT_INFO  *p_eth_port_ctrl,
+				    ETH_QUEUE	rx_queue,
+				    int				rx_desc_num,
+				    int				rx_buff_size,
+				    unsigned int	rx_desc_base_addr,
+				    unsigned int	rx_buff_base_addr);
+
 /* Static function declarations */
 static int mv64360_eth_real_open (struct eth_device *eth);
 static int mv64360_eth_real_stop (struct eth_device *eth);
@@ -203,7 +264,7 @@  void db64360_eth_disable (struct eth_device *dev)
 }
 
 
-void mv6436x_eth_initialize (bd_t * bis)
+int mv6436x_eth_initialize(bd_t *bis)
 {
 	struct eth_device *dev;
 	ETH_PORT_INFO *ethernet_private;
@@ -216,7 +277,7 @@  void mv6436x_eth_initialize (bd_t * bis)
 		if (!dev) {
 			printf ("%s: mv_enet%d allocation failure, %s\n",
 				__FUNCTION__, devnum, "eth_device structure");
-			return;
+			return -1;
 		}
 
 		/* must be less than NAMESIZE (16) */
@@ -243,7 +304,7 @@  void mv6436x_eth_initialize (bd_t * bis)
 		default:	/* this should never happen */
 			printf ("%s: Invalid device number %d\n",
 				__FUNCTION__, devnum);
-			return;
+			return -1;
 		}
 
 		temp = getenv_f(s, buf, sizeof (buf));
@@ -273,7 +334,7 @@  void mv6436x_eth_initialize (bd_t * bis)
 				__FUNCTION__, dev->name,
 				"Private Device Structure");
 			free (dev);
-			return;
+			return -1;
 		}
 		/* start with an zeroed ETH_PORT_INFO */
 		memset (ethernet_private, 0, sizeof (ETH_PORT_INFO));
@@ -290,7 +351,7 @@  void mv6436x_eth_initialize (bd_t * bis)
 
 			free (ethernet_private);
 			free (dev);
-			return;
+			return -1;
 		}
 
 		port_private->stats =
@@ -303,7 +364,7 @@  void mv6436x_eth_initialize (bd_t * bis)
 			free (port_private);
 			free (ethernet_private);
 			free (dev);
-			return;
+			return -1;
 		}
 		memset (ethernet_private->port_private, 0,
 			sizeof (struct mv64360_eth_priv));
@@ -347,7 +408,7 @@  void mv6436x_eth_initialize (bd_t * bis)
 		default:	/* this should never happen */
 			printf ("%s: Invalid device number %d\n",
 				__FUNCTION__, devnum);
-			return;
+			return -1;
 		}
 
 		temp = getenv_f(s, buf, sizeof (buf));
@@ -391,6 +452,7 @@  void mv6436x_eth_initialize (bd_t * bis)
 	}
 	DP (printf ("%s: exit\n", __FUNCTION__));
 
+	return 0;
 }
 
 /**********************************************************************
diff --git a/board/esd/cpci750/mv_eth.h b/board/esd/cpci750/mv_eth.h
index b761135..6dfe807 100644
--- a/board/esd/cpci750/mv_eth.h
+++ b/board/esd/cpci750/mv_eth.h
@@ -166,6 +166,7 @@  struct mv64360_eth_priv {
 };
 
 
+int mv6436x_eth_initialize(bd_t *bis);
 int mv64360_eth_init (struct eth_device *dev);
 int mv64360_eth_stop (struct eth_device *dev);
 int mv64360_eth_start_xmit (struct eth_device*, volatile void* packet, int length);
@@ -779,66 +780,4 @@  typedef struct _eth_port_ctrl
 
 } ETH_PORT_INFO;
 
-
-/* ethernet.h API list */
-
-/* Port operation control routines */
-static void eth_port_init (ETH_PORT_INFO *p_eth_port_ctrl);
-static void eth_port_reset(ETH_PORT	eth_port_num);
-static bool eth_port_start(ETH_PORT_INFO *p_eth_port_ctrl);
-
-
-/* Port MAC address routines */
-static void eth_port_uc_addr_set (ETH_PORT eth_port_num,
-				  unsigned char *p_addr,
-				  ETH_QUEUE queue);
-#if 0	/* FIXME */
-static void eth_port_mc_addr	(ETH_PORT eth_port_num,
-				 unsigned char *p_addr,
-				 ETH_QUEUE queue,
-				 int option);
-#endif
-
-/* PHY and MIB routines */
-static bool ethernet_phy_reset(ETH_PORT eth_port_num);
-
-static bool eth_port_write_smi_reg(ETH_PORT eth_port_num,
-				   unsigned int phy_reg,
-				   unsigned int value);
-
-static bool eth_port_read_smi_reg(ETH_PORT eth_port_num,
-				  unsigned int phy_reg,
-				  unsigned int* value);
-
-static void eth_clear_mib_counters(ETH_PORT	eth_port_num);
-
-/* Port data flow control routines */
-static ETH_FUNC_RET_STATUS eth_port_send    (ETH_PORT_INFO *p_eth_port_ctrl,
-					     ETH_QUEUE tx_queue,
-					     PKT_INFO *p_pkt_info);
-static ETH_FUNC_RET_STATUS eth_tx_return_desc(ETH_PORT_INFO *p_eth_port_ctrl,
-					      ETH_QUEUE tx_queue,
-					      PKT_INFO *p_pkt_info);
-static ETH_FUNC_RET_STATUS eth_port_receive (ETH_PORT_INFO *p_eth_port_ctrl,
-					     ETH_QUEUE rx_queue,
-					     PKT_INFO *p_pkt_info);
-static ETH_FUNC_RET_STATUS eth_rx_return_buff(ETH_PORT_INFO *p_eth_port_ctrl,
-					      ETH_QUEUE rx_queue,
-					      PKT_INFO *p_pkt_info);
-
-
-static bool ether_init_tx_desc_ring(ETH_PORT_INFO  *p_eth_port_ctrl,
-				    ETH_QUEUE	tx_queue,
-				    int				tx_desc_num,
-				    int				tx_buff_size,
-				    unsigned int	tx_desc_base_addr,
-				    unsigned int	tx_buff_base_addr);
-
-static bool ether_init_rx_desc_ring(ETH_PORT_INFO  *p_eth_port_ctrl,
-				    ETH_QUEUE	rx_queue,
-				    int				rx_desc_num,
-				    int				rx_buff_size,
-				    unsigned int	rx_desc_base_addr,
-				    unsigned int	rx_buff_base_addr);
-
 #endif /* MV64360_ETH_ */
diff --git a/board/prodrive/p3mx/mv_eth.c b/board/prodrive/p3mx/mv_eth.c
index f26ded8..264dc2b 100644
--- a/board/prodrive/p3mx/mv_eth.c
+++ b/board/prodrive/p3mx/mv_eth.c
@@ -85,6 +85,67 @@ 
 
 #define my_cpu_to_le32(x) my_le32_to_cpu((x))
 
+/* ethernet.h API list */
+
+/* Port operation control routines */
+static void eth_port_init(ETH_PORT_INFO *p_eth_port_ctrl);
+static void eth_port_reset(ETH_PORT	eth_port_num);
+static bool eth_port_start(ETH_PORT_INFO *p_eth_port_ctrl);
+
+
+/* Port MAC address routines */
+static void eth_port_uc_addr_set(ETH_PORT eth_port_num,
+				  unsigned char *p_addr,
+				  ETH_QUEUE queue);
+#if 0	/* FIXME */
+static void eth_port_mc_addr(ETH_PORT eth_port_num,
+				 unsigned char *p_addr,
+				 ETH_QUEUE queue,
+				 int option);
+#endif
+
+/* PHY and MIB routines */
+static bool ethernet_phy_reset(ETH_PORT eth_port_num);
+
+static bool eth_port_write_smi_reg(ETH_PORT eth_port_num,
+				   unsigned int phy_reg,
+				   unsigned int value);
+
+static bool eth_port_read_smi_reg(ETH_PORT eth_port_num,
+				  unsigned int phy_reg,
+				  unsigned int *value);
+
+static void eth_clear_mib_counters(ETH_PORT	eth_port_num);
+
+/* Port data flow control routines */
+static ETH_FUNC_RET_STATUS eth_port_send(ETH_PORT_INFO *p_eth_port_ctrl,
+					     ETH_QUEUE tx_queue,
+					     PKT_INFO *p_pkt_info);
+static ETH_FUNC_RET_STATUS eth_tx_return_desc(ETH_PORT_INFO *p_eth_port_ctrl,
+					      ETH_QUEUE tx_queue,
+					      PKT_INFO *p_pkt_info);
+static ETH_FUNC_RET_STATUS eth_port_receive(ETH_PORT_INFO *p_eth_port_ctrl,
+					     ETH_QUEUE rx_queue,
+					     PKT_INFO *p_pkt_info);
+static ETH_FUNC_RET_STATUS eth_rx_return_buff(ETH_PORT_INFO *p_eth_port_ctrl,
+					      ETH_QUEUE rx_queue,
+					      PKT_INFO *p_pkt_info);
+
+
+static bool ether_init_tx_desc_ring(ETH_PORT_INFO  *p_eth_port_ctrl,
+				    ETH_QUEUE	tx_queue,
+				    int				tx_desc_num,
+				    int				tx_buff_size,
+				    unsigned int	tx_desc_base_addr,
+				    unsigned int	tx_buff_base_addr);
+
+static bool ether_init_rx_desc_ring(ETH_PORT_INFO  *p_eth_port_ctrl,
+				    ETH_QUEUE	rx_queue,
+				    int				rx_desc_num,
+				    int				rx_buff_size,
+				    unsigned int	rx_desc_base_addr,
+				    unsigned int	rx_buff_base_addr);
+
 /* Static function declarations */
 static int mv64460_eth_real_open (struct eth_device *eth);
 static int mv64460_eth_real_stop (struct eth_device *eth);
@@ -247,7 +308,7 @@  void mv_eth_phy_init (void)
 	MV_REG_WRITE (ETH_PHY_DFCDL_CONFIG0_REG, 0x300000);
 }
 
-void mv6446x_eth_initialize (bd_t * bis)
+int mv6446x_eth_initialize(bd_t *bis)
 {
 	struct eth_device *dev;
 	ETH_PORT_INFO *ethernet_private;
@@ -269,7 +330,7 @@  void mv6446x_eth_initialize (bd_t * bis)
 		if (!dev) {
 			printf ("%s: mv_enet%d allocation failure, %s\n",
 				__FUNCTION__, devnum, "eth_device structure");
-			return;
+			return -1;
 		}
 
 		/* must be less than NAMESIZE (16) */
@@ -293,7 +354,7 @@  void mv6446x_eth_initialize (bd_t * bis)
 		default:	/* this should never happen */
 			printf ("%s: Invalid device number %d\n",
 				__FUNCTION__, devnum);
-			return;
+			return -1;
 		}
 
 		temp = getenv_f(s, buf, sizeof (buf));
@@ -322,7 +383,7 @@  void mv6446x_eth_initialize (bd_t * bis)
 				__FUNCTION__, dev->name,
 				"Private Device Structure");
 			free (dev);
-			return;
+			return -1;
 		}
 		/* start with an zeroed ETH_PORT_INFO */
 		memset (ethernet_private, 0, sizeof (ETH_PORT_INFO));
@@ -338,7 +399,7 @@  void mv6446x_eth_initialize (bd_t * bis)
 
 			free (ethernet_private);
 			free (dev);
-			return;
+			return -1;
 		}
 
 		port_private->stats =
@@ -351,7 +412,7 @@  void mv6446x_eth_initialize (bd_t * bis)
 			free (port_private);
 			free (ethernet_private);
 			free (dev);
-			return;
+			return -1;
 		}
 		memset (ethernet_private->port_private, 0,
 			sizeof (struct mv64460_eth_priv));
@@ -392,7 +453,7 @@  void mv6446x_eth_initialize (bd_t * bis)
 		default:	/* this should never happen */
 			printf ("%s: Invalid device number %d\n",
 				__FUNCTION__, devnum);
-			return;
+			return -1;
 		}
 
 		temp = getenv_f(s, buf, sizeof (buf));
@@ -437,6 +498,7 @@  void mv6446x_eth_initialize (bd_t * bis)
 	}
 	DP (printf ("%s: exit\n", __FUNCTION__));
 
+	return 0;
 }
 
 /**********************************************************************
diff --git a/board/prodrive/p3mx/mv_eth.h b/board/prodrive/p3mx/mv_eth.h
index af15274..138a3af 100644
--- a/board/prodrive/p3mx/mv_eth.h
+++ b/board/prodrive/p3mx/mv_eth.h
@@ -164,6 +164,7 @@  struct mv64460_eth_priv {
     int first_init;
 };
 
+int mv6446x_eth_initialize(bd_t *bis);
 int mv64460_eth_init (struct eth_device *dev);
 int mv64460_eth_stop (struct eth_device *dev);
 int mv64460_eth_start_xmit (struct eth_device*, volatile void* packet, int length);
@@ -775,66 +776,4 @@  typedef struct _eth_port_ctrl
 
 } ETH_PORT_INFO;
 
-
-/* ethernet.h API list */
-
-/* Port operation control routines */
-static void eth_port_init (ETH_PORT_INFO *p_eth_port_ctrl);
-static void eth_port_reset(ETH_PORT	eth_port_num);
-static bool eth_port_start(ETH_PORT_INFO *p_eth_port_ctrl);
-
-
-/* Port MAC address routines */
-static void eth_port_uc_addr_set (ETH_PORT eth_port_num,
-				  unsigned char *p_addr,
-				  ETH_QUEUE queue);
-#if 0	/* FIXME */
-static void eth_port_mc_addr	(ETH_PORT eth_port_num,
-				 unsigned char *p_addr,
-				 ETH_QUEUE queue,
-				 int option);
-#endif
-
-/* PHY and MIB routines */
-static bool ethernet_phy_reset(ETH_PORT eth_port_num);
-
-static bool eth_port_write_smi_reg(ETH_PORT eth_port_num,
-				   unsigned int phy_reg,
-				   unsigned int value);
-
-static bool eth_port_read_smi_reg(ETH_PORT eth_port_num,
-				  unsigned int phy_reg,
-				  unsigned int* value);
-
-static void eth_clear_mib_counters(ETH_PORT	eth_port_num);
-
-/* Port data flow control routines */
-static ETH_FUNC_RET_STATUS eth_port_send    (ETH_PORT_INFO *p_eth_port_ctrl,
-					     ETH_QUEUE tx_queue,
-					     PKT_INFO *p_pkt_info);
-static ETH_FUNC_RET_STATUS eth_tx_return_desc(ETH_PORT_INFO *p_eth_port_ctrl,
-					      ETH_QUEUE tx_queue,
-					      PKT_INFO *p_pkt_info);
-static ETH_FUNC_RET_STATUS eth_port_receive (ETH_PORT_INFO *p_eth_port_ctrl,
-					     ETH_QUEUE rx_queue,
-					     PKT_INFO *p_pkt_info);
-static ETH_FUNC_RET_STATUS eth_rx_return_buff(ETH_PORT_INFO *p_eth_port_ctrl,
-					      ETH_QUEUE rx_queue,
-					      PKT_INFO *p_pkt_info);
-
-
-static bool ether_init_tx_desc_ring(ETH_PORT_INFO  *p_eth_port_ctrl,
-				    ETH_QUEUE	tx_queue,
-				    int				tx_desc_num,
-				    int				tx_buff_size,
-				    unsigned int	tx_desc_base_addr,
-				    unsigned int	tx_buff_base_addr);
-
-static bool ether_init_rx_desc_ring(ETH_PORT_INFO  *p_eth_port_ctrl,
-				    ETH_QUEUE	rx_queue,
-				    int				rx_desc_num,
-				    int				rx_buff_size,
-				    unsigned int	rx_desc_base_addr,
-				    unsigned int	rx_buff_base_addr);
-
 #endif /* MV64460_ETH_ */
diff --git a/board/prodrive/p3mx/p3mx.c b/board/prodrive/p3mx/p3mx.c
index 09e4f82..31c7869 100644
--- a/board/prodrive/p3mx/p3mx.c
+++ b/board/prodrive/p3mx/p3mx.c
@@ -44,6 +44,7 @@ 
 #include "eth.h"
 #include "mpsc.h"
 #include "64460.h"
+#include "mv_eth.h"
 #include "mv_regs.h"
 #include "p3mx.h"
 
@@ -82,6 +83,11 @@  void set_led(int);
 
 /* ------------------------------------------------------------------------- */
 
+int board_eth_init(bd_t *bis)
+{
+	return mv6446x_eth_initialize(bis);
+}
+
 /*
  * This is a version of the GT register space remapping function that
  * doesn't touch globals (meaning, it's ok to run from flash.)
diff --git a/net/eth.c b/net/eth.c
index 02ccc75..fdc9e22 100644
--- a/net/eth.c
+++ b/net/eth.c
@@ -81,9 +81,6 @@  static int __def_eth_init(bd_t *bis)
 int cpu_eth_init(bd_t *bis) __attribute__((weak, alias("__def_eth_init")));
 int board_eth_init(bd_t *bis) __attribute__((weak, alias("__def_eth_init")));
 
-extern int mv6436x_eth_initialize(bd_t *);
-extern int mv6446x_eth_initialize(bd_t *);
-
 #ifdef CONFIG_API
 extern void (*push_packet)(volatile void *, int);
 
@@ -251,12 +248,6 @@  int eth_initialize(bd_t *bis)
 	} else
 		printf("Net Initialization Skipped\n");
 
-#if defined(CONFIG_DB64360) || defined(CONFIG_CPCI750)
-	mv6436x_eth_initialize(bis);
-#endif
-#if defined(CONFIG_DB64460) || defined(CONFIG_P3Mx)
-	mv6446x_eth_initialize(bis);
-#endif
 	if (!eth_devices) {
 		puts("No ethernet found.\n");
 		show_boot_progress(-64);