]> git.sur5r.net Git - u-boot/blobdiff - board/netstal/common/nm_bsp.c
Merge branch 'new-image' of git://www.denx.de/git/u-boot-testing
[u-boot] / board / netstal / common / nm_bsp.c
index a9de45ea704eb738a974fa6ed7855bc494dba26f..86f491b34ec49e2564172ef8502d2130c600f8df 100644 (file)
@@ -1,5 +1,5 @@
 /*
- *(C) Copyright 2005-2007 Netstal Maschinen AG
+ *(C) Copyright 2005-2008 Netstal Maschinen AG
  *    Niklaus Giger (Niklaus.Giger@netstal.com)
  *
  *    This source code is free software; you can redistribute it
 
 #include <common.h>
 #include <command.h>
+#include <net.h>
+#include "nm.h"
 
-#ifdef CONFIG_CMD_BSP
-/*
- * Command nm_bsp: Netstal Maschinen BSP specific command
- */
-int nm_bsp(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+DECLARE_GLOBAL_DATA_PTR;
+
+#define DEFAULT_ETH_ADDR  "ethaddr"
+
+typedef struct {u8     id;     char *name;} generation_info;
+
+generation_info generations[6] = {
+       {HW_GENERATION_HCU3,    "HCU3"},
+       {HW_GENERATION_HCU4,    "HCU4"},
+       {HW_GENERATION_HCU5,    "HCU5"},
+       {HW_GENERATION_MCU,     "MCU"},
+       {HW_GENERATION_MCU20,   "MCU20"},
+       {HW_GENERATION_MCU25,   "MCU25"},
+};
+
+void nm_show_print(int generation, int index, int hw_capabilities)
+{
+       int j;
+       char *generationName=0;
+
+       /* reset ANSI terminal color mode */
+       printf("\x1B""[0m""Netstal Maschinen AG: ");
+       for (j=0; j < (sizeof(generations)/sizeof(generations[0])); j++) {
+               if (generations[j].id == generation) {
+                       generationName = generations[j].name;
+                       break;
+               }
+       }
+       printf("%s: index %d HW 0x%x\n", generationName, index, hw_capabilities);
+       for (j = 0;j < 6; j++) {
+               hcu_led_set(1 << j);
+               udelay(200 * 1000);
+       }
+}
+
+void set_params_for_sw_install(int install_requested, char *board_name )
 {
-       printf("%s: flag %d,  argc %d,  argv[0] %s\n",  __FUNCTION__,
-              flag,  argc,  argv[0]);
-       printf("Netstal Maschinen BSP specific command. None at the moment.\n");
-       return 0;
+       if (install_requested) {
+               char string[128];
+
+               printf("\n\n%s SW-Installation: %d patching boot parameters\n",
+                      board_name, install_requested);
+               setenv("bootdelay", "0");
+               setenv("loadaddr", "0x01000000");
+               setenv("serverip", "172.25.1.1");
+               setenv("bootcmd", "run install");
+               sprintf(string, "tftp ${loadaddr} admin/sw_on_hd; "
+                       "tftp ${loadaddr} installer/%s_sw_inst; "
+                       "run boot_sw_inst", board_name);
+               setenv("install", string);
+               sprintf(string, "setenv bootargs emac(0,0)c:%s/%s_sw_inst "
+                       "e=${ipaddr} h=${serverip} f=0x1000; "
+                       "bootvx ${loadaddr}\0",
+                       board_name, board_name);
+               setenv("boot_sw_inst", string);
+       }
 }
 
-U_BOOT_CMD(
-         nm_bsp, 1,      1,      nm_bsp,
-         "nm_bsp  - Netstal Maschinen BSP specific command. \n",
-         "Help for Netstal Maschinen BSP specific command.\n"
-         );
-#endif
+void common_misc_init_r(void)
+{
+       char *s = getenv(DEFAULT_ETH_ADDR);
+       char *e;
+       int i;
+       u32 serial = get_serial_number();
+       IPaddr_t ipaddr;
+       char *ipstring;
+
+       for (i = 0; i < 6; ++i) {
+               gd->bd->bi_enetaddr[i] = s ? simple_strtoul(s, &e, 16) : 0;
+               if (s)
+                       s = (*e) ? e + 1 : e;
+       }
+
+       if (gd->bd->bi_enetaddr[3] == 0 &&
+           gd->bd->bi_enetaddr[4] == 0 &&
+           gd->bd->bi_enetaddr[5] == 0) {
+               char ethaddr[22];
+
+               /* Must be in sync with CONFIG_ETHADDR */
+               gd->bd->bi_enetaddr[0] = 0x00;
+               gd->bd->bi_enetaddr[1] = 0x60;
+               gd->bd->bi_enetaddr[2] = 0x13;
+               gd->bd->bi_enetaddr[3] = (serial >> 16) & 0xff;
+               gd->bd->bi_enetaddr[4] = (serial >>  8) & 0xff;
+               gd->bd->bi_enetaddr[5] = hcu_get_slot();
+               sprintf(ethaddr, "%02X:%02X:%02X:%02X:%02X:%02X\0",
+                       gd->bd->bi_enetaddr[0], gd->bd->bi_enetaddr[1],
+                       gd->bd->bi_enetaddr[2], gd->bd->bi_enetaddr[3],
+                       gd->bd->bi_enetaddr[4], gd->bd->bi_enetaddr[5]) ;
+               printf("%s: Setting eth %s serial 0x%x\n",  __FUNCTION__,
+                      ethaddr, serial);
+               setenv(DEFAULT_ETH_ADDR, ethaddr);
+       }
+
+       /* IP-Adress update */
+       ipstring = getenv("ipaddr");
+       if (ipstring == 0)
+               ipaddr = string_to_ip("172.25.1.99");
+       else
+               ipaddr = string_to_ip(ipstring);
+       if ((ipaddr & 0xff) != (32 + hcu_get_slot())) {
+               char tmp[22];
+
+               ipaddr = (ipaddr & 0xffffff00) + 32 + hcu_get_slot();
+               ip_to_string (ipaddr, tmp);
+               printf("%s: enforce %s\n",  __FUNCTION__, tmp);
+               setenv("ipaddr", tmp);
+               saveenv();
+       }
+}