At present this function fails silently on error. Update it to produce an error code. Report this error to the user and abort the boot, since it likely will prevent a successful start.
No tests are added at this stage, since additional refactoring is taking place in subsequent patches. Signed-off-by: Simon Glass <s...@chromium.org> --- common/bootm.c | 22 +++++++++++++++------- include/bootm.h | 11 +++++++++-- test/bootm.c | 10 +++++----- 3 files changed, 29 insertions(+), 14 deletions(-) diff --git a/common/bootm.c b/common/bootm.c index 8e1e5337036..0ca66188c2b 100644 --- a/common/bootm.c +++ b/common/bootm.c @@ -466,7 +466,7 @@ ulong bootm_disable_interrupts(void) #define CONSOLE_ARG "console=" #define CONSOLE_ARG_LEN (sizeof(CONSOLE_ARG) - 1) -void fixup_silent_linux(void) +int fixup_silent_linux(void) { char *buf; const char *env_val; @@ -475,7 +475,7 @@ void fixup_silent_linux(void) if (!IS_ENABLED(CONFIG_SILENT_CONSOLE) && !IS_ENABLED(CONFIG_SILENT_U_BOOT_ONLY)) - return; + return 0; cmdline = env_get("bootargs"); /* @@ -487,9 +487,9 @@ void fixup_silent_linux(void) */ want_silent = env_get_yesno("silent_linux"); if (want_silent == 0) - return; + return 0; else if (want_silent == -1 && !(gd->flags & GD_FLG_SILENT)) - return; + return 0; debug("before silent fix-up: %s\n", cmdline); if (cmdline && (cmdline[0] != '\0')) { @@ -499,7 +499,7 @@ void fixup_silent_linux(void) buf = malloc(strlen(cmdline) + 1 + CONSOLE_ARG_LEN + 1); if (!buf) { debug("%s: out of memory\n", __func__); - return; + return -ENOSPC; } if (start) { @@ -523,6 +523,8 @@ void fixup_silent_linux(void) env_set("bootargs", env_val); debug("after silent fix-up: %s\n", env_val); free(buf); + + return 0; } /** @@ -627,8 +629,14 @@ int do_bootm_states(struct cmd_tbl *cmdtp, int flag, int argc, if (!ret && (states & BOOTM_STATE_OS_BD_T)) ret = boot_fn(BOOTM_STATE_OS_BD_T, argc, argv, images); if (!ret && (states & BOOTM_STATE_OS_PREP)) { - if (images->os.os == IH_OS_LINUX) - fixup_silent_linux(); + if (images->os.os == IH_OS_LINUX) { + ret = fixup_silent_linux(); + if (ret) { + printf("Cmdline setup failed (err=%d)\n", ret); + ret = CMD_RET_FAILURE; + goto err; + } + } ret = boot_fn(BOOTM_STATE_OS_PREP, argc, argv, images); } diff --git a/include/bootm.h b/include/bootm.h index 6d675e64559..438829af0fe 100644 --- a/include/bootm.h +++ b/include/bootm.h @@ -85,7 +85,14 @@ void arch_preboot_os(void); */ void board_preboot_os(void); -/* Adjust the 'bootargs' to ensure that Linux boots silently, if required */ -void fixup_silent_linux(void); +/* + * fixup_silent_linux() - Process fix-ups for the command line + * + * Updates the 'bootargs' envvar as required. This handles making Linux boot + * silently if requested ('silent_linux' envvar) + * + * @return 0 if OK, -ENOMEM if out of memory + */ +int fixup_silent_linux(void); #endif diff --git a/test/bootm.c b/test/bootm.c index 59d16cb3df6..ab1711609ba 100644 --- a/test/bootm.c +++ b/test/bootm.c @@ -23,26 +23,26 @@ static int bootm_test_silent_var(struct unit_test_state *uts) /* 'silent_linux' not set should do nothing */ env_set("silent_linux", NULL); env_set("bootargs", CONSOLE_STR); - fixup_silent_linux(); + ut_assertok(fixup_silent_linux()); ut_asserteq_str(CONSOLE_STR, env_get("bootargs")); env_set("bootargs", NULL); - fixup_silent_linux(); + ut_assertok(fixup_silent_linux()); ut_assertnull(env_get("bootargs")); ut_assertok(env_set("silent_linux", "no")); env_set("bootargs", CONSOLE_STR); - fixup_silent_linux(); + ut_assertok(fixup_silent_linux()); ut_asserteq_str(CONSOLE_STR, env_get("bootargs")); ut_assertok(env_set("silent_linux", "yes")); env_set("bootargs", CONSOLE_STR); - fixup_silent_linux(); + ut_assertok(fixup_silent_linux()); ut_asserteq_str("console=", env_get("bootargs")); /* Empty buffer should still add the string */ env_set("bootargs", NULL); - fixup_silent_linux(); + ut_assertok(fixup_silent_linux()); ut_asserteq_str("console=", env_get("bootargs")); return 0; -- 2.29.0.rc1.297.gfa9743e501-goog