board/BuR/kwb: Support modify bootcmd through reset-controller
authorHannes Petermaier <oe5hpm@oevsv.at>
Tue, 3 Feb 2015 12:22:43 +0000 (13:22 +0100)
committerTom Rini <trini@konsulko.com>
Fri, 6 Mar 2015 01:13:20 +0000 (20:13 -0500)
For some cases it is necessary to modify temporaly the bootcommand.
This can be done by writing into the Scratchregister a specific value:

* 0xCC - modify bootcmd "run netboot"
* 0xCD - modify bootcmd "run netscript"
* 0xCE - modify bootcmd "run mmcboot"

the environment in flash is NOT overwritten.

Signed-off-by: Hannes Petermaier <oe5hpm@oevsv.at>
board/BuR/kwb/board.c

index 455f472..892311e 100644 (file)
@@ -169,10 +169,18 @@ int board_late_init(void)
        const unsigned int toff = 1000;
        unsigned int cnt  = 3;
        unsigned short buf = 0xAAAA;
+       unsigned char scratchreg = 0;
        unsigned int oldspeed;
 
-       tps65217_reg_write(TPS65217_PROT_LEVEL_NONE,
-                          TPS65217_WLEDCTRL2, 0x32, 0xFF); /* 50% dimlevel */
+       /* try to read out some boot-instruction from resetcontroller */
+       oldspeed = i2c_get_bus_speed();
+       if (i2c_set_bus_speed(CONFIG_SYS_OMAP24_I2C_SPEED_PSOC) >= 0) {
+               i2c_read(RSTCTRL_ADDR, RSTCTRL_SCRATCHREG, 1,
+                        &scratchreg, sizeof(scratchreg));
+               i2c_set_bus_speed(oldspeed);
+       } else {
+               puts("ERROR: i2c_set_bus_speed failed! (scratchregister)\n");
+       }
 
        if (gpio_get_value(ESC_KEY)) {
                do {
@@ -223,6 +231,24 @@ int board_late_init(void)
                                break;
                        }
                } while (cnt);
+       } else if (scratchreg == 0xCC) {
+               lcd_position_cursor(1, 8);
+               lcd_puts(
+               "starting vxworks from network ...      ");
+               setenv("bootcmd", "run netboot");
+               cnt = 4;
+       } else if (scratchreg == 0xCD) {
+               lcd_position_cursor(1, 8);
+               lcd_puts(
+               "starting script from network ...      ");
+               setenv("bootcmd", "run netscript");
+               cnt = 4;
+       } else if (scratchreg == 0xCE) {
+               lcd_position_cursor(1, 8);
+               lcd_puts(
+               "starting AR from eMMC ...             ");
+               setenv("bootcmd", "run mmcboot");
+               cnt = 4;
        }
 
        lcd_position_cursor(1, 8);