
This code auto-detects the boot mode, but it should respect the user's choice if "bootmode" environment is found in a saved set of environments.
Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com ---
arch/arm/mach-uniphier/board_late_init.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-)
diff --git a/arch/arm/mach-uniphier/board_late_init.c b/arch/arm/mach-uniphier/board_late_init.c index a454126..b3fe016 100644 --- a/arch/arm/mach-uniphier/board_late_init.c +++ b/arch/arm/mach-uniphier/board_late_init.c @@ -62,33 +62,46 @@ static int uniphier_set_fdt_file(void) return setenv("fdt_file", dtb_name); }
+static int uniphier_set_bootmode(const char *bootmode) +{ + if (getenv("bootmode")) + return 0; /* do nothing if it is already set */ + + return setenv("bootenv", bootmode); +} + int board_late_init(void) { + const char *bootmode; + puts("MODE: ");
switch (spl_boot_device_raw()) { case BOOT_DEVICE_MMC1: printf("eMMC Boot\n"); - setenv("bootmode", "emmcboot"); + bootmode = "emmcboot"; break; case BOOT_DEVICE_NAND: printf("NAND Boot\n"); - setenv("bootmode", "nandboot"); nand_denali_wp_disable(); + bootmode = "nandboot"; break; case BOOT_DEVICE_NOR: printf("NOR Boot\n"); - setenv("bootmode", "norboot"); + bootmode = "norboot"; break; case BOOT_DEVICE_USB: printf("USB Boot\n"); - setenv("bootmode", "usbboot"); + bootmode = "usbboot"; break; default: printf("Unknown\n"); - break; + return; }
+ if (uniphier_set_bootmode(bootmode)) + printf("bootmode environment was not set correctly\n"); + if (uniphier_set_fdt_file()) printf("fdt_file environment was not set correctly\n");