mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-21 06:31:31 +00:00
arm: mvebu: turris_omnia: support invoking rescue boot from console
Make it possible to invoke rescue boot from U-Boot console, without having to press the factory reset button. This is needed when accessing the device remotely, for example. Achieve this by putting rescue command into `bootcmd_rescue` default environment variable and setting some distroboot environment variables to their default values when the factory button is pressed. Rescue boot from console can be invoked by running run bootcmd_rescue Signed-off-by: Marek Behún <marek.behun@nic.cz> Reviewed-by: Pali Rohár <pali@kernel.org> Reviewed-by: Stefan Roese <sr@denx.de>
This commit is contained in:
parent
0b5bb36d13
commit
176c3e7760
2 changed files with 52 additions and 24 deletions
|
@ -337,29 +337,6 @@ static int set_regdomain(void)
|
||||||
return env_set("regdomain", rd);
|
return env_set("regdomain", rd);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* default factory reset bootcommand on Omnia first sets all the front LEDs
|
|
||||||
* to green and then tries to load the rescue image from SPI flash memory and
|
|
||||||
* boot it
|
|
||||||
*/
|
|
||||||
#define OMNIA_FACTORY_RESET_BOOTCMD \
|
|
||||||
"i2c dev 2; " \
|
|
||||||
"i2c mw 0x2a.1 0x3 0x1c 1; " \
|
|
||||||
"i2c mw 0x2a.1 0x4 0x1c 1; " \
|
|
||||||
"mw.l 0x01000000 0x00ff000c; " \
|
|
||||||
"i2c write 0x01000000 0x2a.1 0x5 4 -s; " \
|
|
||||||
"setenv bootargs \"earlyprintk console=ttyS0,115200" \
|
|
||||||
" omniarescue=$omnia_reset rescue_mode=$omnia_reset\"; " \
|
|
||||||
"sf probe; " \
|
|
||||||
"sf read 0x1000000 0x100000 0x700000; " \
|
|
||||||
"lzmadec 0x1000000 0x1700000; " \
|
|
||||||
"if gpio input gpio@71_4; then " \
|
|
||||||
"bootm 0x1700000#sfp; " \
|
|
||||||
"else " \
|
|
||||||
"bootm 0x1700000; " \
|
|
||||||
"fi; " \
|
|
||||||
"bootz 0x1000000"
|
|
||||||
|
|
||||||
static void handle_reset_button(void)
|
static void handle_reset_button(void)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -375,8 +352,36 @@ static void handle_reset_button(void)
|
||||||
env_set_ulong("omnia_reset", reset_status);
|
env_set_ulong("omnia_reset", reset_status);
|
||||||
|
|
||||||
if (reset_status) {
|
if (reset_status) {
|
||||||
|
const char * const vars[3] = {
|
||||||
|
"bootcmd",
|
||||||
|
"bootcmd_rescue",
|
||||||
|
"distro_bootcmd",
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set the above envs to their default values, in case the user
|
||||||
|
* managed to break them.
|
||||||
|
*/
|
||||||
|
env_set_default_vars(3, (char * const *)vars, 0);
|
||||||
|
|
||||||
|
/* Ensure bootcmd_rescue is used by distroboot */
|
||||||
|
env_set("boot_targets", "rescue");
|
||||||
|
|
||||||
printf("RESET button was pressed, overwriting bootcmd!\n");
|
printf("RESET button was pressed, overwriting bootcmd!\n");
|
||||||
env_set("bootcmd", OMNIA_FACTORY_RESET_BOOTCMD);
|
} else {
|
||||||
|
/*
|
||||||
|
* In case the user somehow managed to save environment with
|
||||||
|
* boot_targets=rescue, reset boot_targets to default value.
|
||||||
|
* This could happen in subsequent commands if bootcmd_rescue
|
||||||
|
* failed.
|
||||||
|
*/
|
||||||
|
if (!strcmp(env_get("boot_targets"), "rescue")) {
|
||||||
|
const char * const vars[1] = {
|
||||||
|
"boot_targets",
|
||||||
|
};
|
||||||
|
|
||||||
|
env_set_default_vars(1, (char * const *)vars, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -108,12 +108,35 @@
|
||||||
|
|
||||||
#include <config_distro_bootcmd.h>
|
#include <config_distro_bootcmd.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The factory reset bootcommand on Omnia first sets all the front LEDs to green
|
||||||
|
* and then tries to load the rescue image from SPI flash memory and boot it
|
||||||
|
*/
|
||||||
|
#define TURRIS_OMNIA_BOOTCMD_RESCUE \
|
||||||
|
"i2c dev 2; " \
|
||||||
|
"i2c mw 0x2a.1 0x3 0x1c 1; " \
|
||||||
|
"i2c mw 0x2a.1 0x4 0x1c 1; " \
|
||||||
|
"mw.l 0x01000000 0x00ff000c; " \
|
||||||
|
"i2c write 0x01000000 0x2a.1 0x5 4 -s; " \
|
||||||
|
"setenv bootargs \"earlyprintk console=ttyS0,115200" \
|
||||||
|
" omniarescue=$omnia_reset rescue_mode=$omnia_reset\"; " \
|
||||||
|
"sf probe; " \
|
||||||
|
"sf read 0x1000000 0x100000 0x700000; " \
|
||||||
|
"lzmadec 0x1000000 0x1700000; " \
|
||||||
|
"if gpio input gpio@71_4; then " \
|
||||||
|
"bootm 0x1700000#sfp; " \
|
||||||
|
"else " \
|
||||||
|
"bootm 0x1700000; " \
|
||||||
|
"fi; " \
|
||||||
|
"bootz 0x1000000"
|
||||||
|
|
||||||
#define CONFIG_EXTRA_ENV_SETTINGS \
|
#define CONFIG_EXTRA_ENV_SETTINGS \
|
||||||
RELOCATION_LIMITS_ENV_SETTINGS \
|
RELOCATION_LIMITS_ENV_SETTINGS \
|
||||||
LOAD_ADDRESS_ENV_SETTINGS \
|
LOAD_ADDRESS_ENV_SETTINGS \
|
||||||
"fdtfile=" CONFIG_DEFAULT_DEVICE_TREE ".dtb\0" \
|
"fdtfile=" CONFIG_DEFAULT_DEVICE_TREE ".dtb\0" \
|
||||||
"console=ttyS0,115200\0" \
|
"console=ttyS0,115200\0" \
|
||||||
"ethact=ethernet@34000\0" \
|
"ethact=ethernet@34000\0" \
|
||||||
|
"bootcmd_rescue=" TURRIS_OMNIA_BOOTCMD_RESCUE "\0" \
|
||||||
BOOTENV
|
BOOTENV
|
||||||
|
|
||||||
#endif /* CONFIG_SPL_BUILD */
|
#endif /* CONFIG_SPL_BUILD */
|
||||||
|
|
Loading…
Add table
Reference in a new issue