]> git.ipfire.org Git - people/ms/u-boot.git/blobdiff - board/BuR/kwb/board.c
board/BuR/kwb: Form a bootline for vxWorks
[people/ms/u-boot.git] / board / BuR / kwb / board.c
index 8aa16bcf808986850d4fdd02c67d33f0461fbcfd..455f4721f0d1f532a3b934bc483c0277d11dd9c8 100644 (file)
 #include <i2c.h>
 #include <power/tps65217.h>
 #include "../common/bur_common.h"
+#include <lcd.h>
 
 /* -------------------------------------------------------------------------*/
 /* -- defines for used GPIO Hardware -- */
-#define KEY                                            (0+4)
-#define LCD_PWR                                                (0+5)
-#define PUSH_KEY                                       (0+31)
-#define USB2SD_NRST                                    (32+29)
-#define USB2SD_PWR                                     (96+13)
+#define ESC_KEY                                        (0+19)
+#define LCD_PWR                                        (0+5)
+#define PUSH_KEY                               (0+31)
 /* -------------------------------------------------------------------------*/
 /* -- PSOC Resetcontroller Register defines -- */
 
 
 /* -- defines for RSTCTRL_CTRLREG  -- */
 #define        RSTCTRL_FORCE_PWR_NEN                   0x0404
+#define        RSTCTRL_CAN_STB                         0x4040
+
+#define VXWORKS_BOOTLINE                       0x80001100
+#define DEFAULT_BOOTLINE       "cpsw(0,0):pme/vxWorks"
+#define VXWORKS_USER           "u=vxWorksFTP pw=vxWorks tn=vxtarget"
+
+DECLARE_GLOBAL_DATA_PTR;
 
 #if defined(CONFIG_SPL_BUILD)
 /* TODO: check ram-timing ! */
@@ -107,10 +113,13 @@ void am33xx_spl_board_init(void)
                &cmper->epwmss0clkctrl,
                &cmper->epwmss1clkctrl,
                &cmper->epwmss2clkctrl,
+               &cmper->lcdclkctrl,
+               &cmper->lcdcclkstctrl,
                0
        };
        do_enable_clocks(clk_domains, clk_modules_kwbspecific, 1);
-
+       /* setup LCD-Pixel Clock */
+       writel(0x2, CM_DPLL + 0x34);
        /* power-OFF LCD-Display */
        gpio_direction_output(LCD_PWR, 0);
 
@@ -120,8 +129,8 @@ void am33xx_spl_board_init(void)
 
        /* power-ON  3V3 via Resetcontroller */
        oldspeed = i2c_get_bus_speed();
-       if (0 != i2c_set_bus_speed(CONFIG_SYS_OMAP24_I2C_SPEED_PSOC)) {
-               buf = RSTCTRL_FORCE_PWR_NEN;
+       if (i2c_set_bus_speed(CONFIG_SYS_OMAP24_I2C_SPEED_PSOC) >= 0) {
+               buf = RSTCTRL_FORCE_PWR_NEN | RSTCTRL_CAN_STB;
                i2c_write(RSTCTRL_ADDR, RSTCTRL_CTRLREG, 1,
                          (uint8_t *)&buf, sizeof(buf));
                i2c_set_bus_speed(oldspeed);
@@ -129,15 +138,6 @@ void am33xx_spl_board_init(void)
                puts("ERROR: i2c_set_bus_speed failed! (turn on PWR_nEN)\n");
        }
 
-#if defined(CONFIG_AM335X_USB0)
-       /* power on USB2SD Controller */
-       gpio_direction_output(USB2SD_PWR, 1);
-       mdelay(1);
-       /* give a reset Pulse to USB2SD Controller */
-       gpio_direction_output(USB2SD_NRST, 0);
-       mdelay(1);
-       gpio_set_value(USB2SD_NRST, 1);
-#endif
        pmicsetup(0);
 }
 
