Since the on-chip MAC does not have an eeprom or similar interface, force
all Blackfin boards that use this to define their own board_get_enetaddr()
function.

Signed-off-by: Mike Frysinger <vap...@gentoo.org>
CC: Ben Warren <biggerbadder...@gmail.com>
---
 drivers/net/bfin_mac.c |   24 +++++++++++++++++++++++-
 include/common.h       |    2 +-
 lib_blackfin/board.c   |   31 ++-----------------------------
 3 files changed, 26 insertions(+), 31 deletions(-)

diff --git a/drivers/net/bfin_mac.c b/drivers/net/bfin_mac.c
index dddbb78..f074f17 100644
--- a/drivers/net/bfin_mac.c
+++ b/drivers/net/bfin_mac.c
@@ -70,8 +70,9 @@ const ADI_DMA_CONFIG_REG txdmacfg = {
        .b_FLOW    = 7  /* large desc flow */
 };
 
-int bfin_EMAC_initialize(bd_t *bis)
+int bfin_EMAC_initialize(bd_t *bd)
 {
+       const char *ethaddr;
        struct eth_device *dev;
        dev = (struct eth_device *)malloc(sizeof(*dev));
        if (dev == NULL)
@@ -89,6 +90,27 @@ int bfin_EMAC_initialize(bd_t *bis)
 
        eth_register(dev);
 
+       ethaddr = getenv("ethaddr");
+#ifndef CONFIG_ETHADDR
+       if (ethaddr == NULL) {
+               char nid[20];
+               board_get_enetaddr(bd->bi_enetaddr);
+               sprintf(nid, "%02X:%02X:%02X:%02X:%02X:%02X",
+                       bd->bi_enetaddr[0], bd->bi_enetaddr[1],
+                       bd->bi_enetaddr[2], bd->bi_enetaddr[3],
+                       bd->bi_enetaddr[4], bd->bi_enetaddr[5]);
+               setenv("ethaddr", nid);
+       } else
+#endif
+       {
+               int i;
+               char *e;
+               for (i = 0; i < 6; ++i) {
+                       bd->bi_enetaddr[i] = simple_strtoul(ethaddr, &e, 16);
+                       ethaddr = (*e) ? e + 1 : e;
+               }
+       }
+
        return 0;
 }
 
diff --git a/include/common.h b/include/common.h
index afee188..d4c361a 100644
--- a/include/common.h
+++ b/include/common.h
@@ -354,7 +354,7 @@ void        board_ether_init (void);
 #if defined(CONFIG_RPXCLASSIC) || defined(CONFIG_MBX) || \
     defined(CONFIG_IAD210)     || defined(CONFIG_XPEDITE1K) || \
     defined(CONFIG_METROBOX)    || defined(CONFIG_KAREF) || \
-    defined(CONFIG_V38B)
+    defined(CONFIG_V38B)        || defined(CONFIG_BFIN_MAC)
 void   board_get_enetaddr (uchar *addr);
 #endif
 
diff --git a/lib_blackfin/board.c b/lib_blackfin/board.c
index 01b71d4..c1fa61b 100644
--- a/lib_blackfin/board.c
+++ b/lib_blackfin/board.c
@@ -378,35 +378,6 @@ void board_init_r(gd_t * id, ulong dest_addr)
        /* relocate environment function pointers etc. */
        env_relocate();
 
-#ifdef CONFIG_CMD_NET
-       /* board MAC address */
-       s = getenv("ethaddr");
-       if (s == NULL) {
-# ifndef CONFIG_ETHADDR
-#  if 0
-               if (!board_get_enetaddr(bd->bi_enetaddr)) {
-                       char nid[20];
-                       sprintf(nid, "%02X:%02X:%02X:%02X:%02X:%02X",
-                               bd->bi_enetaddr[0], bd->bi_enetaddr[1],
-                               bd->bi_enetaddr[2], bd->bi_enetaddr[3],
-                               bd->bi_enetaddr[4], bd->bi_enetaddr[5]);
-                       setenv("ethaddr", nid);
-               }
-#  endif
-# endif
-       } else {
-               int i;
-               char *e;
-               for (i = 0; i < 6; ++i) {
-                       bd->bi_enetaddr[i] = simple_strtoul(s, &e, 16);
-                       s = (*e) ? e + 1 : e;
-               }
-       }
-
-       /* IP Address */
-       bd->bi_ip_addr = getenv_IPaddr("ipaddr");
-#endif
-
        /* Initialize devices */
        devices_init();
        jumptable_init();
@@ -433,6 +404,8 @@ void board_init_r(gd_t * id, ulong dest_addr)
 #endif
 
 #ifdef CONFIG_CMD_NET
+       /* IP Address */
+       bd->bi_ip_addr = getenv_IPaddr("ipaddr");
        printf("Net:   ");
        eth_initialize(gd->bd);
        if (getenv("ethaddr"))
-- 
1.6.1.1

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to