boards: get mac address from env and move load_sernum_ethaddr() to board init
authorMike Frysinger <vapier@gentoo.org>
Thu, 12 Feb 2009 01:09:52 +0000 (20:09 -0500)
committerWolfgang Denk <wd@denx.de>
Fri, 20 Mar 2009 21:39:12 +0000 (22:39 +0100)
The environment is the canonical storage location of the mac address, so
we're killing off the global data location and moving everything to
querying the env directly.

Rather than have common ppc code call a board-specific function like
load_sernum_ethaddr(), have each board call it in its own board-specific
misc_init_r() function.

The boards that get converted here are:
- kup4k/kup4x
- pcs440ep
- tqm8xx

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
CC: Ben Warren <biggerbadderben@gmail.com>
CC: Stefan Roese <sr@denx.de>
board/kup/common/kup.h
board/kup/kup4k/kup4k.c
board/kup/kup4x/kup4x.c
board/m501sk/m501sk.c
board/pcs440ep/pcs440ep.c
board/tqc/tqm8xx/tqm8xx.c
include/common.h
lib_ppc/board.c

index 70d7f01e68f7cbabd77d5e057eb7ccaaa3908dfb..b73628310472014b84a16be833d9dff653bff35f 100644 (file)
@@ -41,4 +41,6 @@
 
 extern void poweron_key (void);
 
+extern void load_sernum_ethaddr(void);
+
 #endif /* __KUP_H */
index df3ffb4d71cec2e2b62f464c8cc1034c673e1369..98f5f5a30a5142df6a4718f6b742056e4c968176 100644 (file)
@@ -250,6 +250,7 @@ int misc_init_r (void)
        immap->im_ioport.iop_papar &= ~0x80;
        immap->im_ioport.iop_padat |= 0x80;     /* turn it off */
 #endif
+       load_sernum_ethaddr();
        setenv("hw","4k");
        poweron_key();
        return (0);
index c5b742dd7289438951efb8a5cd81e15f9328fe95..65a222b5ef1c4f5f9f49a8f383593fffed43e7f2 100644 (file)
@@ -295,7 +295,6 @@ static long int dram_size (long int mamr_value, long int *base,
 int misc_init_r (void)
 {
        volatile immap_t *immap = (immap_t *) CONFIG_SYS_IMMR;
-
 #ifdef CONFIG_IDE_LED
        /* Configure PA8 as output port */
        immap->im_ioport.iop_padir |= 0x80;
@@ -306,6 +305,7 @@ int misc_init_r (void)
 #ifdef KUP4X_USB
        usb_init_kup4x ();
 #endif
+       load_sernum_ethaddr();
        setenv ("hw", "4x");
        poweron_key ();
        return (0);
index 65a8b2989f84a2113f067b67d2fbaf2825224c95..dc5b786c00b623f6e4a90056526f88de1331e1c0 100644 (file)
@@ -105,11 +105,6 @@ uchar m501sk_gpio_clear(M501SK_PIO io)
        return status;
 }
 
-void load_sernum_ethaddr(void)
-{
-       return;
-}
-
 /*
  * Miscelaneous platform dependent initialisations
  */
index 5fd3291e4a9c92c305a80454f26b4edae301ab15..27272142c17548ced2c65ed3d64baacb67604c2c 100644 (file)
@@ -182,14 +182,21 @@ int board_early_init_f(void)
 }
 
 #define EEPROM_LEN     256
-void load_sernum_ethaddr (void)
+static void load_ethaddr(void)
 {
+       int     ok_ethaddr, ok_eth1addr;
        int     ret;
        char    buf[EEPROM_LEN];
        char    mac[32];
        char    *use_eeprom;
        u16     checksumcrc16 = 0;
 
+       /* If the env is sane, then nothing for us to do */
+       ok_ethaddr = eth_getenv_enetaddr("ethaddr", buf);
+       ok_eth1addr = eth_getenv_enetaddr("eth1addr", buf);
+       if (ok_ethaddr && ok_eth1addr)
+               return;
+
        /* read the MACs from EEprom */
        status_led_set (0, STATUS_LED_ON);
        status_led_set (1, STATUS_LED_ON);
@@ -207,22 +214,10 @@ void load_sernum_ethaddr (void)
                        printf("%s: EEPROM Checksum not OK\n", __FUNCTION__);
                } else {
                        /* get the MACs */
-                       sprintf (mac, "%02x:%02x:%02x:%02x:%02x:%02x",
-                               buf[3],
-                               buf[4],
-                               buf[5],
-                               buf[6],
-                               buf[7],
-                               buf[8]);
-                       setenv ("ethaddr", (char *) mac);
-                       sprintf (mac, "%02x:%02x:%02x:%02x:%02x:%02x",
-                               buf[9],
-                               buf[10],
-                               buf[11],
-                               buf[12],
-                               buf[13],
-                               buf[14]);
-                       setenv ("eth1addr", (char *) mac);
+                       if (!ok_ethaddr)
+                               eth_setenv_enetaddr("ethaddr", &buf[3]);
+                       if (!ok_eth1addr)
+                               eth_setenv_enetaddr("eth1addr", &buf[9]);
                        return;
                }
        }
@@ -446,6 +441,8 @@ int misc_init_r (void)
        uint pbcr;
        int size_val = 0;
 
+       load_ethaddr();
+
        /* Re-do sizing to get full correct info */
        mtdcr(ebccfga, pb0cr);
        pbcr = mfdcr(ebccfgd);
index e065d69dd4685ba72d27119b3332eb7df8d7e158..f92c598dd847069e492c7434963f14bf3bb388e6 100644 (file)
@@ -449,11 +449,14 @@ int board_early_init_r (void)
 
 
 #ifdef CONFIG_MISC_INIT_R
+extern void load_sernum_ethaddr(void);
 int misc_init_r (void)
 {
        volatile immap_t *immap = (immap_t *) CONFIG_SYS_IMMR;
        volatile memctl8xx_t *memctl = &immap->im_memctl;
 
+       load_sernum_ethaddr();
+
 #ifdef CONFIG_SYS_OR_TIMING_FLASH_AT_50MHZ
        int scy, trlx, flash_or_timing, clk_diff;
 
index 22ab80bf2607d27a21f0d9c7b1f540dcc01b16aa..952ddfffab2bd6810aa0b4f1a823fe1760fa9b5a 100644 (file)
@@ -364,8 +364,6 @@ void  display_mem_map(void);
 void  perform_soft_reset(void);
 #endif
 
-void   load_sernum_ethaddr (void);
-
 /* $(BOARD)/$(BOARD).c */
 int board_early_init_f (void);
 int board_late_init (void);
index dc5be3bd0f81b8c1c090ebb3cfa67348b5c58333..10a4d37e297ab0d61c4dd2a88ee73f20ebff3665 100644 (file)
@@ -943,12 +943,6 @@ void board_init_r (gd_t *id, ulong dest_addr)
        }
 #endif
 
-#if defined(CONFIG_TQM8xxL) || defined(CONFIG_TQM8260) || \
-    defined(CONFIG_TQM8272) || \
-    defined(CONFIG_CCM) || defined(CONFIG_KUP4K) || \
-    defined(CONFIG_KUP4X) || defined(CONFIG_PCS440EP)
-       load_sernum_ethaddr ();
-#endif
        /* IP Address */
        bd->bi_ip_addr = getenv_IPaddr ("ipaddr");