@@ -166,7 +166,6 @@ int board_init(void)
 #ifdef CONFIG_BOARD_LATE_INIT
 int board_late_init(void)
 {
-       const unsigned int ton  = 250;
        const unsigned int toff = 1000;
        unsigned int cnt  = 3;
        unsigned short buf = 0xAAAA;
@@ -175,59 +174,110 @@ int board_late_init(void)
        tps65217_reg_write(TPS65217_PROT_LEVEL_NONE,
                           TPS65217_WLEDCTRL2, 0x32, 0xFF); /* 50% dimlevel */
 
-       if (gpio_get_value(KEY)) {
+       if (gpio_get_value(ESC_KEY)) {
                do {
-                       /* turn on light */
-                       tps65217_reg_write(TPS65217_PROT_LEVEL_NONE,
-                                          TPS65217_WLEDCTRL1, 0x09, 0xFF);
-                       mdelay(ton);
-                       /* turn off light */
-                       tps65217_reg_write(TPS65217_PROT_LEVEL_NONE,
-                                          TPS65217_WLEDCTRL1, 0x01, 0xFF);
+                       lcd_position_cursor(1, 8);
+                       switch (cnt) {
+                       case 3:
+                               lcd_puts(
+                               "release ESC-KEY to enter SERVICE-mode.");
+                               break;
+                       case 2:
+                               lcd_puts(
+                               "release ESC-KEY to enter DIAGNOSE-mode.");
+                               break;
+                       case 1:
+                               lcd_puts(
+                               "release ESC-KEY to enter BOOT-mode.    ");
+                               break;
+                       }
                        mdelay(toff);
                        cnt--;
-                       if (!gpio_get_value(KEY) &&
+                       if (!gpio_get_value(ESC_KEY) &&
+                           gpio_get_value(PUSH_KEY) && 2 == cnt) {
+                               lcd_position_cursor(1, 8);
+                               lcd_puts(
+                               "switching to network-console ...       ");
+                               setenv("bootcmd", "run netconsole");
+                               cnt = 4;
+                               break;
+                       } else if (!gpio_get_value(ESC_KEY) &&
                            gpio_get_value(PUSH_KEY) && 1 == cnt) {
-                               puts("updating from USB ...\n");
+                               lcd_position_cursor(1, 8);
+                               lcd_puts(
+                               "updating U-BOOT from USB ...           ");
                                setenv("bootcmd", "run usbupdate");
+                               cnt = 4;
+                               break;
+                       } else if ((!gpio_get_value(ESC_KEY) &&
+                                   gpio_get_value(PUSH_KEY) && cnt == 0) ||
+                                   (gpio_get_value(ESC_KEY) &&
+                                   gpio_get_value(PUSH_KEY) && cnt == 0)) {
+                               lcd_position_cursor(1, 8);
+                               lcd_puts(
+                               "starting script from network ...      ");
+                               setenv("bootcmd", "run netscript");
+                               cnt = 4;
                                break;
-                       } else if (!gpio_get_value(KEY)) {
+                       } else if (!gpio_get_value(ESC_KEY)) {
                                break;
                        }
                } while (cnt);
        }
 
+       lcd_position_cursor(1, 8);
        switch (cnt) {
        case 0:
-               puts("3 blinks ... entering BOOT mode.\n");
+               lcd_puts("entering BOOT-mode.                    ");
+               setenv("bootcmd", "run defaultAR");
                buf = 0x0000;
                break;
        case 1:
-               puts("2 blinks ... entering DIAGNOSE mode.\n");
+               lcd_puts("entering DIAGNOSE-mode.                ");
                buf = 0x0F0F;
                break;
        case 2:
-               puts("1 blinks ... entering SERVICE mode.\n");
+               lcd_puts("entering SERVICE mode.                 ");
                buf = 0xB4B4;
                break;
        case 3:
-               puts("0 blinks ... entering RUN mode.\n");
+               lcd_puts("loading OS...                          ");
                buf = 0x0404;
                break;
        }
-       mdelay(ton);
-       /* turn on light */
-       tps65217_reg_write(TPS65217_PROT_LEVEL_NONE,
-                          TPS65217_WLEDCTRL1, 0x09, 0xFF);
        /* write bootinfo into scratchregister of resetcontroller */
        oldspeed = i2c_get_bus_speed();
-       if (0 != i2c_set_bus_speed(CONFIG_SYS_OMAP24_I2C_SPEED_PSOC)) {
+       if (i2c_set_bus_speed(CONFIG_SYS_OMAP24_I2C_SPEED_PSOC) >= 0) {
                i2c_write(RSTCTRL_ADDR, RSTCTRL_SCRATCHREG, 1,
                          (uint8_t *)&buf, sizeof(buf));
                i2c_set_bus_speed(oldspeed);
        } else {
                puts("ERROR: i2c_set_bus_speed failed! (scratchregister)\n");
        }
+       /* setup vxworks bootline */
+       char *vxworksbootline = (char *)VXWORKS_BOOTLINE;
+
+       /* setup default IP, in case if there is nothing in environment */
+       if (!getenv("ipaddr")) {
+               setenv("ipaddr", "192.168.60.1");
+               setenv("netmask", "255.255.255.0");
+               setenv("serverip", "192.168.60.254");
+               setenv("gatewayip", "192.168.60.254");
+               puts("net: had no IP! made default setup.\n");
+       }
+
+       sprintf(vxworksbootline,
+               "%s h=%s e=%s:%s g=%s %s o=0x%08x;0x%08x;0x%08x;0x%08x",
+               DEFAULT_BOOTLINE,
+               getenv("serverip"),
+               getenv("ipaddr"), getenv("netmask"),
+               getenv("gatewayip"),
+               VXWORKS_USER,
+               (unsigned int) gd->fb_base-0x20,
+               (u32)getenv_ulong("vx_memtop", 16, gd->fb_base-0x20),
+               (u32)getenv_ulong("vx_romfsbase", 16, 0),
+               (u32)getenv_ulong("vx_romfssize", 16, 0));
+
        /*
         * reset VBAR registers to its reset location, VxWorks 6.9.3.2 does
         * expect that vectors are there, original u-boot moves them to _start